Java学习笔记06 ── SpringMVC( HelloWorld、RequestMapping、REST、处理请求数据、处理相应数据)

HelloWorld

导入jar包

spring-aop-4.0.0.RELEASE.jar
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
commons-logging-1.1.3.jar
spring-web-4.0.0.RELEASE.jar
spring-webmvc-4.0.0.RELEASE.jar

在web.xml中配置DispatcherServlet

  <servlet>
  	<servlet-name>springMVC</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>springMVC</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>

创建SpringMVC的配置文件

注意:文件名要与<servlet-name标签的值相对应,文件名称为servlet-name-servlet,例如我的值是springMVC,那么我的配置文件的名称应该为springMVC-servlet.xml
首先配置扫描的包把加上@Controller注解的类作为springMVC的控制层,然后再配置视图解析器,这里视图解析器的作用是
prefix + 视图名称 + suffix 作为要跳转的页面

	<context:component-scan base-package="com.atguigu.test"></context:component-scan>

	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/view/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>

创建控制层的类

创建HelloWorld类,然后加上@Controller类,证明是控制层的,然后创建hello()方法,在上面加上@RequestMapping注解,注解中填入一个“hello”表示访问路径,这样访问http://localhost:8080/SpringMVC01_Test/hello的时候就会被这个方法处理。

@Controller
public class HelloWorld {

	@RequestMapping("hello")
	public String hello() {
		System.out.println("访问了hello");
		return "success";
	}
}

@RequestMapping注解

概述

@RequestMapping注解是设置请求映射,就是吧请求的url和控制层的方法联系起来,设置映射关系。这个注解可以加在类上也可以加在方法上,访问的时候需要一层一层的访问,先访问类上的,再访问方法上的。

value属性

value属性用来标识,当请求的url和value属性的值一致时就会把该请求映射到该方法上,使用该方法来进行处理。例如访问路径为hello的时候,就会被hello()方法进行处理。

	@RequestMapping("hello")
	public String hello() {
		System.out.println("访问了hello");
		return "success";
	}

method属性

method属性用来设置请求的方式,即使用什么方式请求的时候才能被该方法处理,例如下面的两个的url都是hello,但是如果以get方式反访问的时候就被hello()方法处理,以post方式访问的时候就被helloPost()方法处理。

	@RequestMapping(value = "hello",method = RequestMethod.GET)
	public String hello() {
		System.out.println("get方式访问了hello");
		return "success";
	}
	@RequestMapping(value = "hello",method = RequestMethod.POST)
	public String helloPost() {
		System.out.println("post方式访问了hello");
		return "success";
	}

params属性

params属性用来筛选客户端传到服务器的值,支持表达式,比如下面的按照顺序分别为传入的参数必须有username、传入的参数不能有age、传入的参数必须有username并且值必须为admin、传入的username的值不能为root.

	@RequestMapping(value = "hello",params = {"username","!age","username=admin","username!=root"})
	public String helloPost() {
		System.out.println("post方式访问了hello");
		return "success";
	}

headers属性

用来筛选请求头,客户端所发送的请求头要和设置的一致才能正常访问,比如下面的例子中请求头中必须有Accept-Language=zh-CN,zh;q=0.9才可以正常访问。

	@RequestMapping(value = "hello",headers = {"Accept-Language=zh-CN,zh;q=0.9"})
	public String helloPost() {
		System.out.println("post方式访问了hello");
		return "success";
	}

支持Ant路径风格

在SpringMVC中支持Ant方式的请求路径,有三个匹配符,分别为
*:任意字符
?:任意一个字符
**:任意多层目录

	@RequestMapping(value="/*/ant??/**/testAnt")
	public String testAnt() {
		System.out.println("SUCCESS:testAnt");
		return "success";
	}

映射请求占位符PathVariable注解

通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中
url中使用{xxx}来占位
参数中使用 @PathVariable(“xxx”) 绑定到操作方法参数中
注意二者的xxx要相同

	@RequestMapping(value = "hello/{id}/{username}")
	public String test(@PathVariable("id") Integer id,@PathVariable("username") String username) {
		System.out.println("id:,"+id+"username:"+username);
		return "success";
	}

REST

具体说,REST就是 HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。
它们分别对应四种基本操作:GET 用来获取资源,POST 用来新建资源,PUT 用来更新资源,DELETE 用来删除资源。
使用步骤:

web.xml中配置过滤器

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

编写处理方法

编写处理方法,这里以put为例,method方法为put,如果报错的话可以加上@ResponseBody注解

	@RequestMapping(value = "rest",method = RequestMethod.PUT)
	@ResponseBody
	public String  testREST() {
		System.out.println("put");
		return "success";
	}

