一、SpringMVC

1.HelloWorld案例

①步骤:

加jar包

在web.xml文件中配置DispatcherServlet

加入SpringMVC的配置文件

编写处理请求的处理器,并标识为处理器

编写视图

②配置web.xml文件

DispatcherServlet

③创建控制器类,并标识出来

@Controller

handler

④在springmvc.xml文件中配置

配置视图解析器:<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>

⑤访问页面

index.jsp

1.概述

①Spring为表现层提供了基于MVC设计理念的优秀的Web框架,是目前主流的MVC框架之一。

②Spring3.0之后全面超越Struts2,成为最优秀的MVC框架。

③SpringMVC通过一套MVC注解,让POJO成为处理请求的的控制器,而无需实现任何接口。

④支持REST风格的URL请求。

⑥采用了松散耦合可插拔组件结构,比其他MVC框架更具有扩展性和灵活性

2.映射请求的注解

①@RequestMapping来映射一个请求的URL,SpringMVC使用@ReuqestMapping注解控制器指定可以处理

那些URL请求,在处理器的类定义及方法定义处都可标注。

标注在方法上,方法返回值会通过视图解析器解析为实际的物理视图,对于InternalResourceViewResolver解析器,

会有如下解析:通过 prefix + returnVal + suffix,得到实际的物理视图,然后做转发操作。

如:WEB-INF/views/success.jsp

②@RequestMapping标注位置:

类定义:提供初步的请求映射信息,相对于web应用的根目录

方法定义处:提供进一步的请求映射信息,相对于类定义处的URL,若类定义处标注@RequestMapping,则方法处标注相对于web应用的根目录

③除了可以映射URL之外,还可以映射请求参数,请求方法或请求头,@RequestMapping的value、method、params、heads

分别表示请求URL、请求方法、请求参数、请求头,他们之间是“与”的关系,联合使用多个条件可以让请求映射更加精确化

④@ReuqestMapping还支持Ant的风格的URL,Ant风格资源地址支持3种匹配符

⑤@PathVariable映射URL绑定的占位符,带占位符的URL是Spring3.0之后新增的功能,该功能在SpringMVC向着REST目标

挺近发展过程中具有里程碑的意义。通过@PathVariable可以将URL中占位符绑定到控制器处理方法的入参中:URL中的{xxx}

占位符可以通过@PathVariable{“xxx”}绑定到操作方法的入参中

⑥@RequestPrarm映射请求参数,其中:

value值即为请求参数的参数名

required该参数是否必须,默认为true

defaultValue请求参数的默认值

⑦@RequestHeader绑定请求报头的属性值,请求头包含若干个属性,服务器可据此获知客户端的信息,通过@RequestHeader

即可将请求头中的属性值绑定到处理方法的入参中。

⑧@CookieValue绑定请求中的Cookie值

⑨使用POJO对象绑定请求参数值,SpringMVC会按请求参数名和POJO属性名进行自动匹配,自动为该对象填充属性值,支持级联属性

3.REST:(资源)表现层状态转化,是目前最流行的一种互联网架构,它结构清晰、符合标准、易于理解、方便扩展,所以得到越来越多的网站的应用

资源:网络上的一个实体,或者说网络上的一个具体信息,每种资源对应一个特定的URI。

表现层:把资源具体呈现出来的形式

状态转化:没发出一个请求,就代表了客户端和服务器的一次交互过程,HTTP协议是一个无状态的协议,即所有的状态都保存咋服务端,因此,客户端想要操作服务器

必须通过某种手段,让服务器发生某种“状态转化”,而这种转化是建立在表现层之上的,所以叫做表现层状态转化。

具体说,就是在HTTP协议里面,四种表示操作方式的动词:GET、POST、PUT、DELETE,它们分别对应四种基本操作

GET用来获取资源,POST用来新建资源,PUT用来更新资源、DELETE用来删除资源

示例:

/order/1 HTTP GET:得到ID为1的order

/order/1 HTTP DELETE:删除ID为1的order

/order/1 HTTP PUT:更新ID为1的order

/order HTTP POST:新增order

HiddenHttpMethodFilter:由于浏览器form表单只支持GET和POST请求,而DELETE和PUT等method并不支持,Spring3.0添加了一个过滤器,

可以将这些请求转化为标准的HTTP,使得支持GET、POST、PUT、DELETE请求。

如何使用:

①配置org.springframework.web.filter.HiddenHttpMethodFilter过滤器:把POST请求转化为DELETE或PUT请求

