一.Springmvc的从request到response的过程
在这里面打叉的地方一般是通过xml配置文件,一般第一次编码配置完成之后,就不用考虑这些了。在将应用放如Tomcat之中之后第一个加载的文件就是WEB-INF根目录下面的xml文件,其配置方式如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 配置Spring框架,加载Spring的配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:beans.xml</param-value>
</context-param>
<!-- 设置一个监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 设置核心分发器 -->
<servlet>
<!-- 分发器的名字 -->
<servlet-name>action</servlet-name>
<!-- 分发器所使用的类 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--改变Spring配置文件的名称和位置-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
</servlet>
<!-- 映射处理 -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
我们会在Springmvc的配置文件里面配置一些公用的配置
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 启动注解方式 -->
<mvc:annotation-driven/>
<!-- 启动包扫描机制 -->
<context:component-scan base-package="com.fiberhome.springmvc.controller"/>
<!-- 内部视图解析器 -->
<bean id="internalResourceViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 文件上传视图解析器,它的名字必须为multipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"/><!-- 10M -->
</bean>
</beans>
这种方式指明了使用注解的方式来使用Springmvc
//使用这种注解来声明一个controller
@Controller
public class PersonController {
@Resource
private PersonServiceImpl personService;
//做处理器映射,访问这个页面直接就是/person/all.action 就能访问到这个方法,这里后缀是action原因是在servletMapping 中过滤*.action
@RequestMapping(value = "/person/all")
public String getAll(Map<String, Object> model) {
List<Person> list = personService.getAll();
//返回一个逻辑名,其实这是页面personInfo.jsp,在内部视图解析器里配置了
return "personInfo";
}
@RequestMapping("/person/createPerson")
public String createPerson() {
return "create";
}
@RequestMapping("/person/toEdit")
public String toEdit(Integer id,Model model) {
Person p= personService.getById(id);
//Springmvc 后台与页面之间的传值
model.addAttribute("p", p);
return "edit";
@RequestMapping("/person/insertPerson")
public String insertPerson(Person person) {
//这里的person是前端页面直接将一些数据打包成对象传到后台
personService.insertPerson(person);
//从一个方法里访问另外的一个方法
return "redirect:/person/all.action";
}
@RequestMapping("/person/BatchDelete")
public String BatchDelete(@RequestParam("id")String ids) {
//springmvc从前台接收同名的多个数据的时候,会将这些同名的数据拼接成字符串,以“,”隔开;此外这里变量的命名需要和前台一致,如果想要不一致,就需要使用以上的这种方式起别名。
String[] idss = ids.split(",");
for (int i = 0; i < idss.length; i++) {
personService.delete(Integer.parseInt(idss[i]));
}
return "redirect:/person/all.action";
}
前端页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!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>Insert title here</title>
<script type="text/javascript">
function batchDelete(){
document.forms[0].action="${pageContext.request.contextPath}/person/BatchDelete.action";
document.forms[0].submit();
}
</script>
</head>
<body>
<form method="post">
<div style="padding: 20px;">人员列表</div>
<div>
<a href="${pageContext.request.contextPath }/person/createPerson.action">新增</a>
<a href="#" onclick="batchDelete();">批量删除</a>
</div>
<table border="1">
<tr>
<td>选择</td>
<td>图片</td>
<td>name</td>
<td>age</td>
<td>sex</td>
<td>del</td>
<td>edit</td>
</tr>
<c:forEach items="${list}" var="p">
<tr>
<td><input type="checkbox" name="id" value="${p.id}"/></td>
<td><img src="${pageContext.request.contextPath}/${p.photopath }">
<td>${p.name}</td>
<td>${p.age}</td>
<td>${p.sex}</td>
<td>
<a href="deletePerson.action?id=${p.id}">删除</a>
</td>
<td><a href="toEdit.action?id=${p.id }">编辑</a></td>
</tr>
</c:forEach>
</table>
</form>
</body>
</html>