SSH学习笔记1

来源:互联网 发布:老司机测试 知乎 编辑:程序博客网 时间:2024/05/06 02:08
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应用停止或重新部署的时候才销毁.

0 0
原创粉丝点击