入门Demo---SpringMVC学习笔记(二)
2017-08-22 09:59
513 查看
第一步:导入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>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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>1
2
3
4
1
2
3
4
所以就应该在classpath下的springmvc.xml中配置处理器映射器、处理器适配器、视图解析器。
在spring.xml文件中配置:
<!-- 配置处理器适配器 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />1
2
3
1
2
3
通过查看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; } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
说明: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>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
第六步:配置处理器映射器
在classpath下的springmvc.xml中配置处理器映射器。<!-- 配置处理器映射器 --> <!-- BeanNameUrlHandlerMapping映射器的作用: 根据bean的name进行查找Handler 将action的url配置在bean的name中 --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />1
2
3
4
5
1
2
3
4
5
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"/>1
2
1
2
第八步:视图解析器
因为第五步中编写的视图是采用jsp编写的,因此这里应该配置能够解析jsp的视图解析器。<!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" />1
2
3
1
2
3
查看InternalResourceViewResolver的源码:
可以发现解析jsp的这个视图解析器默认采用了jstl标签,因此classpath下必须要有jstl的jar包。
第九步:部署调试
访问地址:http://localhost:8080/SpringMVCFirst/queryItems.action 页面结果:
相关文章推荐
- 入门Demo---SpringMVC学习笔记(二)
- Spring学习笔记-springMVC入门Demo
- SpringMVC-学习笔记(1)——理解MVC及快速入门
- # springmvc学习笔记(1)-框架原理和入门配置
- SpringMVC学习笔记(二)——入门程序
- Spring学习笔记-springMVC基于注解的控制器(Demo)
- SpringMVC-学习笔记(1)——理解MVC及快速入门
- SpringMVC-学习笔记(1)——理解MVC及快速入门
- springmvc学习笔记(1)-框架原理和入门配置
- SpringMVC学习笔记(1)之入门篇
- springmvc学习笔记(5)-入门程序小结
- DC学院数据分析师(入门)学习笔记----基于网页抓取天气数据demo以及基于网页抓取《摔跤吧!爸爸》豆瓣评分
- SpringMVC-学习笔记(1)——理解MVC及快速入门
- 入门demo---Mybatis学习笔记(三)
- springmvc学习笔记(5)-入门程序小结
- SpringMVC学习笔记---- 一、SpringMVC基础入门,创建一个HelloWorld程序
- Spring学习笔记2:springMVC2 1入门程序
- springmvc学习笔记(1)-框架原理和入门配置
- SpringMVC学习笔记------------几个简单小demo
- SpringMVC-学习笔记(1)——理解MVC及快速入门