入门Demo---SpringMVC学习笔记(二)
来源:互联网 发布:软件项目考核指标 编辑:程序博客网 时间:2024/04/30 20:49
第一步:导入spring3.2.0的jar包
第二步:配置前端控制器
在WEB-INF\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:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- url-pattren有很多中配置方式: 第一种:*.action,表示访问以.action结尾由DispatcherServlet进行解析 第二种:/,表示所有访问的地址都由springmvc的DispatcherServlet进行解析 第三种:/*,这样配置不对,使用这种配置,最终要转发到一个jsp页面时,仍然会由DispatcherServlet进行解析jsp,但是并不能根据这个jsp找到对应的handler,所以会报错 --> <url-pattern>*.action</url-pattern> </servlet-mapping>
url-pattern中配置的Servlet的拦截方式:
1、拦截固定后缀的url,比如设置为 .do、.action, 例如:/user/add.action
此方法最简单,不会导致静态资源(jpg,js,css)被拦截。
2、拦截所有,设置为/,例如:/user/add /user/add.action
此方法可以实现REST风格的url,很多互联网类型的应用使用这种方式。
但是此方法会导致静态文件(jpg,js,css)被拦截后不能正常显示。需要特殊处理。
3、拦截所有,设置为/*,此设置方法错误,因为请求到Action,当action转到jsp时再次被拦截,提示不能根据jsp路径mapping成功。
第三步:配置处理器适配器
在上一步中有看到:
<init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param>
所以就应该在classpath下的springmvc.xml中配置处理器映射器、处理器适配器、视图解析器。
在spring.xml文件中配置:
<!-- 配置处理器适配器 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
通过查看SimpleControllerHandlerAdapter的源码:
可以发现此适配器执行实现了Controller接口的handler。因此编写的Handler必须实现Controller接口才能被处理器适配器识别。
第四步:开发Handler
有第三步得出的结论:
Handler需要实现controller接口,才能由org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter适配器执行。
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的setAttribute()方法,以后在jsp页面中可以通过itemsList取数据 modelAndView.addObject("itemsList", itemsList); //指定视图 modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp"); return modelAndView; }}
说明:ModelAndView包含了模型数据及逻辑视图名
第五步:视图的编写
在第四步中指定了视图,因此下面就要编写第四步中指定的视图的页面代码。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>查询商品列表</title></head><body> <form action="${pageContext.request.contextPath }/item/queryItem.action" method="post"> 查询条件: <table width="100%" border=1> <tr> <td><input type="submit" value="查询" /></td> </tr> </table> 商品列表: <table width="100%" border=1> <tr> <td>商品名称</td> <td>商品价格</td> <td>生产日期</td> <td>商品描述</td> <td>操作</td> </tr> <c:forEach items="${itemsList }" var="item"> <tr> <td>${item.name }</td> <td>${item.price }</td> <td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss" /></td> <td>${item.detail }</td> <td><a href="${pageContext.request.contextPath }/item/editItem.action?id=${item.id}">修改</a></td> </tr> </c:forEach> </table> </form></body></html>
第六步:配置处理器映射器
在classpath下的springmvc.xml中配置处理器映射器。
<!-- 配置处理器映射器 --> <!-- BeanNameUrlHandlerMapping映射器的作用: 根据bean的name进行查找Handler 将action的url配置在bean的name中 --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
BeanNameUrlHandlerMapping:表示将定义的Bean名字作为请求的url,需要将编写的controller在spring容器中进行配置,且指定bean的name为请求的url,且必须以.action结尾。
因此,下一步中必须将之前开发好的Handler配置到spring容器中。
第七步:配置Handler
因为上一步中配置的处理器映射器BeanNameUrlHandlerMapping是根据Bean的name来作为url来请求这个bean对应的class的。所以这里需要配置Handler
<!-- 配置Handler --> <bean name="/queryItems.action" class="com.huihui.controller.ItemsController1"/>
第八步:视图解析器
因为第五步中编写的视图是采用jsp编写的,因此这里应该配置能够解析jsp的视图解析器。
<!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" />
查看InternalResourceViewResolver的源码:
可以发现解析jsp的这个视图解析器默认采用了jstl标签,因此classpath下必须要有jstl的jar包。
第九步:部署调试
访问地址:http://localhost:8080/SpringMVCFirst/queryItems.action
页面结果:
- 入门Demo---SpringMVC学习笔记(二)
- 入门Demo---SpringMVC学习笔记(二)
- Spring学习笔记-springMVC入门Demo
- SpringMVC入门笔记(二)
- SpringMvc学习笔记(二)SpringMvc控制器
- SpringMVC学习笔记(二)
- SpringMVC学习笔记(二)
- SpringMVC学习笔记(二)
- SpringMVC学习笔记(二)
- SpringMVC入门学习笔记
- 入门demo---Mybatis学习笔记(三)
- 入门demo---Mybatis学习笔记(三)
- SpringMVC入门学习总结(二)
- SpringMVC学习笔记二
- WebService学习笔记(二)服务端Demo
- Dubbo学习笔记(二)------Demo配置
- Spring学习笔记-springMVC基于注解的控制器(Demo)
- springMVC学习笔记二(dispatcherServlet)
- Mysql插入中文错误 Incorrect string value
- HDU-3085 Nightmare Ⅱ (双BFS)
- Regionals 2015 >> Asia - EC Final>> Multiplication Table
- Web.xml配置详解之context-param
- 线程的实现
- 入门Demo---SpringMVC学习笔记(二)
- SpringBoot优化方案
- 4627: [BeiJing2016]回转寿司
- JS读取xml文件获取值
- 开发中常用的Eclipse快捷键Top20
- ubuntu安装ndnsim2.2
- 浅谈DBSCAN
- Linux 用户和用户组管理
- Android的Fragment的生命周期各状态和回调函数使用