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前端控制器的主要内容,如果未能解决你的问题,请参考以下文章