spring mvc 学习笔记1
来源:互联网 发布:域名邮箱还要备案吗 编辑:程序博客网 时间:2024/06/11 13:14
一.搭建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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://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>
主要有两个属性需要配置,一个是控制器controller的包,用来扫描。还有一个是资源是图解析器,用来生成视图文件的位置,跟目录是 WEB目录下。
对应jsp就是:prefix + return返回的字符串 + suffix后缀。
4.编写控制类代码,返回success,对应web目录下success.jsp文件:
@Controllerpublic 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; }
4.还有params和headers属性,用来进一步确认映射关系,其中有requerid属性来确定是否必须拥有:
/** * 了解: 可以使用 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;}
3.注解@PathVariable:用来获取占位符的值,可以来映射 URL 中的占位符到目标方法的参数中:
/** * @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; }
这里,就是获取到了http协议,请求头部中的accept-language字段的信息,和@RequestParam用法一样,就是获取的是头部的信息
三. 常用请求方法参数方面
1.注解@CookieValue:获取coolie中的信息:
/** * 了解: * * @CookieValue: 映射一个 Cookie 值. 属性同 @RequestParam */ @RequestMapping(value = "testCookieValue") public String testCookieValue(@CookieValue(value = "JSESSIONID") String id) { System.out.println("JSESSIONID = " + id); return SUCCESS; }
2.类似第5个注解@requestparam,可以直接把表单的信息封装成一个对象来获取,这点和struts2的交互一样
前台表单:
<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>
处理类,接受表单的user信息,其实是调用pojo类的set方法进行设置,然后放到参数user中,支持二级映射:
/** * Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配, 自动为该对象填充属性值。支持级联属性。 * 如:dept.deptId、dept.address.tel 等 */ @RequestMapping(value = "testPOJO") public String testPOJO(User user) { System.out.println(user.toString()); return SUCCESS; }
3.可以使用 Serlvet 原生的 API 作为目标方法的参数 具体支持以下类型
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; }
直接把原生的servlet api类 当作参数,放到请求方法里,就会自动赋值,获取这些类
这里直接调用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; }
SpringMVC 会把 ModelAndView 的 model 中数据放入到 request 域对象中,这样前台就可以获取到这些值。
前台代码:
${requestScope.date}
2.使用Map作为方法参数:
/** * 处理数据模型之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; }
同样,SpringMVC 会把 map 的 中数据放入到 request 域对象中,这样前台就可以获取到这些值。
3.使用注解@SessionAttributes,把数据放到session中:
这个注解只能放在类上面:
@SessionAttributes(value = {"user"}, types = {String.class})
有两个参数可以设置,value和types。
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; }
- [1] spring mvc学习笔记
- Spring MVC-学习笔记1
- spring mvc 学习笔记1
- Spring MVC 学习笔记1:Spring 框架
- Spring MVC 学习笔记
- spring MVC学习笔记
- Spring MVC学习笔记
- spring-mvc学习笔记
- spring mvc学习笔记
- spring mvc 学习笔记
- Spring MVC 学习笔记
- Spring mvc学习笔记
- spring mvc 学习笔记
- spring mvc学习笔记
- 【Spring MVC】 学习笔记
- Spring MVC 学习笔记
- Spring MVC 学习笔记
- Spring MVC学习笔记 1:入门篇
- android自定义组合控件
- java多线程
- C Tips: Convert GBK to Unicode (base on MultiByteToWideChar ())
- Nginx+Tomcat+Memcached集群 【测试成功】
- git 详解
- spring mvc 学习笔记1
- Latex 各种处理论文操作-插图、插表格
- mysql事务处理用法与实例详解
- C++构造与析构(10) - private析构函数
- NIO java 暂未完成。。。
- C++IO操作总结
- nginx rewrite 参数和例子
- 手把手教你将myeclipse设置为VS的代码风格(即设置成大括号自动换行)
- vim全角标点不对