②需要发送POST请求

③需要在发送POST请求时,携带一个name为”_method”的隐藏域,值为DELETE或PUT

④在SpringMVC的目标方法中如何得到id值呢? 使用@PathVariable注解

4.处理模型数据ModelAndView

SpringMVC提供了几种途径输出模型数据:

①ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据

②Map及Model:入参为org.springframework.ui.Model、org.springframework.ui.ModelMap或java.uti.Map、java.uti.Map

处理方法返回时,Map中的数据会自动添加到模型中

③@SessionAttribute:将模型中的某个属性暂存到HttpSession中,一便多个请求之间可以共享这个属性

④@ModelAttribute:方法入参标注该注解之后,入参的对象就会放到数据模型中

二、代码

1.页面

inde.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
</head>
<body> <!-- 1.@RequestMapping标注在方法上:映射URL请求 -->
<a href="helloworld">Hello World!</a>
<br><br> <!-- 2.@RequestMapping标注在类上:提供初步的请求映射信息,相对于web应用的根目录 -->
<a href="springmvc/testRequestMapping">testRequestMapping</a>
<br><br> <!-- 3.@RequestMapping的method属性,因为Method属性指定为POST请求,但超链接是GET请求,所以使用from表单,更改请求方式 -->
<form action="springmvc/testMethod" method="post">
<input type="submit" value="Submit"/>
</form>
<a href="springmvc/testMethod">testMethod</a>
<br><br> <!-- 4.@RequestMapping映射请求参数和请求头,参数值age为10则,无法访问到资源,不是10则可以访问到 -->
<a href="springmvc/testParamsAndHeads?username=test&age=10">testParamsAndHeads age参数值不能为10</a>
<br><br> <!-- 5.@RequestMapping支持Ant风格的URL -->
<a href="springmvc/testAntPath/123123/abc">testAntPath </a>
<br><br> <!-- 6.@PathVariable注解 映射URL中的占位符到目标方法的参数-->
<a href="springmvc/testPathVariable/12">testPathVariable</a>
<br><br> <!-- 7.REST风格的请求 -->
<p>查找</p>
<a href="springmvc/testRest/1">Test Rest GET</a>
<br><br> <p>添加</p>
<form action="springmvc/testRest" method="post">
<input type="submit" value="Test Rest POST">
</form> <p>删除</p>
<form action="springmvc/testRest/1" method="post">
<input type="hidden" name="_method" value="DELETE">
<input type="submit" value="Test Rest DELETE">
</form> <p>更新</p>
<form action="springmvc/testRest/1" method="post">
<input type="hidden" name="_method" value="PUT">
<input type="submit" value="Test Rest PUT">
</form> <!-- 8.RequestParam -->
<a href="springmvc/testRequestParam?username=test&age=22">Test RquestParam</a>
<br><br> <!-- 9.@RequestHeader -->
<a href="springmvc/testRequestHeader">Test RequestHeader</a>
<br><br> <!-- 10.@CookieValue绑定请求中的Cookie值 -->
<a href="springmvc/testCookieValue">Test CookieValue</a>
<br><br> <!-- 11.使用POJO对象绑定请求参数值 -->
<form action="springmvc/testPojo" method="post">
username:<input type="text" name="username">
<br>
password:<input type="password" name="password">
<br>
Email:<input type="text" name="email">
<br>
age:<input type="text" name="age">
<br>
city:<input type="text" name="address.city">
<br>
province:<input type="text" name="address.province">
<br>
<input type="submit" value="Submit">
</form>
<br><br> <!-- 12.使用Servlet原生的API -->
<a href="springmvc/testServletAPI">Test testServletAPI</a>
<br><br> <!-- 13.处理模型数据ModelAndView -->
<a href="springmvc/testModelAndView">Test ModelAndView</a>
<br><br> <!-- 14.处理模型数据Map -->
<a href="springmvc/testMap">Test Map</a>
<br><br> <!-- 15.处理模型数据SessionAttribute --> <!--
16.处理模型数据ModelAttribute
模拟修改操作
1.原始数据为1,Tom,1231,test@.com,21
2.要求:密码不能被修改
3.表单回显,模拟操作直接在表单填写对象的属性值
-->
<form action="springmvc/testModelAttribute" method="post">
<input type="hidden" name="id" value="1"/>
userName:<input type="text" name="username" value="Tom">
<br><br>
Email:<input type="text" name="email" value="test@.com">
<br><br>
age:<input type="text" name="age" value="21">
<br><br>
<input type="submit" name="Submit">
</form>
<br><br>
<!-- 17.视图解析流程 -->
<a href="springmvc/testViewAndViewResolver">Test ViewAndViewResolver</a>
<br><br> <!-- 18.自定义视图 -->
<a href="springmvc/testView">Test View</a>
<br><br> <!-- 19.重定向 -->
<a href="springmvc/testRedirect">Test Redirect</a>
<br><br> </body>
</html>

