SpringMVC 配置文件详解
2020-01-29 16:03:48来源:博客园 阅读 ()
SpringMVC 配置文件详解
HandlerMapping 处理器映射
HTTP请求被DispatcherServlet拦截后,会调用HandlerMapping来处理,HandlerMapping根据 url<=>controller 之间的映射关系来确定要调用哪个controller来处理。
有2种HandlerMapping:
-
BeanNameUrlHandlerMapping
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> <bean name="/userController" class="com.chy.controller.UserController" />
http://localhost:8080/springmvc_war_exploded/userController
BeanNameUrl,顾名思义,映射关系是BeanName <=> Url,url地址对应bean的name,根据url中的beanname确定要调用的controller。
-
SimpleUrlHandlerMapping
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <!-- 使用props配置url-controller之间的映射关系 --> <props> <!-- 一个prop配置一个映射,key指定url,value指定bean的id或name。可使用多个prop。 --> <prop key="/userController">userController</prop> </props> </property> </bean> <bean name="userController" class="com.chy.controller.UserController" />
http://localhost:8080/springmvc_war_exploded/userController
url是/userController,去<props>中找到key=/userController的<prop>,得到要调用的controller的name或id。
HandlerAdapter 处理器适配器
HandlerMapping确定要调用的controller后,将要调用的controller告诉DispatcherServlet,
由DispatcherServlet调用controller所属的HandlerAdapter,再由HandlerAdapter来调用controller。
HandlerAdapter有2种:
-
SimpleControllerHandlerAdapter(推荐)
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
public class UserController implements Controller { @Override public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception { //视图可以在构造器中指定,也可以先使用空参构造器,在调用setter方法设置 ModelAndView mav = new ModelAndView("user_info"); User user = new User(); user.setUsername("chy"); user.setPassword("abcd"); //向视图传递数据 mav.addObject("user", user); return mav; } }
SimpleControllerHandlerAdapter,名字中有Controller,实现的自然是Controller接口。
方法要返回一个ModelAndView类型的值。
这个ModelAndView由controller返回给HandlerAdapter,再由HandlerAdapter返回给DispatcherServlet。
DispatcherServlet调用配置的ViewResolver来解析ModelAndView,获取里面的model(数据)、view(视图名),并将数据、视图名返回给DispatcherServlet。
DispatcherServelt对View进行渲染(把模型数据填入视图中),把渲染好的视图返回个浏览器。
所以需要搭配ViewResolver使用:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--前缀--> <property name="prefix" value="/WEB-INF/jsp/" /> <!--后缀--> <property name="suffix" value=".jsp" /> </bean>
视图解析器也有好几种,此处不再一一介绍。
-
HttpRequestHandlerAdapter
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter" />
public class UserController implements HttpRequestHandler{ @Override public void handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException { User user = new User(); user.setUsername("chy"); user.setPassword("abcd"); //向视图传递数据 httpServletRequest.setAttribute("user",user); //将请求转发到视图(地址栏的url不变) RequestDispatcher dispatcher = httpServletRequest.getRequestDispatcher("/WEB-INF/jsp/user_info.jsp"); dispatcher.forward(httpServletRequest,httpServletResponse); } }
适配器与实现的接口是对应的。使用请求转发实现,返回值是void。
ViewResolver是解析ModelAndView用的,既然返回值是void,就不使用视图解析器,没有视图名的拼接,需要写视图的完整路径。
此种方式是Servlet的实现方式,不建议使用。尽量使用ModelAndView的方式,更加符合mvc的思想。
原文链接:https://www.cnblogs.com/chy18883701161/p/12241396.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- 数据源管理 | Kafka集群环境搭建,消息存储机制详解 2020-06-11
- Java--Stream流详解 2020-06-10
- B树和B+树的插入、删除图文详解 2020-06-09
- Spring Boot 实现配置文件加解密原理 2020-06-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash