Java学习笔记07 ── SpringMVC( 设置配置文件、设置Servlet加载时间、解决中文乱码、重定向、@ModelAttribute、@SessionAttrbutes)

设置SpringMVC配置文件

可以通过init-param标签来重新设置SpringMVC配置文件的位置classpath:springMVC.xml代表类路径下的springMVC.xml文件,这里的文件名可以自定义。

	<servlet>
		<servlet-name>springDispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springMVC.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<!-- Map all requests to the DispatcherServlet for handling -->
	<servlet-mapping>
		<servlet-name>springDispatcherServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

设置Servlet加载时间

在上面的xml中有下面这么一句,这是用来设置Servlet的加在时间,如果设置了这个标签,就会将Servlet的加在时间提前到项目启动时,标签的内容为正整数时代表不同Servlet加载的优先级,数字越小优先级越高,当为负数和0时相当于没写,没有任何效果。

<load-on-startup>1</load-on-startup>

解决中文乱码

只需要加上一个过滤器就可以轻松解决中文乱码的问题,需要初始化encoding属性,这里设置的值为UTF-8,要注意的是这个过滤器要在所有过滤器之前。

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

重定向

这个就更简单了,只需要return的时候加上个redirect:就好了,要注意的是这里的.jsp后缀名不能省略。

return "redirect:/test.jsp";

@ModelAttribute

@ModelAttribute注解可以作用在方法上,也可以作用在参数上,作用在方法上会在控制器方法之前执行。作用在参数上会获取指定的数据给参数赋值。
作用在方法上,参数传过来之后首先会经过modelAttributeTest()方法,然后才经过test1()方法。例如User类有name、age、sex三个属性,若前台只传了name、age两个属性,然后modelAttributeTest()方法中给三个值都赋值,最后再test1()方法中获取的是前台传过来的name、age和modelAttributeTest()方法填充的sex属性。modelAttributeTest()方法填充的不会覆盖前台传过来的数据。

	@RequestMapping(value = "usertest",method = RequestMethod.GET)
	public String test1(User user) {
		System.out.println("usertest被调用,"+user);
		return "success"; 

	}
	
	@ModelAttribute
	private User modelAttributeTest() {
		User user = new User();
		user.setAge("10");
		user.setName("lxy");
		user.setSex("男");
		return user;
		
	}

作用在参数上:可以在modelAttributeTest()方法中不返回User对象,而把它存储在一个Map中,然后在参数中通过ModelAttribute注解来获取。

	@RequestMapping(value = "usertest",method = RequestMethod.GET)
	public String test1(@ModelAttribute("test")User user) {
		System.out.println("usertest被调用,"+user);
		return "success"; 

	}
	
	@ModelAttribute
	private void modelAttributeTest(Map<String, User> map) {
		User user = new User();
		user.setAge("10");
		user.setName("lxy");
		user.setSex("女");
		map.put("test", user);
		
	}

@SessionAttrbutes

@SessionAttrbutes注解的作用是将数据放到session域中,用来实现数据共享。在类上加上该注解,然后指定要加入session域中的键名,然后再通过Map就可以加入到session域中了。

@SessionAttributes(value = {"sessiontest"})
	@RequestMapping(value = "/sessionTest",method = RequestMethod.GET)
	public String sessionTest(Map<String,String> map) {
		map.put("sessiontest", "sessionTest");
		return "success";
	}
	@RequestMapping(value = "/sessionTest2",method = RequestMethod.GET)
	public String sessionTest2(HttpServletRequest req) {
		Object string = req.getSession().getAttribute("sessiontest");
		System.out.println(string);
		return "session";
	}


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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值