javascript
入门Demo---SpringMVC学习笔记(二)
第一步:導(dǎo)入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,默認(rèn)加載的是/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結(jié)尾由DispatcherServlet進(jìn)行解析第二種:/,表示所有訪問的地址都由springmvc的DispatcherServlet進(jìn)行解析第三種:/*,這樣配置不對(duì),使用這種配置,最終要轉(zhuǎn)發(fā)到一個(gè)jsp頁面時(shí),仍然會(huì)由DispatcherServlet進(jìn)行解析jsp,但是并不能根據(jù)這個(gè)jsp找到對(duì)應(yīng)的handler,所以會(huì)報(bào)錯(cuò)--><url-pattern>*.action</url-pattern></servlet-mapping>url-pattern中配置的Servlet的攔截方式:
1、攔截固定后綴的url,比如設(shè)置為 .do、.action, 例如:/user/add.action
此方法最簡單,不會(huì)導(dǎo)致靜態(tài)資源(jpg,js,css)被攔截。
2、攔截所有,設(shè)置為/,例如:/user/add /user/add.action
此方法可以實(shí)現(xiàn)REST風(fēng)格的url,很多互聯(lián)網(wǎng)類型的應(yīng)用使用這種方式。
但是此方法會(huì)導(dǎo)致靜態(tài)文件(jpg,js,css)被攔截后不能正常顯示。需要特殊處理。
3、攔截所有,設(shè)置為/*,此設(shè)置方法錯(cuò)誤,因?yàn)檎埱蟮紸ction,當(dāng)action轉(zhuǎn)到j(luò)sp時(shí)再次被攔截,提示不能根據(jù)jsp路徑mapping成功。
第三步:配置處理器適配器
在上一步中有看到:
<init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param>所以就應(yīng)該在classpath下的springmvc.xml中配置處理器映射器、處理器適配器、視圖解析器。
在spring.xml文件中配置:
<!-- 配置處理器適配器 --><bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />通過查看SimpleControllerHandlerAdapter的源碼:
可以發(fā)現(xiàn)此適配器執(zhí)行實(shí)現(xiàn)了Controller接口的handler。因此編寫的Handler必須實(shí)現(xiàn)Controller接口才能被處理器適配器識(shí)別。
第四步:開發(fā)Handler
有第三步得出的結(jié)論:
Handler需要實(shí)現(xiàn)controller接口,才能由org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter適配器執(zhí)行。
說明:ModelAndView包含了模型數(shù)據(jù)及邏輯視圖名
第五步:視圖的編寫
在第四步中指定了視圖,因此下面就要編寫第四步中指定的視圖的頁面代碼。
<%@ 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>商品價(jià)格</td><td>生產(chǎn)日期</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映射器的作用:根據(jù)bean的name進(jìn)行查找Handler 將action的url配置在bean的name中 --><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />BeanNameUrlHandlerMapping:表示將定義的Bean名字作為請求的url,需要將編寫的controller在spring容器中進(jìn)行配置,且指定bean的name為請求的url,且必須以.action結(jié)尾。
因此,下一步中必須將之前開發(fā)好的Handler配置到spring容器中。
第七步:配置Handler
因?yàn)樯弦徊街信渲玫奶幚砥饔成淦鰾eanNameUrlHandlerMapping是根據(jù)Bean的name來作為url來請求這個(gè)bean對(duì)應(yīng)的class的。所以這里需要配置Handler
<!-- 配置Handler --><bean name="/queryItems.action" class="com.huihui.controller.ItemsController1"/>第八步:視圖解析器
因?yàn)榈谖宀街芯帉懙囊晥D是采用jsp編寫的,因此這里應(yīng)該配置能夠解析jsp的視圖解析器。
<!-- 配置視圖解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" />查看InternalResourceViewResolver的源碼:
可以發(fā)現(xiàn)解析jsp的這個(gè)視圖解析器默認(rèn)采用了jstl標(biāo)簽,因此classpath下必須要有jstl的jar包。
第九步:部署調(diào)試
訪問地址:http://localhost:8080/SpringMVCFirst/queryItems.action
頁面結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的入门Demo---SpringMVC学习笔记(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringMVC架构---Spring
- 下一篇: 非注解和注解的处理器映射器和适配器---