【工程所需jar包】
【建工程几个注意点】(看红色框)
【工程截图】
【编写代码流程】
【1.配置前端控制器:web.xml】
在web.xml中编写前端控制器。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>SpringMVC001</display-name> <!-- springMVC前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <!-- contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器、适配器等等)-->
<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> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
[ 注意1 ]
<init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param>
contextConfigLocation配置springmvc加载的配置文件,
如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-servlet.xml(springmvc-servlet.xml)
[ 注意2 ]
<servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping>
对于<url-pattern>,
第一种: *.action , 访问以" .action "结尾,由前端控制器DispatcherServlet进行解析
第二种: / , 所有访问的地址都要由前端控制器DispatcherServlet进行解析,对于静态文件需配置无需DispatcherServlet进行解析。
第三种: /* , 这种配置方式错误的,使用这种方式配置,最终要转发到一个jsp页面时,仍然会由DispatcherServlet解析jsp地址,不能根据jsp页面找到handler,导致报错。
【2配置处理器适配器:springmvc.xml】
在classpath下的springmvc.xml中配置 处理器适配器:
<!--
处理适配器 注意:所有的处理适配器都实现了HandlerAdapter接口
--> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
查看源代码
此处理器适配器能执行实现Controller的Handler:
Controller接口源码:
【3.开发Handler: ItemsController.java】
package cn.Higgin.ssm.controller; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; import cn.Higgin.ssm.po.Items; public class ItemsComtroller implements Controller{ @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { //调用Service查找数据库,查询商品列表,这里使用静态数据模拟 List<Items> itemsList=new ArrayList<Items>(); //向list中填充数据 Items item1=new Items(); item1.setName("华硕笔记本"); item1.setPrice(600f); item1.setDetail("华硕啦啦啦啦啦啦啦啦啦"); Items item2=new Items(); item2.setName("联想笔记本"); item2.setPrice(300f); item2.setDetail("联想啦啦啦啦啦啦啦啦啦"); itemsList.add(item1); itemsList.add(item2); //返回ModelAndView ModelAndView modelAndView=new ModelAndView(); //相当于request的setAttribute,在jsp页面中通过itemList来获取 modelAndView.addObject("itemsList",itemsList); //指定视图 modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp"); System.out.println("提示:ItemsComtroller............."); return modelAndView; } }
[ 注意 ]
Handler处理器需要实现Controller接口,才能由springmvc.xml配置的
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
中的org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter处理器适配器进行执行。
【4.配置Handler:springmvc.xml】
将编写的Handler在spring容器中进行加载
<!--Handler --> <bean name="/queryItems.action" class="cn.Higgin.ssm.controller.ItemsComtroller"/>
【5.配置处理器映射器:springmvc.xml】
在springmvc.xml中配置处理器映射器
<!-- 处理器映射器 将bean的name作为url进行查找,需要在配置Handler时指定beanname(即url)
--> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
【6.配置视图解析器:springmvc.xml】
在springmvc.xml配置解析jsp的视图解析器
<!--
视图解析器 解析jsp页面,默认使用jstl标签,classpath下面必须有jstl的jar包
--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
【完整springmvc.xml】
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <!-- 配置Handler --> <bean name="/queryItems.action" class="cn.Higgin.ssm.controller.ItemsComtroller"/> <!-- 处理器映射器 将bean的name作为url进行查找,需要在配置Handler时指定beanname(即url)--> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!-- 处理适配器 注意:所有的处理适配器都实现了HandlerAdapter接口--> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> <!-- 视图解析器 解析jsp页面,默认使用jstl标签,classpath下面必须有jstl的jar包--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/> </beans>
【7.前端页面:itemsList.jsp】
<%@ 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>
【运行结果】
访问:http://localhost:8080/SpringMVC001/queryItems.action
控制台输出,说明执行了ItemsComtroller.java中的代码
【比较两种页面访问出错的情况对比】
【错误1】
故意改错访问地址为:http://localhost:8080/SpringMVC001/queryItems1111111.action
错误分析:处理器映射器根据url找不到对应的Handler,即url错误。
【错误2】
修改ItemsController.java中的指定视图
改为:
访问正确的url,出现的错误如下:
错误分析:处理器映射器根据url找到了Handler,转发的jsp页面找不到,说明jsp页面地址错误了。