【SpringMVC】(一)基本用法
程序员文章站
2024-03-24 14:03:58
...
备注:最近复习到Spring MVC,本文记录SpringMVC的四大“器具”的基本配置和基本使用,便于以后回来快速上手。
一、基本结构
如上图所示(图片来自于尚硅谷的学习教案),是Spring-MCV的基本架构图,其中重要的几个要点分别是:
(1)DispatcherServlet -- *控制器
(2)HandlerMapping -- 处理器映射器
(3)HandlerAdapter -- 处理器适配器
(4)ViewResolver -- 视图解析器
对于这个架构的架构流程:
1、用户发送请求至前端控制器DispatcherServlet
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
5、执行处理器(Controller,也叫后端控制器)。
6、Controller执行完成返回ModelAndView
7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9、ViewReslover解析后返回具体View
10、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应用户
二、实战应用
需求:使用SpringMVC做一个简单的页面查询
操作:
(1)环境:jar包,tomcat服务器,Eclipse。
(2)web.xml
1.配置“前端控制器”
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
(3)springmvc.xml
1.配置“Handler”
<bean id="itemsController1" name="/queryItems.action" class="cn.itcast.ssm.controller.ItemsController1"/>
Handler对应于Controller中的类。
2.配置“处理器映射器”
<!-- 处理器映射器将bean的name作为url进行查找,需要在配置Handler时指定beanname(url) -->
<bean
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<!-- 简单url映射 -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/queryItems1.action">itemsController1</prop>
<prop key="/queryItems2.action">itemsController1</prop>
</props>
</property>
</bean>
这里列举了两种”映射器”的配置形式,一种是使用“BeanNameUrlHandlerMapping”,另外一种使用的是“SimpleUrlHandlerMappng”简单url映射器,前者通过Handler中的“name”属性就能映射Controller,后者需要使用"id"属性。
3.适配器
非注解类型:
(1)Controller需要实现,controller接口
<bean
class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
(2)Contorller需要实现,HttpRequestHandler接口
<bean
class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>
同时建议适配器写完之后,就写Controller。
(1)基于SimpleControllerHandlerAdapter的Controller写法
public class ItemsController1 implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
//调用service查找 数据库,查询商品列表,这里使用静态数据模拟
List<Items> itemsList = new ArrayList<Items>();
//向list中填充静态数据
Items items_1 = new Items();
items_1.setName("联想笔记本");
items_1.setPrice(6000f);
items_1.setDetail("ThinkPad T430 联想笔记本电脑!");
Items items_2 = new Items();
items_2.setName("苹果手机");
items_2.setPrice(5000f);
items_2.setDetail("iphone6苹果手机!");
itemsList.add(items_1);
itemsList.add(items_2);
//返回ModelAndView
ModelAndView modelAndView = new ModelAndView();
//相当 于request的setAttribut,在jsp页面中通过itemsList取数据
modelAndView.addObject("itemsList", itemsList);
//指定视图
modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
return modelAndView;
}
}
(2)基于“HttpRequestHandlerAdapter”的Controller类的写法
public class ItemsController1 implements HttpRequestHandler {
@Override
public void handleRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException,IOException {
//调用service查找 数据库,查询商品列表,这里使用静态数据模拟
List<Items> itemsList = new ArrayList<Items>();
//向list中填充静态数据
Items items_1 = new Items();
items_1.setName("联想笔记本");
items_1.setPrice(6000f);
items_1.setDetail("ThinkPad T430 联想笔记本电脑!");
Items items_2 = new Items();
items_2.setName("苹果手机");
items_2.setPrice(5000f);
items_2.setDetail("iphone8苹果手机!");
itemsList.add(items_1);
itemsList.add(items_2);
//设置模型数据
request.setAttribute("itemsList", itemsList);
//设置转发的视图
request.getRequestDispatcher("/WEB-INF/jsp/items/itemsList.jsp").forward(request, response);
//这种方式,因为没有返回ModelAndView,可通过response修改定义响应内容,比如返回json数据:
//response.setCharacterEncoding("utf-8");
//response.setContentType("application/json;charset=utf-8");
//response.getWriter().write("json串");
}
}
以上内容都省略了PO实体类的定义。着重学习两种Controller中对数值的处理。
之后的jsp页面不再赘述了。
That's all,通过非注解形式,应用了SpringMVC中的四大“器”实现的SpringMVC访问。
上一篇: 搭建frida+木木模拟器运行环境