success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 导入国际化标签 -->
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/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>Insert title here</title>
</head>
<body> <h3>Success Page</h3>
<br><br> <!-- 处理模型数据ModelAndView -->
time:${requestScope.time}
<br><br> <!-- 处理模型数据Map -->
Names:${requestScope.names }
<br><br> <!-- 处理模型数据SessionAttribute -->
request User:${requestScope.user }
<br><br>
<!-- 处理模型数据SessionAttribute -->
Session User:${sessionScope.user }
<br><br>
<!-- 国际化 -->
<fmt:message key="i18n.username"></fmt:message>
<br><br>
<fmt:message key="i18n.password"></fmt:message>
<br><br>
</body>
</html>

2.实体类

User.java

package com.test.springmvc.entities;

public class User {

    private String id;
private String username;
private String password;
private String email;
private String age;
private Address address; public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
} public User(String username, String password, String email, String age) {
super();
this.username = username;
this.password = password;
this.email = email;
this.age = age;
} public User(String id, String username, String password, String email,
String age) {
super();
this.id = id;
this.username = username;
this.password = password;
this.email = email;
this.age = age;
}
public User() {
super();
}
/*@Override
public String toString() {
return "User [username=" + username + ", password=" + password
+ ", email=" + email + ", age=" + age + ", address=" + address
+ "]";
}*/
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password="
+ password + ", email=" + email + ", age=" + age + "]";
} }

Address.java

package com.test.springmvc.entities;

public class Address {

    private String province;
private String city;
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
@Override
public String toString() {
return "Address [province=" + province + ", city=" + city + "]";
} }

3.Handle

HelloWorld.java

package com.test.springmvc.handlers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; @Controller
public class HelloWorld { /**
* 1.应答一个请求,使用@RequestMapping来映射一个请求的URL
* 2.返回值会通过视图解析器解析为实际的物理视图,对于InternalResourceViewResolver解析器,会有如下解析:
*通过 prefix + returnVal + suffix,得到实际的物理视图,然后做转发操作
*如:WEB-INF/views/success.jsp
*/
@RequestMapping("/helloworld")
public String hello(){
System.out.println("你好!");
return "success";
} }

SpringmvcTest.java

package com.test.springmvc.handlers;

import java.util.Arrays;
import java.util.Date;
import java.util.Map; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView; import com.test.springmvc.entities.User; //@SessionAttributes({"user"})
@Controller
@RequestMapping("/springmvc")
public class SpringmvcTest { private static String SUCCESS = "success"; /**
* 1.测试@RequestMapping标注在类定义处
* @return
*/
@RequestMapping("/testRequestMapping")
public String testRequestMapping(){
System.out.println("testRequestMapping");
return SUCCESS;
} /**
* 2.常用:使用Method属性指定请求属性
* @return
*/
@RequestMapping(value="/testMethod", method=RequestMethod.POST)
public String testMethod(){
System.out.println("testMehtod");
return SUCCESS;
} /**
* 3.了解:映射请求参数和请求头
* @return
*/
@RequestMapping(value="/testParamsAndHeads",
params={"username", "age!=10"}, headers={})
public String testParamsAndHeads(){
System.out.println("testParamsAndHeads");
return SUCCESS;
} /***
* 4.Ant的风格的URL,Ant风格资源地址支持3种匹配符
* @return
*/
@RequestMapping("testAntPath/*/abc")
public String testAntPath(){
System.out.println("testAntPath");
return SUCCESS;
} /**
* 4.@PathVariable注解映射URL中的占位符到目标方法的参数
* @param id
* @return
*/
@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") Integer id){
System.out.println("testPathVariable" + id);
return SUCCESS;
} //5.REST风格
/**
* GET(查找)请求
* @param id
* @return
*/
@RequestMapping(value="/testRest/{id}", method=RequestMethod.GET)
public String testRESTGET(@PathVariable Integer id){
System.out.println("test Rest GET:" + id);
return SUCCESS;
} /**
* POST(添加)请求
* @return
*/
@RequestMapping(value="/testRest", method=RequestMethod.POST)
public String testRESTPOST(){
System.out.println("test Rest POST");
return SUCCESS;
} /**
* DELETE(删除)请求
* @param id
* @return
*/
@RequestMapping(value="/testRest/{id}", method=RequestMethod.DELETE)
public String testRESTDELETE(@PathVariable Integer id){
System.out.println("test Rest DELETE:" + id);
return SUCCESS;
} /**
* PUT(更新)请求
* @param id
* @return
*/
@RequestMapping(value="/testRest/{id}", method=RequestMethod.PUT)
public String testRESTPUT(@PathVariable Integer id){
System.out.println("test Rest PUT:" + id);
return SUCCESS;
} /**
* 6.使用@RequestPrarm映射请求参数,其中:
* value值即为请求参数的参数名
* required该参数是否必须,默认为true
* defaultValue请求参数的默认值
* @return
*/
@RequestMapping(value="/testRequestParam")
public String testRequestParam(@RequestParam(value="username") String un,
@RequestParam(value="age", required=false, defaultValue="0") int age){
System.out.println("testRequestParam:" + un + ":" + age);
return SUCCESS;
} /**
* 7.@RequestHeader绑定请求报头的属性值
* @param al
* @return
*/
@RequestMapping("/testRequestHeader")
public String testRequestHeader(@RequestHeader(value="Accept-Language") String al){
System.out.println("testRequestHeader:Accept-Language:" + al);
return SUCCESS;
} /**
* 8.@CookieValue绑定请求中的Cookie值
* @return
*/
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue(value="JSESSIONID") String sessionId){
System.out.println("testCookieValue:sessionID:" + sessionId);
return SUCCESS;
} /**
* 9.使用POJO对象绑定请求参数值
* @return
*/
@RequestMapping("/testPojo")
public String testPojo(User user){
System.out.println("testPojo:" + user);
return SUCCESS;
} /**
* 10.使用Servlet原生的API
*/
@RequestMapping("/testServletAPI")
public String testServletAPI(HttpServletRequest request,
HttpServletResponse response){
System.out.println("testServletAPI:" + request + ":" + response);
return SUCCESS;
} /**
* 11.处理模型数据1,目标方法的返回值可以是ModelAndView类型,其中可以包含视图和模型信息
* SpringMVC会把ModelAndView的model中的数据放入到request域对象中。
*/
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
String viewName = SUCCESS;
ModelAndView modelAndView = new ModelAndView(viewName);
//添加模型数据到ModelAndView中
modelAndView.addObject("time", new Date()); return modelAndView;
} /**
* 12.处理模型数据2,目标方法可以添加Map类型的参数
* @return
*/
@RequestMapping("/testMap")
public String testMap(Map<String, Object> map){
map.put("names", Arrays.asList("Lili", "Tom", "Jerry")); return SUCCESS;
} /**
* 13.@SessionAttribute,在控制器上标注@SessionAttributes({"user"}),该注解只能放到类的上面
* @return
*/
@RequestMapping("/testSessionAttribute")
public String testSessionAttribute(Map<String, Object> map){
User user = new User("Tom", "1231", "test@qq.com", "21");
map.put("user", user);
return SUCCESS;
} /**
* 14.ModelAttribute
* @param user:该参数的部分属性是从数据库中获取的,另一部分属性是form表单映射的数据
* @return
*/
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user){
System.out.println("修改:" + user);
return SUCCESS;
} /**
* 1.有@ModelAttribute标记的方法,会在目标方法(14.testModelAttribute())执行之前被SpringMVC调用
* 2.从数据库中取出对象
* 3.把对象放入到Map中
* 4.传入目标方法的参数(user),该对象的部分参数是从数据库中获取的,另一部分的属性是表单映射过来的
* 5.SpringMVC从Map中取出User对象,并把表单映射的参数赋值给该User对象对应的属性
* 6.SpringMVC把上述对象传入到目标方法的参数
*注意:在@modelAttribute修饰的方法中,放入到Map时的键需要和目标方法入参类型的第一个字母小写的字符串一致
* @param id
*/
@ModelAttribute
public void getUser(@RequestParam(value="id", required=false) Integer id, Map<String, Object> map){
System.out.println("ModelAttribute");
if(id != null){
//模拟从数据库库中获取对象
User user = new User("1", "Tom", "1231", "test@.com", "21");
System.out.println("从数据库中获取对象");
map.put("user", user);
}
} /**
* 15.视图解析流程
* 视图和视图解析器:
* 对于返回类型为String、ModelAndView、View的处理方法,SpringMVC也会在内部将他们装配成一个ModelAndView对象
*它包含了逻辑名和模型对象的视图,SpringMVC借助视图解析器得到最终的视图对象
*ModelAndView——>ViewResolver——>视图对象(JSP/JSTL/PDF)
*
* 以国际化为例,演示视图解析
*/
@RequestMapping("/testViewAndViewResolver")
public String testViewAndViewResolver(){
System.out.println("testViewAndViewResolver");
return SUCCESS;
} /**
* 16.自定义视图
*/
@RequestMapping("/testView")
public String testView(){
System.out.println("testView");
return "helloView";
} /**
* 17.重定向,一般情况下,控制器方法返回字符串类型的值会被当成逻辑视图名处理,如果返回的字符串中带有forword:或
* redirect:前缀时,SpringMVC会对他们进行特殊处理,将forword:和redirect当成指示符,其后的字符串作为URL
* 来处理。
*/
@RequestMapping("/testRedirect")
public String testRedirect(){
System.out.println("testRedirect");
return "redirect:/index.jsp";
} }

