spring mvc的流程,添加一个监听器再哪里添加

 

SpringMVC 工作流程:

 

SpringMVC工作流程描述

Dispatcher   调度员

Handler      处理者

Execution    执行、实行、完成

Chain        链、束缚、枷锁

 

 

1.用户向服务器发送请求时,请求被Spring 前端控制器DispatcherServlet获取,如详细图第一步

2.DispatcherServlet对请求URL进行解析(比如我们发送一个url如下的请求

http://localhost:8080/SpringMVC/hello.action),就会得到请求资源标示符(URI,相当于就是上面的hello.action )。然后根据URI,调用处理器映射器(HandlerMapping)获得该Handler配置的所有相关对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回。

3.DispatcherServlet获取上面返回的Handler,并选择一个适合的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法

4.选择好合适的HandlerAdapter后就会开始执行Handler。在填充Handler的入参过程中,根据配置,Spring将帮你做一些额外的工作(我们不需要管)

EG:

Converter   变流器、整流器、转化器

      HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息

      数据转换:对请求消息进行数据转换。如String转换成Integer、Double等

      数据式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等

      数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中

 

5. Handler执行完成后DispatcherServlet 返回一个ModelAndView对象(包含视图名或视图名和模型)

 

6.根据返回的ModelAndView对象,选择一个合适的ViewResolver返会给DispatcherServlet 

 

7.ViewResolver结合,Model和View来渲染视图

 

8.最后将视图渲染结果返回给客户端

 

组件名词解释

1.DispatcherServlet:前端控制器

等同于以前的Controller, 是整个流程的中心, 负责调用其他组件

 

2.HandlerMapping 处理器映射器

负责根据请求找到Handler(处理器),springMVC中可以根据不同的映射器实现不同映射,比如 xml配置方式,注解方式,接口方式等

 

3.Handler后端控制器

在前端控制器的控制下对具体的用户请求进行处理,所以一般情况下都需要开发者进行根据需求进行开发

 

4.HandlerAdapter处理器适配器

处理Handler,可以对多种类型的处理器进行执行,这是对适配器模式的应用体现。

 

5.ViewResolver 视图解析器

负责将处理结果生成view视图、开发者可以根据需要开发view

 

 入门程序(详细步骤): 在理解了springMVC的工作流程后,下面根据流程步骤,来实现入门程序,步骤如下:

1.导入我们的spring架包(一般去官网下载即可 4.2版本用的比较多)

 

2.在web.xml配置前端控制器

[java] view plain copy

1. <servlet>  

2. <servlet-name>springmvc</servlet-name>  

3. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  

4. </servlet>  

5. <!-- 让servlet随服务启动 -->  

6. <servlet-mapping>  

7. <servlet-name>springmvc</servlet-name>  

8. <url-pattern><strong><span style="color:#FF0000;">*.action</span></strong></url-pattern>  

9. </servlet-mapping>  

这里说一下 我们的拦截方式

1.   拦截固定后缀名的URL : 如 *.action, *.do

2.   拦截所有:设置为/,但是该方法会导致静态文件(css,js.jpg)被拦截下来不能正常显示,所以该方式需要特殊处理

注意:不能设置拦截所有为/*  该方式是错误的,因为请求action时,当action跳转到jsp时会再次被拦截,出现异常:根据jsp路径找不到映射地址

 

3.设置springmvc的配置文件

[java] view plain copy

1. <servlet>  

2. <init-param>  

3. <param-name>contextConfigLocation</param-name>  

4.         <param-value>WEB-INF/springmvc.xml</param-value>  

5. </init-param>  

6. </servlet>  

4.开发处理器

[java] view plain copy

1. public class Hello implements Controller{  

2.     @Override  

3.     public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {  

4.         List list = new ArrayList<>();  

5.         list.add("one");  

6.         list.add("two");  

7.         ModelAndView mv = new ModelAndView();  

8.         mv.addObject("list",list);  

9.         return mv;  

10.     }  

11. }  

 

5.在springmvc.xml中配置

[java] view plain copy

1. <!-- 配置适配器 -->  

2. <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>  

3. <!-- 处理器映射器  -->  

4. <!-- 根据bean的 name 查找Handler , 将action的URL 配置在bean的name中-->  

5. <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>  

6.   

7. <!-- 配置处理器 -->  

8. <bean name="/hello.action" class="com.mt.controller.Hello"></bean>  

9. <!-- 配置视图解析器 -->  

10. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>  

6.视图开发  ,jsp文件

[java] view plain copy

1. <%@ page language="java" contentType="text/html; charset=UTF-8"  

2.     pageEncoding="UTF-8"%>  

3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  

4. <html>  

5. <head>  

6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  

7. <title>Insert title here</title>  

8. </head>  

9. <body>  

10. asdfadfadfa  

11. ${list }  

12. </body>  

13. </html>  



测试结果:   开启服务器后, 发送 http://localhost:8080/SpringMVC/hello.action的请求

 

页面显示:

 

对应理解springMVC  的流程即可。

 

----------------------------------------------------------------------------------------------------

 监听器故名思议就是起到监听作用,对某个对象所进行的一系列动作进行监听,并记录下来。JavaWeb主要有三种类型的监听器ServletContextListener,HttpSessionListener,ServletRequestListener,   这三种类型监听器对应的作用域分别是application, session, request。这一节我们看看这三个监听器的用法

 1.创建监听器

   我们创建自定义的监听器需要继承这三个接口。并在web.xml文件中进行配置

   

[java] view plain copy

1. public class firstServletListener implements ServletContextListener {  

2.   

3.     public void contextDestroyed(ServletContextEvent arg0) {  

4.         // TODO Auto-generated method stub  

5.          System.out.println("contextDestroyed");  

6.     }  

7.   

8.     public void contextInitialized(ServletContextEvent arg0) {  

9.         // TODO Auto-generated method stub  

10.            System.out.println("contextInitialized");  

11.     }  

12.   

13. }  

 

[java] view plain copy

1. public class firstSessionListener implements HttpSessionListener {  

2.   

3.     public void sessionCreated(HttpSessionEvent arg0) {  

4.         // TODO Auto-generated method stub  

5.            System.out.println("sessionCreated");  

6.     }  

7.   

8.     public void sessionDestroyed(HttpSessionEvent arg0) {  

9.         // TODO Auto-generated method stub  

10.           System.out.println("sessionDestroyed");  

11.     }  

12.   

13. }  

 

[java] view plain copy

1. public class firstRequestListener implements ServletRequestListener {  

2.   

3.     public void requestDestroyed(ServletRequestEvent arg0) {  

4.         // TODO Auto-generated method stub  

5.          System.out.println("requestDestroyed");  

6.     }  

7.   

8.     public void requestInitialized(ServletRequestEvent arg0) {  

9.         // TODO Auto-generated method stub  

10.           System.out.println("requestInitialized");  

11.     }  

12.   

13. }  

 

web.xml中添加配置

[html] view plain copy

1. <listener>   

2.         <listener-class>com.selfListener.firstServletListener</listener-class>  

3.       </listener>  

4.        <listener>   

5.         <listener-class>com.selfListener.firstSessionListener</listener-class>  

6.       </listener>  

7.        <listener>   

8.         <listener-class>com.selfListener.firstRequestListener</listener-class>  

9.       </listener>  

[html] view plain copy

1. <!-- 配置session超时时间为1分钟,如果为0,则表示不超时 -->  

2.     <session-config>  

3.       <session-timeout>1</session-timeout>  

4.     </session-config>  

我们启动服务,运行一个网页,看以看到如下输出结果

ServletContextListener--contextInitialized

ServletRequestListener--requestInitialized
HttpSessionListener--sessionCreated
ServletRequestListener--requestDestroyed

HttpSessionListener--sessionDestroyed

我们每次请求一个网页后,requestListener会自动销毁。

sesslonListener的销毁时间有session的过期时间决定,我们可以在web.xml中进行配置

 

按监听事件划分,有以下三种,上面我们演示的是第一种

域对象自身的创建和销毁
域对象中属性的创建和消除

绑定到session中的某个对象的状态

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值