记一些SpringMVC学习中的要点:

1、其实SpringMVC学习比struts2学习起简单很多,不过可能是由于我自己以前学了struts2吧,虽然现在不用struts2了,但是还是值得了解一下的呢。其实知识这个东西,没有值不值得学的道理,只有适不适合罢了,无非jsp和struts2现在企业用的少了才很多人选择不学习,但是只要时间多还是可以学一下的,我就是大二的时候学了的,后面学SpringMvc理解起来好多了,学了Hibernate再学Mybatis你懂得。。。

2、maven配置
	maven项目pom配置:
      <dependency>
		<!-- Junit测试 -->
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.12</version>
		<scope>test</scope>
	</dependency>
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>javax.servlet-api</artifactId>
		<version>3.1.0</version>
		<scope>provided</scope>
	</dependency>
	<!-- 添加Spring包 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>4.3.8.RELEASE</version>
	</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.3.8.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>4.3.8.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>4.3.8.RELEASE</version>
		</dependency>
	

		<!-- 为了方便进行单元测试,添加spring-test包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>4.3.8.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
			<version>4.3.8.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>4.3.8.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>4.3.8.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.8.5</version>
		</dependency>
		<!-- jstl -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
	</dependencies>

3、web.xml中的文件配置

<servlet>
	<servlet-name>springDispatcherServlet</servlet-name>		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<!-- 配置DispatcherServlet的初始化參數:设置文件的路径和文件名称 -->
	<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>
<!-- 不能写/*,必须写/,这是REST URL风格的要求,REST风格会在后面介绍 -->
	<url-pattern>/</url-pattern>
</servlet-mapping>

4、加入 Spring MVC 的配置文件

   <?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:p="http://www.springframework.org/schema/p"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:bean="http://www.springframework.org/schema/bean"
	xmlns:context="http://www.springframework.org/schema/context"
	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.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/bean
        http://www.springframework.org/schema/bean/spring-bean.xsd">


	<!-- 扫描controller -->
	<context:component-scan base-package="com.itqf.springmvc.controller" />
	
	<!-- 视图解析器 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- jsp所在的位置 -->
		<property name="prefix" value="/WEB-INF/jsp/" />
		<!-- jsp文件的后缀名 -->
		<property name="suffix" value=".jsp" />
	</bean>

</beans>

5、说说其中的几个注解吧

  1. @RequestMapping:

简称就是就是请求处理映射,就是我们在客户端浏览器的地址栏中输入以下这段代码你就可以理解了

   @RequestMapping("/xx") // @RequestMapping(value = "/xx")
    @Controller
    public class HelloWorld {
        @RequestMapping("/helloworld")
        public String hellworld(){
            System.out.println("helloworld");
            return "helloworld";
        }
    }

其中@RequestMapping(value = “/helloworld” , method
=RequestMethod.GET)这种形式代表的是接受get类型的请求,相反post请求你懂得。。。

  1. @RequestParam:

在后台通过该注解中获取表单提交的参数参数(注意:一般参数名字都是一样的) 创建一个登陆表单

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <body>
        	<!--action指定controller中对应的方法路径即可!-->
        	<form action="xx/login" method="POST">
        		用户名:<input type="text" id="username" name="username" /> <br/>
        		密码:<input type="text" id="password" name="password" />  <br/>
        		    <input type="submit" value="登陆">
        	</form>
        </body

>
  • 获取参数的控制器

      @RequestMapping("/xx")
      @Controller
      public class LoginController {
      	// 接收form表单
      	@RequestMapping(value = "/login", method = RequestMethod.POST)
      	public String login(String username, String password) {
      		System.out.println("username = " + username);
      		System.out.println("password = " + password);
      		return "helloworld";
      	}
    

获取参数,只需要在对应的方法中添加参数即可,如果参数名与请求传参的name值相同即可直接赋值,注意:对应类型很重要,如果是普通的输入框,使用字符串即可,如果是多选框,可以使用List类型的参数接值
如果参数名和name值相同,无需使用@RequestParam注解 参数名与name值不同
开发中会碰到请求参数name的值与方法的参数名不同,还需要将指定的name对应参数传给方法的指定参数,就不需要使用@RequestParam注解

<form action="xx/login" method="POST">
		用户名:<input type="text" id="username" name="name" /> <br/>
		密码:<input type="text" id="password" name="password" />  <br/>
		    <input type="submit" value="登陆">
	</form>

// 接收form表单

@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@RequestParam(value = "name") String username, String password) {
	System.out.println("username = " + username);
	System.out.println("password = " + password);
	return "helloworld";
}

@PathVariable

可以通过此注解,获取路径部分的数据! 例如: http://localhost:8080/user/lde/1
获取路径/list/后面1的数据!

代码块:

@RequestMapping("/user/list/{id}")
public String getData(@PathVariable(value = "id") Integer id) {
	System.out.println("id = " + id);
	return "list";
}

代码解释: 将路径中想要获取部分使用 {标注名}标注,在方法对应赋值的参数添加@PathVariable注解即可!value值为标注名

@CookieValue

@CookieValue注解可以获取请求中的cookie!!
@RequestMapping("/cookie")
public String testCookie(@CookieValue(“JSESSIONID”) String cookie) {
System.out.println(“cookie:” + cookie); return “result”;
}
@RequestHeader注解可以获取请求头中的数据!!

@RequestMapping("/header")

public String testHeader(@CookieValue(“JSESSIONID”) String cookie,
@RequestHeader(“User-Agent”) String header) {
System.out.println(“cookie:” + cookie);
System.out.println(“header:” + header); return “result”;
}

6、来聊一下请求表达式

params和headers支持简单的表达式

  1. param:表示请求必须包含名为param的请求参数
  2. !param:表示请求中不能包含名为param的参数
  3. param != value:表示请求中包含param的请求参数,但是值不能为value
  4. param == value:表示请求中包含param的请求参数,但是值为value
param
	@RequestMapping(value = "/param", params = { "!username", "age!=10" })
	public String testParam(String usernam, Integer age) {
		System.out.println("usernam:" + usernam);
		System.out.println("age:" + age);
		return "result";
	}

param 和 header
	@RequestMapping(value = "/param1", headers = { "Connection!=keep-alive" }, params = { "!username", "age!=10" })
	public String testParam1(String usernam, Integer age) {
		System.out.println("usernam:" + usernam);
		System.out.println("age:" + age);
		return "result";
	}

7、重定向和转发(redirect和forward)

  • 怀恋刚刚学servlet的时候的request.getRequestDispatcher()和action
    的type=redirectAction 和chain。。。。


    在web.xml配置文件中添加spring自带的Filter设置编码格式
    这里是处理Post乱码请求
    如果处理GET乱码有两种方法:

1、在tomcat中的server.xml中更改服务器的编码为UTF-8
2、使用String encode = new String(str.getBytes(“ISO-8859-1”),“UTF-8”);
先编码成ISO-8859-1最后再解码成UTF-8。

  <filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
	<init-param>
		<param-name>forceEncoding</param-name>
		<param-value>true</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>characterEncodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

好了到这里就结束了,如果觉得可以那就请关注一波吧 大家一起交流学习吧。。。。