设置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";
}