主要内容:(底部有代码链接)
- HelloWorld(项目的结构)
- RequestMapping_修饰类
- RequestMapping_请求方式
- RequestMapping_请求参数&请求头
- RequestMapping_Ant
- RequestMapping_PathVariable注解
- HiddenHttpMethodFilter过滤器
- RequestParam注解
- RequestHeader注解
- CookieValue注解
项目结构:
项目中的一些解释都在代码中。。
一、helloworld
HelloWorld.java:
package com.zjy.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+后缀 这样的方式得到实际的物理视图,然后做转发操作
*
* /WEB-INF/views/success.jsp
* @return
*/
@RequestMapping("/helloworld")
public String Hello(){
System.out.println("HelloWorld");
return "success";
}
}
建立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.zjy.springmvc"></context:component-scan>
<!-- 配置视图解析器:如何把handler方法返回值解析为实际的物理视图 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
建立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_3_0.xsd"
id="WebApp_ID" version="3.0">
<!-- 配置 :可以把POST请求转化为DELETE请求或者POST请求-->
<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>
<!-- 配置初始化参数,配置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> -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
index.jsp:
<a href="helloworld">Hello World</a>
success.jsp:
<body>
<h4>Success</h4>
</body>
二、RequestMapping、HiddenHttpMethodFilter 过滤器、RequestParam 注解、RequestHeader 注解、CookieValue 注解
SpingMVCTest.java
package com.zjy.springmvc.handlers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
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;
@RequestMapping("/springmvc")
@Controller
public class SpringMVCTest {
private static final String SUCCESS="success";
/**
* 1.@RequestMapping除了修饰方法,还可以来修饰类
* @return
*/
@RequestMapping("/testRequestMapping")
public String testRequestMapping(){
System.out.println("testRequestMapping");
return SUCCESS;
}
/**
* 使用method属性来指定请求方式
* @return
*/
@RequestMapping(value="/testMethod",method=RequestMethod.POST)
public String testMethod(){
System.out.println("testMethod");
return SUCCESS;
}
/**
* 使用通配符来指定随意的请求方式(Ant风格的方式)
* 路径中的*在访问的时候可以指定任意
*/
@RequestMapping("/testAntMethod/*/abc")
public String testAntMethod(){
System.out.println("testAntMethod");
return SUCCESS;
}
@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") Integer id){
System.out.println("testPathVariable");
return SUCCESS;
}
/**
* Rest 风格的URL
* 以crud为例:
* 新增:/order POST
* 修改:/order 1 PUT
* 获取:/order 1 GET
* 删除:/order 1 DELETE
*
* 如何发送PUT请求和DELETE请求?
* 1.需要配置HiddenHttpMethodFilter
* 2.需要发送POST请求
* 3.需要发送POST请求时,携带一个隐藏域,值为DELETE或PUT
*
* 在springmvc里面中的目标方法中,如何得到id呢?
* 使用@PathVariable注解
*
* @param id
* @return
*/
@RequestMapping(value="/testRest/{id}",method=RequestMethod.GET)
public String testRest(@PathVariable Integer id){
System.out.println("testRest Get:" + id);
return SUCCESS;
}
@RequestMapping(value="/testRest",method=RequestMethod.POST)
public String testRest(){
System.out.println("testRest POST");
return SUCCESS;
}
@RequestMapping(value="/testRest/{id}",method=RequestMethod.DELETE)
public String testRestDelete(@PathVariable Integer id){
System.out.println("testRest DELETE :" + id);
return SUCCESS;
}
@RequestMapping(value="/testRest/{id}",method=RequestMethod.PUT)
public String testRestPut(@PathVariable Integer id){
System.out.println("testRest PUT :" + id);
return SUCCESS;
}
/**
* (重要)
* @RequestParam来映射请求参数。
* value值即请求参数的参数名
* required 该参数是否必须,默认为true
* defaultValue 设置请求参数的默认值
*
* @param username
* @param age
* @return
*/
@RequestMapping(value="/testRequestParam")
public String testRequestParam(@RequestParam(value="username") String username,
@RequestParam(value="age",required=false,defaultValue="0") int age){
System.out.println("TestRequestParam,username= " + username + ",age :" + age);
return SUCCESS;
}
/**
* 映射请求头信息(只需了解)
* 用法同@RequestParam
*
* @param al
* @return
*/
@RequestMapping(value="/testRequestHeader")
public String testRequestHeader(@RequestHeader(value="Accept-Language") String al){
System.out.println("testRequestHeader, Accept-Language:" + al);
return SUCCESS;
}
/**
* (只需要了解)
* @CookieValue:映射一个Cookie值,属性和@RequestParam
* @param sessionid
* @return
*/
@RequestMapping(value="/testCookieValue")
public String testCookieValue(@CookieValue(value="JSESSIONID") String sessionid){
System.out.println("testCookieValue : sessionId=" + sessionid);
return SUCCESS;
}
}
index.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>HelloWorld</title>
</head>
<body>
<a href="springmvc/testCookieValue">Test CookieValue</a>
<br><br>
<a href="springmvc/testRequestHeader">Test RequestHeader</a>
<br><br>
<a href="springmvc/testRequestParam?username=zjy&age=11">Test RequestParam</a>
<br><br>
<form action="springmvc/testRest/1" method="post">
<input type="hidden" name="_method" value="PUT"/>
<input type="submit" value="Test Rest Put"/>
</form>
<br><br>
<form action="springmvc/testRest/1" method="post">
<input type="hidden" name="_method" value="DELETE"/>
<input type="submit" value="Test Rest Post"/>
</form>
<br><br>
<form action="springmvc/testRest" method="post">
<input type="submit" value="Test Rest POST"/>
</form>
<br><br>
<a href="springmvc/testRest/1">Test Rest Get</a>
<br><br>
<a href="springmvc/testPathVariable/1">Test PathVariable</a>
<a href="springmvc/testAntMethod/fdsa/abc">Test AntMethod</a>
<form action="springmvc/testMethod" method="post">
<input type="submit"/>
</form>
<a href="springmvc/testRequestMapping">Test RequestMapping</a>
<a href="helloworld">Hello World</a>
</body>
</html>