关于SpringMVC的一些简单学习运用

一、学习SpringMVC最先学习的就是@RequestMapping注解

       1、使用这个注解可以控制处理页面端的请求

二、相关的一些注解参数,可以标识在方法的参数前

        1、@RequestHeader    获取请求的头里面的参数

        2、@RequestParam     获取请求URL中携带的参数

        3、@CookieValue         获取请求的cookie值

       同时对于请求的URL中携带的参数也可以不使用@RequestParam来获取,可直接使用方法参数名于UR'L携带参数名相同即可。使用范例

	@RequestMapping("/hello")
	public String test1(@RequestHeader(value="user-Agent",required=true,defaultValue="123")String agent,
						@RequestParam(value="user",required=true,defaultValue="默认值")String user,
						@CookieValue(value="JSESSIONID",required=true,defaultValue="123321")String cook) {
		System.out.println("浏览器的user-Agent:"+agent);
		System.out.println("URL带参user:"+user);
		System.out.println("请求所带Cookie值:"+cook);
		return "success";
	}

      required是指定参数是否可以为空,默认不可为空,否则会报错
      defaultValue是指定参数默认值

三、SpringMVC获取的表单数据可以自动转换为java对象

      唯一的要点就是必须是请求页面端的表单中提交的属性name值必须与bean对象中的属性名一致

例如学生类:

package com.feilonkji.param;

/**
 * 
 * @ClassName: Student
 * @Description: TODO 测试学生bean类
 * @author zr
 * @date 2020年4月2日
 * @version V1.8
 */
public class Student {
	private String name;
	private String no;
	private String sex;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getNo() {
		return no;
	}
	public void setNo(String no) {
		this.no = no;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", no=" + no + ", sex=" + sex + "]";
	}
	
}

测试方法:

@RequestMapping("/hello1")
	public String test2(Student stu) {
		System.out.println(stu);
		return "success";
	}

表单数据:

<body>
<a href="hello?user=123">测试带参</a>
<form action="hello1" method="post">
	姓名:<input type="text" name="name"/><br>
	学号:<input type="text" name="no"/><br>
	性别:<input type="text" name="sex"/><br>
	<input type="submit" value="提交"/>
</form>
<a href="hello2">测试原生API传递参数</a>
</body>

这样提交,则SpringMVC会帮我们自动转换为学生对象。

四、关于SpringMVC数据传输过程中产生的中文乱码问题的解决方案

       1、关于请求乱码

                     GET请求:因为使用的是TomCat,所以最终解决方案是在Servers项目下的server.xml文件中的8080端口处添加URIEncoding="UTF-8"。

                     POST请求:在第一次获取请求参数之前设置:request.setCharacterEncoding("UTF-8");也可以使用SpringMVC提供的Filter过滤器(CharacterEncodingFilter),一般为了避免其他问题,将编码过滤Filter配置在其他filter的最前面。

        2、关于响应乱码

                     可以直接设置response.setContentType("text/html;charset=utf-8");

        3、关于CharacterEncodingFilter过滤器的编码

         <filter>
		<filter-name>CharacterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<!-- encoding是用来指定解决POST请求乱码 -->
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<!-- forceEncoding顺手解决响应乱码:response.setCharacterEncoding("UTF-8") -->
		<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>

五、在SpringMVC中可以使用Map,Model,ModelMap作为参数来传递数据,同样可以使用原生API作为请求控制处理方法的参数用来传递数据到各个域中

      1、使用Map、Model、ModelMap作为参数来传递数据
            三者都能够传递参数到请求域中。
            Map是接口(Interface)  
            Model也是接口,是Map下面的子接口
            ModelMap是类
            最终实现的都是BindingAwareModelMap在工作

例如:

       @RequestMapping("hello1")
	public String test1(Map<String,Object> map) {
		map.put("money","有钱吗");
		return "success";
	}
	@RequestMapping("hello2")
	public String test2(Model model) {
		model.addAttribute("money","有钱吗");
		return "success";
	}
	@RequestMapping("hello3")
	public String test3(ModelMap modelMap) {
		modelMap.addAttribute("money","有钱吗");
		return "success";
	}

        2、使用ModelAndView作为处理方法的返回值来传递数据和返回页面
              传递的数据也在Request请求域中

例如:

        @RequestMapping("hello4")
	public ModelAndView test4() {
		//ModelAndView作为返回值,包含返回的页面信息,也可以传递参数数据
		//传递的数据也在请求域中
		ModelAndView modelAndView = new ModelAndView("success");
		modelAndView.addObject("money","没有money");
		return modelAndView;
	}

六、还有其他很多用法,待继续学习,前进。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值