标签:
一.搭建spring mvc 的hello world
1.添加jar包:
commons-logging-1.1.1.jar
spring-aop-4.1.6.RELEASE.jar
spring-beans-4.1.6.RELEASE.jar
spring-context-4.1.6.RELEASE.jar
spring-core-4.1.6.RELEASE.jar
spring-expression-4.1.6.RELEASE.jar
spring-web-4.1.6.RELEASE.jar
spring-webmvc-4.1.6.RELEASE.jar
至少这8个。
2.在web.xml里配置拦截servlet:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <!-- 配置 DispatcherServlet --> <servlet> <servlet-name>springDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置 DispatcherServlet 的一个初始化参数: 配置 SpringMVC 配置文件的位置和名称 --> <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>springDispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>其中:
<!-- 配置 DispatcherServlet 的一个初始化参数: 配置 SpringMVC 配置文件的位置和名称 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param>用来说明配置文件的地址,在src下面的spring.xml文件,这个文件的名字可以自己定义。
3.写spring.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.springmvc"/> <!--配置前缀和后缀--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
对应jsp就是:prefix + return返回的字符串 + suffix后缀。
4.编写控制类代码,返回success,对应web目录下success.jsp文件:
@Controller public class HelloWorld { @RequestMapping("/hello") public String hello() { System.out.print("hello world"); return "success"; } }
二.各种注解使用:
1.注解@Controller:放置在类上,用来说明这个类是控制器。
2.注解@RequestMapping:请求映射,解析url,确定请求的类和类中的方法:
1. @RequestMapping 除了修饰方法, 还可来修饰类 ,若类定义处未标注 @RequestMapping,则方法处标记的 URL 相对于 WEB 应用的根目录
2. 1). 类定义处: 类似于package的概念。
2). 方法处: 提供进一步的细分映射信息。 相对于类定义处的 URL。
3.可以使用 method 属性来指定请求方式,这样只有post提交才会执行
/** * 常用: 使用 method 属性来指定请求方式 */ @RequestMapping(value = "testRequestMappingPostMethod", method = RequestMethod.POST) public String testRequestMappingPostMethod() { System.out.print("testRequestMappingPostMethod"); return SUCCESS; }
/** * 了解: 可以使用 params 和 headers 来更加精确的映射请求. params 和 headers 支持简单的表达式. */ @RequestMapping(value = "testParams", params = {"username", "password"}) public String testParams() { System.out.print("testParams"); return SUCCESS; }
@RequestMapping(value = "testParamsAndHeaders", params = { "username", "age!=10" }, headers = { "Accept-Language=en-US,zh;q=0.8" }) public String testParamsAndHeaders() { System.out.println("testParamsAndHeaders"); return SUCCESS; }
/** * @PathVariable 可以来映射 URL 中的占位符到目标方法的参数中. */ @RequestMapping(value = "testPathVariable/{id}") public String testPathVariable(@PathVariable("id") Integer id) { System.out.print("testPathVariable" + id); return SUCCESS; }
请求的链接是:
<a href="/test/testPathVariable/121">testPathVariable</a>121就会在参数id中。
4.注解@RequestParam:用来获取传递过来的参数
请求的链接:
<a href="/test/testRequestParams?username=zhulei&password=123456">testRequestParams</a>
/** * @RequestParam 来映射请求参数. value 值即请求参数的参数名 required 该参数是否必须. 默认为 true * defaultValue 请求参数的默认值 */ @RequestMapping(value = "testRequestParams") public String testRequestParams(@RequestParam(value = "username") String username, @RequestParam(value = "password", required = false) String password) { System.out.println("username = " + username + ";" + "password = " + password); return SUCCESS; }
5.注解@RequestParam:用来获取请求中的头部的一些信息:
/** * 了解: 映射请求头信息 用法同 @RequestParam */ @RequestMapping(value = "testRequestHeader") public String testRequestHeader(@RequestHeader(value = "Accept-Language") String info) { System.out.println("Accept-Language = " + info); return SUCCESS; }
三. 常用请求方法参数方面
1.注解@CookieValue:获取coolie中的信息:
/** * 了解: * * @CookieValue: 映射一个 Cookie 值. 属性同 @RequestParam */ @RequestMapping(value = "testCookieValue") public String testCookieValue(@CookieValue(value = "JSESSIONID") String id) { System.out.println("JSESSIONID = " + id); return SUCCESS; }
前台表单:
<form action="/test/testPOJO"> username:<input type="text" name="username"><br> password:<input type="password" name="password"><br> province:<input type="text" name="address.province"><br> city:<input type="text" name="address.city"><br> <input type="submit" value="submit-put"><br> </form>
/** * Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配, 自动为该对象填充属性值。支持级联属性。 * 如:dept.deptId、dept.address.tel 等 */ @RequestMapping(value = "testPOJO") public String testPOJO(User user) { System.out.println(user.toString()); return SUCCESS; }
HttpServletRequest
HttpServletResponse
HttpSession
java.security.Principal
Locale InputStream
OutputStream
Reader
Writer
例子:
@RequestMapping(value = "testServletApi") public String testServletApi(HttpServletRequest request, HttpServletResponse response, Writer out) throws IOException { System.out.println(request.toString() + ";" + response.toString()); out.write("hello"); return SUCCESS; }
这里直接调用Writer,写了一个hello输出。
四.处理数据模型
第三部分是获取网页传过来的数据到java的请求方法中,做法是使用方法参数自动赋值,这部分是把处理好的数据返回给页面。
1.使用ModelAndView返回类型
/** * 处理数据模型之ModelAndView */ /** * 目标方法的返回值是 ModelAndView 类型。 * 其中可以包含视图和模型信息 * SpringMVC 会把 ModelAndView 的 model 中数据放入到 request 域对象中. * @return */ @RequestMapping(value = "testModleAndView") public ModelAndView testModleAndView() { String viewName = SUCCESS; ModelAndView modelAndView = new ModelAndView(viewName); // 填充数据 modelAndView.addObject("date", new Date()); return modelAndView; }
前台代码:
${requestScope.date}
/** * 处理数据模型之Map */ /** * 目标方法可以添加 Map 类型(实际上也可以是 Model 类型或 ModelMap 类型)的参数. * @param map * @return */ @RequestMapping(value = "testMap") public String testMap(Map<String, Object> map) { map.put("name", Arrays.asList("tom", "jerry", "zhulei")); return SUCCESS; }
3.使用注解@SessionAttributes,把数据放到session中:
这个注解只能放在类上面:
@SessionAttributes(value = {"user"}, types = {String.class})
value是一个字符串数组,用来说明这个控制器类的方法中,被放入request中的数据的名字只要是定义好的,也放入session中。
types是定义类的类型,被放入request中的类的类型只要是定义好的,也放入session中
/** * 处理数据模型之SessionAttributes */ /** * @SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外(实际上使用的是 value 属性值), * 还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中(实际上使用的是 types 属性值) * * 注意: 该注解只能放在类的上面. 而不能修饰放方法. */ @RequestMapping(value = "testSessionAttribute") public String testSessionAttribute(Map<String, Object> map) { User user = new User(); user.setUsername("zhulei"); user.setPassword("123"); map.put("user", user); map.put("string", "stringData"); return SUCCESS; }
标签:
原文地址:http://blog.csdn.net/u013173289/article/details/45958665