一:springMVC的执行过程
流程图:
执行过程:
1.用户发送请求,由前端控制器DispatcherServlet接收并转发请求
2.前端控制器将请求转发至处理器映射器,由处理器映射器根据请求寻找handler,并将 handler返回给前端控制器
3.前端控制器接收到处理器适配器返回的handler,然后将handler发送给处理器适配器请求 执行handler,此时处理器适配器会调用handler中的方法,执行handler,并且返回执 行后的数据modelandview,然后处理器适配器将modelandview返回给前端控制器
4.前端控制器接收到处理器适配器返回的modelandview之后会将modelandview转发给视图 解析器进行解析,视图解析器解析之后会将解析出的真正的物理视图返回给前端控制器
5.前端控制器将视图解析器解析出的物理视图进行封装渲染,
6.前端控制器将渲染之后的页面响应给用户
二:基于配置式的springMVC入门程序
1.创建web工程,导入jar包
2.找到springmvc的核心控制器,并且在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>springmvcDemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 配置springmvc核心控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定springmvc核心配置文件位置,如果不指定默认以 [servlet-name] 的值 + "-servlet.xml" 为文件名,且放在WEB-INF下 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-config.xml</param-value>
</init-param>
</servlet>
<!-- url-pattern参数配置说明:
/* : 所有的都拦截,包括jsp页面 (springmvc中坚决不能使用)
/ : 不拦截jsp,但是会拦截js,css等渲染文件,使用此配置时需要设置不拦截某些资源
*.do : 只拦截以.do结尾的请求路径,企业中推荐使用
-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
3.配置springmvc核心配置文件 -- springmvc-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<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.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
<!-- 基于配置式的springmvc开发 -->
<!-- 配置处理器映射器 -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/items.do">itemsController</prop>
<prop key="/items2.do">itemsController</prop>
</props>
</property>
</bean>
<!-- 配置处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
<!-- 配置视图解析器 -->
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
<!-- 实例化controller类 -->
<bean id="itemsController" class="com.mvc.controller.ItemContrller"></bean>
</beans>
4.创建controller类
package com.mvc.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 com.mvc.pojo.Items;
/**
* 基于配置的controller类需要实现Controller接口
* @author Administrator
*
*/
public class ItemContrller implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
//商品列表
List<Items> list = new ArrayList<Items>();
Items items1 = new Items();
items1.setName("联想");
items1.setPrice(199f);
items1.setDetail("Thank pad笔记本");
Items items2 = new Items();
items2.setName("戴尔");
items2.setPrice(200f);
items2.setDetail("Dell 笔记本");
list.add(items1);
list.add(items2);
//返回数据
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("list",list);
//返回视图
modelAndView.setViewName("/WEB-INF/jsp/item/list.jsp");
return modelAndView;
}
}
5.编写jsp页面
<form action="v_list.shtml" method="post" style="padding-top:5px;">
商品名称: <input type="text" name="name"/>
<input type="submit" class="query" value="查询"/>
</form>
<table cellspacing="1" cellpadding="0" border="0" width="100%" class="pn-ltable">
<thead class="pn-lthead">
<tr>
<th width="20"><input type="checkbox" οnclick="Pn.checkbox('ids',this.checked)"/></th>
<th>商品ID</th>
<th>商品名称</th>
<th>商品价格</th>
<th>商品生产日期</th>
<th>商品图片</th>
<th>商品简介</th>
<th>操作选项</th>
</tr>
</thead>
<tbody class="pn-ltbody">
<c:forEach items="${list}" var="items">
<tr bgcolor="#ffffff" οnmοuseοut="this.bgColor='#ffffff'" οnmοuseοver="this.bgColor='#eeeeee'">
<td><input type="checkbox" value="${items.id }" name="ids"/></td>
<td align="center">${items.id }</td>
<td align="center">${items.name }</td>
<td align="center">${items.price }</td>
<td align="center"><fmt:formatDate value="${items.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
<td align="center"><img width="40" height="40" src="/res/img/pic/ppp.jpg"/></td>
<td align="center">${items.detail }</td>
<td align="center">
<a class="pn-opt" href="edit.jsp">修改</a> | <a class="pn-opt" οnclick="if(!confirm('您确定删除吗?')) {return false;}" href="#">删除</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
6.浏览器测试运行
三:基于注解式的springmvc开发配置
1.注解式开发介绍:
注解式处理器映射器,对类中标记 @RequestMapping 的方法进行映射,根据@RequestMapping中定义的 url 匹配标记的方法,匹配成功返回 HandlerMethod 对象给前端控制器,HandlerMethod 对象中封装有 ur 对应的方法Methodl
2.配置springmvc核心配置文件 -- springmvc-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<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.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
<!-- 基于注解式的springmvc开发 -->
<!-- 配置扫描只Controller -->
<context:component-scan base-package="com.mvc" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 配置处理器映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
<!-- 配置处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
<!-- 配置视图解析器 -->
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
</beans>
3.编写controller层
package com.mvc.controller;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.mvc.pojo.Items;
/**
* @author Administrator
*
*/
@Controller
public class ItemContrller {
@RequestMapping(value = "items.do")
public ModelAndView itemslist() {
// 商品列表
List<Items> list = new ArrayList<Items>();
Items items1 = new Items();
items1.setName("联想");
items1.setPrice(199f);
items1.setDetail("Thank pad笔记本");
Items items2 = new Items();
items2.setName("戴尔");
items2.setPrice(200f);
items2.setDetail("Dell 笔记本");
list.add(items1);
list.add(items2);
// 返回数据
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("list", list);
// 返回视图
modelAndView.setViewName("/WEB-INF/jsp/item/list.jsp");
return modelAndView;
}
}
四:@RequestMapping注解详解
1.作用:配置url的映射关系
value:默认就是value属性.属性是一个数组类型,可以配置多个url映射到一个方法上
method:支持的HTTP方法。post get put delete,如果不写method属性,则默认所有方法都可以使用
//@RequestMapping("/list.action")
@RequestMapping(value={"list","itemList","items"}, method=RequestMethod.GET)
public ModelAndView getItemList() {
//异常测试
//int i = 1/0;
List<Items> itemList = itemService.getItemList();
//返回模型和视图
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("itemList", itemList);
//设置逻辑视图
modelAndView.setViewName("itemList");
return modelAndView;
}
2.@RequestMapping注解不仅可以加在方法上,还可以加在类上。可以出现多级目录
五:controller中方法的返回值
1、ModelAndView:包含模型数据和逻辑视图两部分
2、String:代表逻辑视图
(1).页面跳转:
redirect:重定向,二次请求,url地址发生变化
forward:转发,必须是工程内部的url,一次请求,页面地址不发生变化
public String editItem(Items items) {
itemService.updateItem(items);
//展示添加成功页面
return "123/success";
//更新成功后跳转到百度
return "redirect:http://www.baidu.com";
//更新成功后跳转到商品列表
return "redirect:/items/list.action";
//更新成功后显示商品编辑页面,做forward跳转
return "forward:itemEdit.action";
}
3.void:没有返回值,一般用在ajax请求中,需要request和response参数
@RequestMapping("/updateitem")
public void editItem(Items items, HttpServletRequest request, HttpServletResponse response) throws Exception {
itemService.updateItem(items);
//跳转到百度
response.sendRedirect("http://www.baidu.com");
//跳转到商品编辑页面
request.getRequestDispatcher("/items/itemEdit.action").forward(request, response);
}
六:企业开发中常用的开发方式
1.详细说明:
企业开发中,Controller层一般不返回ModelAndView,一般情况下返回值为String或者void,并且在springmvc核心配置文件中配置视图解析器的前后缀
2.修改springmvc核心配置文件中的视图解析器
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/items/" />
<!-- 后缀 -->
<property name="suffix" value=".jsp" />
</bean>
3.修改Controller层代码
package com.mvc.controller;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.mvc.pojo.Items;
/**
* @author Administrator
*
*/
@Controller
public class ItemContrller {
@RequestMapping(value = "items.do")
public String itemslist(Model model) {
// 商品列表
List<Items> list = new ArrayList<Items>();
Items items1 = new Items();
items1.setName("联想");
items1.setPrice(199f);
items1.setDetail("Thank pad笔记本");
Items items2 = new Items();
items2.setName("戴尔");
items2.setPrice(200f);
items2.setDetail("Dell 笔记本");
list.add(items1);
list.add(items2);
// 返回数据
model.addAttribute("list", list);
return "list";
}
}
转载请注明原文地址: https://ju.6miu.com/read-1293750.html