4.视图类

HelloView.java

package com.test.springmvc.view;

import java.util.Date;
import java.util.Map; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component;
import org.springframework.web.servlet.View; /**
* 自定义视图,注意注解@Component不能忘了
*
*/
@Component
public class HelloView implements View{ @Override
public String getContentType() {
return "text/html";
} @Override
public void render(Map<String, ?> arg0, HttpServletRequest arg1,
HttpServletResponse arg2) throws Exception {
arg2.getWriter().print("Hello View Time:" + new Date());
} }

5.配置文件

国际化

i18n_en_US.properties

i18n.username=Username
i18n.password=Password

i18n_zh_CN.properties

i18n.username=\u7528\u6237\u540D
i18n.password=\u5BC6\u7801

i18n.properties

i18n.username=Username
i18n.password=Password

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" 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_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>Demo18_Spring_MVC</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> <!-- 配置org.springframework.web.filter.HiddenHttpMethodFilter:可以把POST请求转化为DELETE或PUT请求 -->
<filter>
<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!-- 配置DispatcherServlet -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--
配置DispatcherServlet的初始化参数:配置SpringMVC配置文件的名称和位置,
实际上也可以不通过contextConfigLocation配置SpringMVC的配置文件,而使用默认的
默认的配置文件为:/WEB-INF/<servlet-name>-servlet.xml
-->
<!-- <init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param> -->
<!-- 当前web应用被加载时创建 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<!-- 应答所有请求 -->
<url-pattern>/</url-pattern>
</servlet-mapping> </web-app>

dispatcherServlet-servlet.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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 配置自动扫描的包 -->
<context:component-scan base-package="com.test.springmvc"></context:component-scan> <!-- 配置视图解析器,如何把handler的方法返回的值解析为实际的物理视图 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置前缀,配置前缀时,一定要注意,不能少了第一个斜杠,它代表根目录,少了的话,会因为@RequestMapping注解到类上而出现路径问题-->
<property name="prefix" value="/WEB-INF/views/"></property>
<!-- 配置后缀 -->
<property name="suffix" value=".jsp"></property>
</bean> <!-- 自定义视图,配置视图解析器:BeanNameViewResolver,使用视图的名字来解析视图,若希望下载的是一个Excel文档,
则可以设置响应头Content-Disposition的值为attachment;filename=xxx.xls
该配置文件中,配置了两个视图解析器,那么使用哪个呢?
通过配置order属性,来定义视图的优先级,order的值越小,优先级越高
-->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<property name="order" value="1"></property>
</bean> <!-- 配置国际化资源文件 -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="i18n"></property>
</bean> <!-- 配置直接转发的页面,可以直接向相应的页面转发,而无需再经过Handler的方法。但是这种方法会导致@RequestMapping注解失效。 -->
<mvc:view-controller path="/success" view-name="success"/>
<!-- 解决办法:在实际开发中通常会配置mvc:annotation-driven 标签 -->
<mvc:annotation-driven></mvc:annotation-driven> </beans>

6.用到的jar包

commons-logging-1.1.1.jar
jstl.jar
spring-aop-4.0.0.RELEASE.jar
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
spring-web-4.0.0.RELEASE.jar
spring-webmvc-4.0.0.RELEASE.jar
standard.jar

SpringMVC知识点的更多相关文章

  1. SpringMVC知识点小结

    SpringMVC: 1.SpringMVC和Spring的关系: 软件开发的三层架构: web层[表示层.表现层]---->Service层---->Dao[DataBase Acces ...

  2. SpringMVC知识点总结

    1. SpringMVC概述        SpringMVC是一个WEB层框架,主要用来负责与页面的交互.        SpringMVC是Spring家族的一大组件.Spring整合Spring ...

  3. SpringMVC知识点总结一(非注解方式的处理器与映射器配置方法)

    一.SpringMVC处理请求原理图(参见以前博客) 1.  用户发送请求至前端控制器DispatcherServlet 2.  DispatcherServlet收到请求调用HandlerMappi ...

  4. springmvc知识点整理

    1.Springmvc架构 2.Springmvc组件三大组件:处理器映射器,处理器适配器,视图解析器处理器映射器:注解式处理器映射器,对类中标记了@ResquestMapping的方法进行映射,根据 ...

  5. springMVC知识点复习

    @ResponseBody和@RequestBody的使用 <html> <script type="text/javascript" src="rel ...

  6. Spring MVC知识梳理

    同上一篇博客,复习梳理SpringMVC知识点,这次的梳理比较快,很多细节没有顾虑到,后期可能会回来补充 1. 整体架构 1.1 在学习了SSM框架后我们来理清三者的应用层面 浏览器发送请求,请求到达 ...

  7. springmvc 项目完整示例08 前台页面以及知识点总结

    至此已经基本测试成功了,我们稍作完善,让它成为一个更加完整的项目 我们现在重新规划下逻辑 两个页面 一个登录页面 一个欢迎页面 登陆页面输入账号密码,登陆成功的话,跳转登陆成功 欢迎页面 并且,更新用 ...

  8. springmvc的面试知识点总结

    新的一年,开启新的篇章,欧气满满,迎接未来. 前几天回顾了spring相关的知识点,现在再来回顾下springmvc相关的知识点做一下总结. 问题总结 之前面试问题总结的那篇文章中,与springmv ...

  9. SpringMVC注解知识点

    SpringMVC注解知识点 SpringMVC原生知识点: 上一篇: https://www.cnblogs.com/yiur-bgy/p/14088883.html 注解版 1.新建一个Moudl ...

随机推荐

  1. Hbase服务报错:splitting is non empty': Directory is not empty

    Hbase版本:1.2.0-cdh5.14.0 报错内容: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.fs.PathIsNotEm ...

  2. 关于ubuntu的ssh远程登录的问题

    一. 安装ssh(参考:http://liuyifan789.iteye.com/blog/2068263) sudo apt-get install openssh-server openssh-c ...

  3. day32 process模块用法

    昨日作业: 服务端: 服务端: from socket import * from multiprocessing import Process def server(ip,port): server ...

  4. java获取iPhone手机图片旋转角度处理

    参考原博客地址:https://www.cnblogs.com/zhao1949/p/6473882.html 这里需要的jar文件: https://files.cnblogs.com/files/ ...

  5. react-route4 学习记录

    新建项目 create-react-app react20180413 安装路由 npm install react-router-dom -S 跑通路由 删除全部文件后 重新新建index.js 代 ...

  6. Java 之 Web前端(六)

    1.AJAX a.定义:异步的 JS 和 XML b.作用:不重新加载页面的情况下,与服务器的数据进行交互,改变网页的部分内容 c.语法: <html> <head> < ...

  7. SVM:随机产生100个点,建立模型,找出超平面方程——Jaosn niu

    import numpy as np import pylab as pl from sklearn import svm # we create 40 separable points #np.ra ...

  8. MongDB-高级

    No1: 聚合 聚合(aggregate)主要用于计算数据,类似sql中的sum().avg() ---语法 db.集合名称.aggregate([{管道:{表达式}}]) No2: 管道 管道在Un ...

  9. 004.Ansible Ad-Hoc命令集

    一 Ad-Hoc使用场景 Ad-Hoc更倾向于解决简单.临时性任务. 1.1 Ad-Hoc基础命令 基本语法: 1 ansible <host-pattern> [options] < ...

  10. java validate date

    public boolean isDateValidDDMMYYYY(String date) { String DATE_FORMAT = "ddMMyyyy"; try { D ...