SpringMVC的学习(二)——SpringMVC注解和请求跳转

一、@RequestMapping

①作用:

SpringMVC使用@RequestMapping注解为控制器指定可以处理哪些URL请求。DispatcherServlet 截获请求后,就通过控制器上 @RequestMapping 提供的映射信息确定请求所对应的处理方法。

在控制器的类定义及方法定义处都可标注 @RequestMapping

  • 标记在上:提供初步的请求映射信息。相当于WEB 应用的根目录,相当于Strtus2的命名空间
  • 标记在方法上:提供进一步的细分映射信息。相当于标记在类上的 URL,相当于Strtus2的命名

②SpringMVC源码参考

③@RequestMapping的value属性

@RequestMapping包含一个value属性!改属性也是默认属性,value属性主要指定的是!方法被访问的具体路径!

         例如:

                   类 @RequestMapping(value="/user"或者"user");

                 方法 @RequestMapping(value="/list"或者"list");

                   那么此方法对应路径为: 协议://主机IP:端口号/项目根路径/user/list

                   注意: 类上@RequestMapping可以不写,那么就不需要追加/user即可!

④@RequestMapping的method属性

可以指定方法对应的请求方式!如果客户端请求的方式和方法设置的方式不同,请求不成功!

 @RequestMapping(value = "/helloworld" , method =RequestMethod.GET)

 @RequestMapping(value = "/helloworld" , method =RequestMethod.POST)

注意: 如果不指定method,可以接收任何类型的请求!如果指定但是访问类型不对会出现405错误

二、@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对应参数传给方法的指定参数,需要使用@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";
	}

②方法参数设置默认值

有一种特殊情况,如果客户端没有在请求传参,那么我们将得到null,我们不希望得到null,希望得到一个默认值,这个时候,我们还需要使用@RequestParam的defaultValue属性进行对应的设置。

@RequestMapping("/list")
	public String list(@RequestParam(defaultValue = "1") Integer currentPage, @RequestParam(defaultValue = "10") Integer pageSize) {
		// 设置默认值,如果不传递使用参数的默认值
		System.out.println("currentPage = " + currentPage);
		System.out.println("pageSize = " + pageSize);
		return "list";
	}

三、@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

@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";
	}

六、请求和跳转

①请求表达式

通过表达式精准映射请求

-  params和headers支持简单的表达式

  •   param:表示请求必须包含名为param的请求参数
  •   !param:表示请求中不能包含名为param的参数
  •   param != value:表示请求中包含param的请求参数,但是值不能为value
  •   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";
	}

②转发和重定向

转发: forward

重定向:redirect

转发语法:

重定向语法:

③解决参数乱码

Spring MVC中 GET方式不会乱码

在web.xml配置文件中添加spring自带的Filter设置编码格式

<filter>
		
      <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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值