设置form表单

要注意一定要有一个name为_method的隐藏域,value值为要使用的方式。

<form action="rest" method="post">
	<input type="hidden" name="_method" value="put">
	<input type="submit">
</form>

处理请求数据

加入名字一样的形参

在处理请求的方法中,加入名字相同的形参就可以自动赋值,比如在参数中加入username就可获取客户端传过来的username的值

	@RequestMapping("param")
	public String param(String username ) {
		System.out.println(username);
		return "success";
	}

@RequestParam注解

如果名字不相同不能自动赋值则可以通过@RequestParam注解在获取参数的时候重新设置参数的变量名。
value:当不满足赋值条件时,可以使用value属性,指定映射关系
required:设置形参是否必须被赋值,默认为true,必须赋值,若设置为false,则不必须赋值,因此形参的值为null
defaultValue:若形参所获得的值为null,则设置一个默认值,用在分页和模糊查询中

	@RequestMapping("param")
	public String param(@RequestParam(value = "username",required = false ,defaultValue = "root") String name ) {
		System.out.println(name);
		return "success";
	}

@RequestHeader 注解

可以获取请求头的信息

	@RequestMapping("head")
	public String head(@RequestHeader("Accept-Language") String Accept ) {
		System.out.println(Accept);
		return "success";
	}

@CookieValue 注解

可以获取cookie的信息

	@RequestMapping("cookie")
	public String cookis(@CookieValue("JSESSIONID") String cookie ) {
		System.out.println(cookie);
		return "success";
	}

使用POJO作为参数

可以使用POJO获取客户端数据,要求实体类对象中的属性名一定要和页面中表单元素的name属性值一致,且支持级联关系
1.创建两个javabean,User类包含以下属性:

	private Integer id;
	
	private String username;
	
	private String password;
	
	private Integer age;
	
	private Address address;

User中其中有一个属性是Address 类型的,再创建Address类:

	private String provice;
	private String city;
	private String country;

2.jsp中,name属性和User类中的相同,Address属性使用.的形式级联对应起来

<form action="param" method="post">
	username:<input type="text" name="username" ><br>
	password:<input type="text" name="password" ><br>
	age:<input type="text" name="age" ><br>
	provice:<input type="text" name="address.provice" ><br>
	city:<input type="text" name="address.city" ><br>
	country:<input type="text" name="address.country" ><br>
	<input type="submit">
</form>

3.controller中直接将User user作为形参,就会自动赋值了

	@RequestMapping(value = "/param",method = RequestMethod.POST)
	public String paream(User user) {
		System.out.println(user);
		return "success";
	}

使用Servlet原生API作为参数

在处理函数中直接将相应的ServletAPI 做为参数就会自动赋值然后使用了,可以支持以下九种

  1. HttpServletRequest
  2. HttpServletResponse
  3. HttpSession
  4. java.security.Principal
  5. Locale
  6. InputStream
  7. OutputStream
  8. Reader
  9. Writer
	@RequestMapping(value = "/param",method = RequestMethod.POST)
	public String paream(HttpServletRequest req,HttpServletResponse resp) {
		String username  = req.getParameter("username");
		System.out.println(username);
		return "success";
	}

处理响应数据

Spring中提供了三种方法输出模型数据,不管使用以下哪种方式,最终都会把Model数据和view数据封装到MaodelAndView中
1) ModelAndView: 处理方法返回值类型为 ModelAndView 时, 方法体即可通过该对象添加模型数据
2) Map 或 Model: 入参为 org.springframework.ui.Model、
org.springframework.ui.ModelMap 或 java.uti.Map 时,处理方法返回时,Map 中的数据会自动添加到模型中。

ModelAndView

	@RequestMapping(value = "/param",method = RequestMethod.POST)
	public ModelAndView paream() {
		ModelAndView mav = new ModelAndView();
		mav.addObject("username", "root");//往request域中放值
		mav.setViewName("success");//设置视图名称实现页面跳转
		return mav;
		
	}

Map

	@RequestMapping(value = "/param",method = RequestMethod.POST)
	public String paream(Map<String,Object> map) {
		map.put("username",	"admin");//向作用域放值
		return "success";//返回视图名称
		
	}

Model

	@RequestMapping(value = "/param",method = RequestMethod.POST)
	public String paream(Model model) {
		model.addAttribute("username","root");
		return "success";//返回视图名称		
	}


今天的内容到此结束,谢谢大家的观看,如有错误请指正,谢谢!CSDN记录成长!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值