Spring前端控制器

Posted 花咖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring前端控制器相关的知识,希望对你有一定的参考价值。

1、环境准备(jar包)

 

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

<!-- springmvc 前端控制器 -->
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器、适配器等等) 
        如果不配置contextConfigLocation,默认加载的是 WEB-INF/servlet名称-servlet.xml (即springmvc-servlet.xml)
    -->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/springmvc.xml</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <!-- 
        第一种:*.action,访问以.action结尾的由DispatcherServlet进行解析
        第二种: /,所有访问地址都由DispatcherServlet进行解析
            但是对于静态文件的解析,我们需要配置不让DispatcherServlet进行解析
            使用此种方式可以实现Restful风格的URL
        第三种: /* 这种配置不对,使用这种配置,最终要转发到一个jsp页面时,仍然会由DispatcherServlet
            解析jsp,不能根据jsp页面找到Handler,会报错。
     -->
    <url-pattern>*.action</url-pattern>
</servlet-mapping>

 

3、编写spirngmvc.xml配置文件

  我们在 classpath 下的 spring 文件夹中放置 springmvc.xml 文件(自定义位置)

  3.1、配置处理器适配器(xml文件)

<!-- 配置处理器适配器
    所有的处理器适配器都实现 HandlerAdapter接口
-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

  我们查看适配器源码,可以看到 supports()方法,当中我们可以知道此适配器能执行 实现Controller接口Handler

  

  我们继续查看 Controller 接口源码:

   

    

  3.2、开发Handler

  我们需要实现 Controller 接口,才能由 SimpleControllerHandlerAdapter 适配器执行

  

public class UserController implements Controller{

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        
        ArrayList<User> userlist = new ArrayList<User>();
        User user1 = new User("腾博","123456");
        User user2 = new User("小兵","123456");
        
        userlist.add(user1);
        userlist.add(user2);
        
        // 返回ModelAndView
        ModelAndView modelAndView = new ModelAndView();
        // 相当于request的setAttribute,在jsp页面中通过userlist取数据
        modelAndView.addObject("userlist", userlist);
        
        // 指定视图
        modelAndView.setViewName("/WEB-INF/jsp/users/user.jsp");
        
        return modelAndView;
    }
    
}

 

  3.3、配置Handler(xml文件中)

  将编写好的 Hander 在 spring 容器加载

  name是以 .action 结尾,

<!-- 配置Handler -->
<bean name="/queryUsers.action" class="com.bjxb.ssm.controller.UserController"/>

 

  3.4、视图的编写

  

 

  3.5、配置处理器映射器(xml文件中)

<!-- 处理器映射器
        将bean的name作为url进行查找,
        bean就是我们写的Handler,所以我们需要在配置Handler时指定beanname(就是url)
 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

 

  3.6、配置视图解析器

  这里我们视图是 jsp,所以我们需要配置解析 jsp 的视图解析器

<!-- 视图解析器
        解析jsp页面,默认使用jstl标签,classpath下得有jstl的包
 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>

  我们来看 InternalResourceViewResolver 这个视图解析器源码默认使用 jstl 标签进行解析 jsp

 

  

 

  3.7、部署调试

  访问地址:http://localhost:8080/springmvc_first/queryUsers.action

  错误一:处理器映射器根据 URL(错误的URL) 找不到 Handler ,报下面的错误。说明 URL 错误。

  

  错误二:处理器映射器根据 URL 找到了 Handler,转发的 jsp 页面找到,报下面的错误,说明 jsp 页面地址错误了。

   

 

  

 

 

 

 

以上是关于Spring前端控制器的主要内容,如果未能解决你的问题,请参考以下文章

前端开发常用代码片段(中篇)

前端开发常用js代码片段

前端防扒代码片段

前端防扒代码片段

前端防扒代码片段

前端防扒代码片段