一.Springmvc的從request到response的過程
Springmvc.png
在這里面打叉的地方一般是通過xml配置文件,一般第一次編碼配置完成之后,就不用考慮這些了。在將應(yīng)用放如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>
<!-- 設(shè)置一個監(jiān)聽器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 設(shè)置核心分發(fā)器 -->
<servlet>
<!-- 分發(fā)器的名字 -->
<servlet-name>action</servlet-name>
<!-- 分發(fā)器所使用的類 -->
<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"/>
<!-- 內(nèi)部視圖解析器 -->
<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,在內(nèi)部視圖解析器里配置了
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是前端頁面直接將一些數(shù)據(jù)打包成對象傳到后臺
personService.insertPerson(person);
//從一個方法里訪問另外的一個方法
return "redirect:/person/all.action";
}
@RequestMapping("/person/BatchDelete")
public String BatchDelete(@RequestParam("id")String ids) {
//springmvc從前臺接收同名的多個數(shù)據(jù)的時候,會將這些同名的數(shù)據(jù)拼接成字符串,以“,”隔開;此外這里變量的命名需要和前臺一致,如果想要不一致,就需要使用以上的這種方式起別名。
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>