您的位置:首页 > 其它

SSH学习笔记1

2014-06-12 22:25 155 查看
web.xml:

1、首先配置applicationContext

(1)<context-param>作用:在servlet执行之前初始化参数。

默认情况下spring容器初始化时会找配置文件,也就是applicationContext.xml,如果指定了contextConfigLocation的话,spring会自动读取指定参数为contextConfigLocation的位置下的所有符合条件的spring配置文件。

(2)ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。

 

配置Spring MVC第一步:配置DispatcherServlet(**-servlet),在配置时,只需打上**

hib-config.xml或applicationContext.xml:

组建扫描包;

aop代理类;

数据源;

sessionFactory;

hibernateTemplate;

JDBCTemplate;

事务管理;

***-servlet.xml:

对所有包进行扫描,以完成bean创建和自动依赖注入的功能;

启动注解功能,完成请求和注解entity的映射;

在模型视图名称添加前后缀;

spring MVC3.0 核心原理:

1、用户发送请求给服务器。url:user.do

2、服务器收到请求,发现DispatchServlet可以处理,于是调用DispatchServlet(在web.xml里面配)

3、DispatchServlet内部,通过HandleMapping检查这个url有没有对应的Controller,如果有,则调用Controller.

4、Controller开始执行

5、Controller执行完毕后,如果返回字符串,则ViewResolver将字符串转化成相应的视图对象,如果返回ModelAndView对象,该对象本身就包含了视图对象信息

6、DispatchServlet将视图对象中的数据,输出给服务器

7、服务器将数据输出给客户端。

@Resource

private DataSource dataSource;

(@Resource注解从相应属性衍生出set方法。)

public void setDataSource(DataSource dataSource) {

this.dataSource = dataSource;

}

@Controller也可以是@Component:

通过@controller标注即可将class定义为一个controller类。为使spring能找到定义为controller的bean,需要在applicationContext配置文件中增加定义。

<context:component-scan  base-package="包路径"/>  

@RequestMapping

通过@RequestMapping标注,可以将特定的url和具体的controller类或controller类中的方法绑定。

@Controller或@Component

@RequestMapping("/helloworld")

public class Helloworld {

@RequestMapping(method=RequestMethod.GET)
public ModelAndView hello() {
ModelAndView mv = new ModelAndView();
mv.setViewName("helloworld");
return mv;
}

}

如将/hellowrold和 Hellowrold这个controller类绑定,而在hello()方法前的@RequestMapping(method=RequestMethod.GET)则将hello这个方法和/hellorworld.action的get请求绑定起来。

@RequestParam

public String reg(@RequestParam("uname")String name){}

//若jsp中name=uname,则匹配name这个值。

@SessionAttributes:将ModelMap中指定的属性放到session中。

ModelMap的所有映射都会放到request里面

在Controller中ModelMap.addAttribute("a","b")或者ModelMap.put("a","b")

在JSP中: ${requestScope.a}

最后会将b呈现在视图上 

所以ModelMap在这里的用法和HttpServletRequest一样:

req.getSession().setAttribute("a","b")

${sessionScope.a}

 

 @SessionAttributes({"u","a"})

@ModelAttribute

这个注解可以跟@SessionAttributes配合在一起用,可以将ModelMap中属性的值通过该注解自动赋给指定变量

转发: return "index"   return "forward:user.do?method=reg5" (不写forward也可以转发)(在reg4中可以转发到reg5)

转发和重定向的区别:

区别一:

  重定向时浏览器上的网址改变

  转发是浏览器上的网址不变

区别二:

  重定向实际上产生了两次请求

转发只有一次请求

重定向:

  发送请求 -->服务器运行-->响应请求,返回给浏览器一个新的地址与响应码-->浏览器根据响应码,判定该响应为重定向,自动发送一个新的请求给服务器,请求地址为之前返回的地址-->服务器运行-->响应请求给浏览器

转发:

  发送请求 -->服务器运行-->进行请求的重新设置,例如通过request.setAttribute(name,value)-->根据转发的地址,获取该地址的网页-->响应请求给浏览器

区别三:

  重定向时的网址可以是任何网址

  转发的网址必须是本站点的网址

详解:

  重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。

转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。

正文开始:

  先是看上去不同,他们的调用分别如下:

request.getRequestDispatcher("apage.jsp").forward(request, response);//转发到apage.jsp

response.sendRedirect("apage.jsp");//重定向到apage.jsp

在jsp页面中你也会看到通过下面的方式实现转发:

<jsp:forward page="apage.jsp" />

传参:

方法1:HttpServletRequest 

方法2:直接User user
  此方法传递的参数名字必须和domain里的名字一样

Spring的HibernateTemplate实现了门面模式:

*List find(hql)

*List find(hql,Object...values)

*List find(hql,Object value)

*get(String entityName,Serializable id) / load(String entityName,Serializable id)---后者有延时

*delete(Object entity)

*save(Object entity) / persist(Object entity)

*update/saveOrUpdate(Object entity)  ---后者有延时

*******************************************

关于利用hibernateTemplate的find取数据,个人感想:

例如:

在DaoImp中:String str="select u from Information u where u.num=? and u.psw=?";
List<Information> infos =  hibernateTemplate.find(str,new Object[] { num, psw });
此时的infos是一个domain
可用 for(Information info2 :username){
System.out.println(info2.getName());
info.setName(info2.getName());
}
将得到的name放入info中,再从info取出:
String comName = info.getName();
这里的comName,就是当num,psw和数据库中匹配时的name。  

1.过滤器

Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等等工作。它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: