【SpringMVC】---RequestMapping、Ant 路径、PathVariable 注解、HiddenHttpMethodFilter 过滤器、用 POJO 作为参数
一、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>SpringMVC_001_001</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> <!-- 配置 DispatcherServlet --> <servlet> <!-- springDispatcherServlet 在应用启动的时候被创建,不是调用的时候被创建。 --> <!-- 实际上也可以不通过 contextConfigLocation 来配置 springmvc 的配置文件,而使用默认的。 --> <!-- 默认的配置文件为:/WEB-INF/<servlet-name>-servlet.xml --> <!-- 把 SRC 下的 spring-mvc.xml 移动在/WEB-INF/下并改名为 springDispatcherServlet-servlet.xml的文件,并注释 R20~R23 --> <!--配置 DispatcherServlet 初始化参数,作用是配置 SpringMVC 配置文件的位置和名称--> <servlet-name>springDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- 将所有请求映射到DispatcherServlet处理 --> <servlet-mapping> <!--配置 DispatcherServlet 初始化参数,作用是配置 SpringMVC 配置文件的位置和名称--> <servlet-name>springDispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 配置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> </web-app>
二、HelloWorld.java
package com.chinasofti.springmvc.handlers; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import com.chinasofti.springmvc.entity.User; @Controller @RequestMapping(value="/springmvc") public class HelloWorld { /** * 1、使用 RequestMapping 注解来映射请求的 URL(统一资源定位) * 2、返回值会通过视图解析器解析为实际的物理视图,对于 InternalResourceViewResolver 而言, * 视图解析器会做如下的解析: * 2.1、通过 prefix + returnVal + 后缀这样的方式得到实际的物理视图,然后做转发操作。 * 如:/WEB-INF/views/success.jsp * @return */ public static final String SUCCESS="success"; /* * 测试跳换页面 */ @RequestMapping("/helloword") public String hello(){ System.out.println("hello word"); return SUCCESS; } /* * 测试Post提交 */ @RequestMapping(value="/helloword",method=RequestMethod.POST) public String testPost(){ System.out.println("hello word"); return SUCCESS; } /* * 测试Params参数 params表示要传递的参数,username表示传递的第一个参数,值不确定,第二个参数是 age并且年龄不能是等于10的 * */ @RequestMapping(value="testParamaAndHeaders",params={"username","age!=10"}, headers={"Accept-Language=zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"}) public String testParamaAndHeaders(){ System.out.println("testParamaAndHeaders"); return SUCCESS; } /* * 测试Ant格式请求路径 * */ @RequestMapping(value="testAnt/*/abc",params={"username","age!=10"}, headers={"Accept-Language=zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"}) public String testAnt(){ System.out.println("testAntPath"); return SUCCESS; } /* * @PathVariable可以映射URL中的占位符到目标方法中 */ @RequestMapping("/testPathVariable/{id}") public String testPathVariable(@PathVariable("id") Integer id){ System.out.println("testPathVariable:"+id); return SUCCESS; } /* *测试GET方法 --------------》查 */ @RequestMapping(value = "/testRest/{id}", method = RequestMethod.GET) public String testRest(@PathVariable Integer id) { System.out.println("testRest GET:" + id); return SUCCESS; } // POST是新增,没有参数。------》增 @RequestMapping(value = "/testRest", method = RequestMethod.POST) public String testRest() { System.out.println("testRest POST"); return SUCCESS; } /* * 测试DELETE方法-----------》删 */ @RequestMapping(value = "/testRest/{id}", method = RequestMethod.DELETE) public String testDeleteRest(@PathVariable Integer id) { System.out.println("testRest DELETE:" + id); return SUCCESS; } /* * 测试PUT方法--------------》改 */ @RequestMapping(value = "/testRest/{id}", method = RequestMethod.PUT) public String testPutRest(@PathVariable Integer id) { System.out.println("testRest PUT:" + id); return SUCCESS; } /* * 测试POJO */ @RequestMapping("/testPojo") public String testPojo(User user){ System.out.println(user.getUsername()+"\t"+user.getPassword()+"\t"+user.getEmail()+"\t"+user.getAge() +"\t"+user.getAddress().getProvince()+"\t"+user.getAddress().getCity()); return SUCCESS; } /* * 使用 Servlet 原生 API 作为参数 * **HttpServletRequest * **HttpServletResponse * **HttpSession * Java.security.Principal * Locale * InputStream * OutputStream * Reader * Writer */ @RequestMapping("/testServletAPI") public String testServletAPI(HttpServletRequest request,HttpServletResponse response){ System.out.println("ServletAPI:"+request+"\t\r"+response); return SUCCESS; } }
三、Address 类
package com.chinasofti.springmvc.entity; 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 + "]"; } }
User类
package com.chinasofti.springmvc.entity; public class User { private String username; private String password; private String email; private Integer age; 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 Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } private Address address; public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } @Override public String toString() { return "User [username=" + username + ", password=" + password + ", email=" + email + ", age=" + age + ", address=" + address + "]"; } }
四、spring-mvc.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:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> <!-- 配置自动扫描的包 --> <context:component-scan base-package="com.chinasofti"></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>
五、success.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> 测试成功! </body> </html>
六、index.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> <a href="springmvc/helloword">跳转页面</a> <br/> <br/> <hr /> <form action="springmvc/helloword" method="post"> <input type="submit" value="POST提交"> </form> <br/> <hr /> <a href="springmvc/testParamaAndHeaders?username='huazai'&age=11">测试params</a> <br/> <br/> <hr /> <a href="springmvc/testAnt/xxxxxxxx/abc?username=huazai&age=11">测试Ant请求路径</a> <br/> <br/> <hr /> <a href="springmvc/testPathVariable/11">测试PathVariable 注解请求路径</a> <br/> <br/> <br/> <hr /> <form action="springmvc/testRest/1" method="post"> <input type="hidden" name="_method" value="DELETE"> <input type="submit" value="Test Rest DELETE"> </form> <hr /> <form action="springmvc/testRest/1" method="post"> <input type="hidden" name="_method" value="PUT"> <input type="submit" value="Test Rest PUT"> </form> <hr /> <form action="springmvc/testRest" method="post"> <input type="submit" value="Test Rest Post"> </form> <hr> <a href="springmvc/testRest/1">Test Rest Get</a> <hr> <form action="springmvc/testPojo" method="post"> username:<input type="text" value="" name="username"><br/> password:<input type="password" value="" name="password"><br/> email: <input type="text" value="" name="email"><br/> age: <input type="text" value="" name="age"><br/> province:<input type="text" value="" name="address.province"><br/> city: <input type="text" value="" name="address.city"><br/> <input type="submit" value="gogogo"> </form> <hr> <a href="springmvc/testServletAPI">testServletAPI</a> </body> </html>
关于-RequestMapping、Ant 路径、PathVariable 注解、HiddenHttpMethodFilter 过滤器、用 POJO 作为参数
请留下你的足迹...