一.、springmvc框架
1、什么是springmvc
springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。springmvc是一个基于mvc的web框架。
2、mvc在b/s系统下的应用
mvc是一个设计模式,mvc在b/s系统 下的应用:
3、springmvc框架
第一步:发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求HandlerMapping查找 Handler
可以根据xml配置、注解进行查找
第三步:处理器映射器HandlerMapping向前端控制器返回Handler
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器去执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
ModelAndView是springmvc框架的一个底层对象,包括 Model和view
第八步:前端控制器请求视图解析器去进行视图解析
根据逻辑视图名解析成真正的视图(jsp)
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染
视图渲染将模型数据(在ModelAndView对象中)填充到request域
第十一步:前端控制器向用户响应结果
4、组件:
前端控制器DispatcherServlet(不需要程序员开发)。作用:接收请求,响应结果,相当于转发器,中央处理器。有了DispatcherServlet减少了其它组件之间的耦合度。
处理器映射器HandlerMapping(不需要程序员开发)。作用:根据请求的url查找Handler
处理器适配器HandlerAdapter。作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler
处理器controller(需要程序员开发)注意:编写controller时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler
视图解析器View resolver(不需要程序员开发)。作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)
视图View(需要程序员开发jsp)。View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf...)
二、程序入门
1. 配置前端控制器,在web.xml中配置前端控制器
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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"> 3 <display-name>springmvc</display-name> 4 5 <!-- springmvc前端控制器 --> 6 <servlet> 7 <servlet-name>springmvc</servlet-name> 8 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 9 <!-- contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器、适配器等等) 10 如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-serlvet.xml(springmvc-servlet.xml) 11 --> 12 <init-param> 13 <param-name>contextConfigLocation</param-name> 14 <param-value>classpath:springmvc.xml</param-value> 15 </init-param> 16 </servlet> 17 18 <servlet-mapping> 19 <servlet-name>springmvc</servlet-name> 20 <!-- 21 第一种:*.action,访问以.action结尾 由DispatcherServlet进行解析 22 第二种:/,所以访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析 23 使用此种方式可以实现 RESTful风格的url 24 第三种:/*,这样配置不对,使用这种配置,最终要转发到一个jsp页面时, 25 仍然会由DispatcherServlet解析jsp地址,不能根据jsp页面找到handler,会报错。 26 --> 27 <url-pattern>*.action</url-pattern> 28 </servlet-mapping> 29 30 31 <welcome-file-list> 32 <welcome-file>index.html</welcome-file> 33 <welcome-file>index.htm</welcome-file> 34 <welcome-file>index.jsp</welcome-file> 35 <welcome-file>default.html</welcome-file> 36 <welcome-file>default.htm</welcome-file> 37 <welcome-file>default.jsp</welcome-file> 38 </welcome-file-list> 39 </web-app>
2、配置处理器适配器,在classpath下的springmvc.xml中配置处理器适配器。
1 <!-- 处理器适配器 所有处理器适配器都实现 HandlerAdapter接口 --> 2 <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
3、开发controller程序,这里使用的是静态数据。下一篇和mybatis整合后将去数据库查询数据
1 package com.zhang.controller; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 9 import org.springframework.web.servlet.ModelAndView; 10 import org.springframework.web.servlet.mvc.Controller; 11 12 import com.zhang.domain.Items; 13 14 public class ItemsController implements Controller { 15 @Override 16 public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception { 17 //调用service查找 数据库,查询商品列表,这里使用静态数据模拟 18 List<Items> itemsList = new ArrayList<Items>(); 19 //向list中填充静态数据 20 Items items_1 = new Items(); 21 items_1.setName("联想笔记本"); 22 items_1.setPrice(6000f); 23 items_1.setDetail("ThinkPad T430 联想笔记本电脑!"); 24 Items items_2 = new Items(); 25 items_2.setName("苹果手机"); 26 items_2.setPrice(5000f); 27 items_2.setDetail("iphone6苹果手机!"); 28 itemsList.add(items_1); 29 itemsList.add(items_2); 30 //返回ModelAndView 31 ModelAndView modelAndView = new ModelAndView(); 32 //相当 于request的setAttribut,在jsp页面中通过itemsList取数据 33 modelAndView.addObject("itemsList", itemsList); 34 //指定视图 35 modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp"); 36 return modelAndView; 37 } 38 39 }
4、配置处理器映射器,在classpath下的springmvc.xml中配置处理器映射器
1 <!-- 配置Handler --> 2 <bean id="itemsController" name="/queryItems_test.action" class="com.zhang.controller.ItemsController" /> 3 <!-- 处理器映射器 将bean的name作为url进行查找 ,需要在配置Handler时指定beanname(就是url) 所有的映射器都实现 HandlerMapping接口。--> 4 <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
5、配置视图解析器,需要配置解析jsp的视图解析器。
1 <!-- 视图解析器解析jsp解析,默认使用jstl标签,classpath下的得有jstl的包--> 2 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
6、JSP页面
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 4 <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> 5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 6 <html> 7 <head> 8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 9 <title>查询商品列表</title> 10 </head> 11 <body> 12 <form action="${pageContext.request.contextPath }/item/queryItem.action" method="post"> 13 查询条件: 14 <table width="100%" border=1> 15 <tr> 16 <td><input type="submit" value="查询"/></td> 17 </tr> 18 </table> 19 商品列表: 20 <table width="100%" border=1> 21 <tr> 22 <td>商品名称</td> 23 <td>商品价格</td> 24 <td>生产日期</td> 25 <td>商品描述</td> 26 <td>操作</td> 27 </tr> 28 <c:forEach items="${itemsList }" var="item"> 29 <tr> 30 <td>${item.name }</td> 31 <td>${item.price }</td> 32 <td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td> 33 <td>${item.detail }</td> 34 <td><a href="${pageContext.request.contextPath }/item/editItem.action?id=${item.id}">修改</a></td> 35 </tr> 36 </c:forEach> 37 </table> 38 </form> 39 </body> 40 </html>
7、测试,在浏览器中输入地址:http://127.0.0.1:8080/springmvc//queryItems_test.action,显示效果如下:
三、工程目录结构:
资源下载链接: