1、跳转、重定向
在任何Web项目中跳转和重定向是必须的,在Servlet中,跳转的方式(1)可以通过客户端跳转 response.sendRedirect("jspPath") 但是这种跳转只能传递session范围的属性,无法传递request范围属性,(2)执行服务端跳转(地址栏不发生变化)必须依靠 RequestDispatcher 接口完成,需要通过forward (后台)或者include(页面)来完成跳转。
在SpringMVC中,Controller中的Action我自己常用的有两种返回值ModelAndView和String。ModelAndView是SpringMVC封装的一个展示对象和视图的一个类(注释中提到的:Represents a model and view returned by a handler, to be resolved by a DispatcherServlet.)
1.1、ModelAndView
在返回ModelAndView的时候,通过setViewName(String viewName) 来设置展示需要绑定的jsp页面。
如果在处理过程中,根据业务逻辑的处理过程需要跳转到其他Action,也直接调用setViewName(String viewName)即可,但是这时候的viewName是有格式要求的要以 "redirect:" 开头,如:"redirect:/list"。
1.2、String
返回String就是直接返回的字符串了。更多的时候,这种情况,返回的Json字符串。这种情况下是通过 返回类似 "redirect:/list" 这样的字符串完成跳转。
1.3、在跳转过程中的参数
a)可以直接在地址中进行拼接,但是要注意中文乱码的情况
b)还有更加优雅的方法就是通过RedirectAttributes 来设置跳转参数。
参考:
http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/
http://blog.csdn.net/liushengmeng/article/details/7985080
2、前后台的交互
Web除了要为用户提供需要数据,也需要满足用户的操作需求和用户想服务器提供的数据。在Servlet和Jsp中可以完成数据传递的对象有(application、session、request、page)最常用的是session、request。Jsp向Servlet发送操作和数据主要通过 Form 表单和Url地址参数(主要方式有POST,GET)。
在SpringMVC中,Action向Jsp中传递数据的方式直接 addObject(String attributeName, Object attributeValue) 完成数据数据的传递(Jsp可以通过EL表达式获取数据),这里addObject怎么传递到Jsp呢?事后在研究一下
Jsp页面中操作数据传递到Action中,可以通过路径/path1/param1这种方式,通过@PathVariable("varName")指定Action中和路径中对应的参数,也可以传递对象(Spring会自动绑定)页面Form中的那么属性要和对象中的一致,如果是组合对象,需要对被包含对象的属性进行前缀指定,如 obj1.name
参考:
http://blog.csdn.net/seawaywjd/article/details/7335804
3、在开发过程中获取Request和Response
在业务处理过程中,在操作cookie等很多针对客户端的操作都需要获取这两个对象,在 SpringMVC 中获取这两个对象的方法:
a)在Controller范围添加Resquest和Response属性通过@ModelAttribute,在每次个Action属性前设置这两个对象。
注解说明:
放置在方法的形参上:表示引用Model中的数据
放置在方法上面:表示请求该类的每个Action前都会首先执行它,也可以将一些准备数据的操作放置在该方法里面。
b)添加Controller两个属性通过注解@Autowired,让Spring自动注入
c)通过上下文RequestContextHolder直接获取
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
HttpServletResponse response = ((ServletWebRequest)RequestContextHolder.getRequestAttributes()).getResponse();
参考:
http://blog.csdn.net/wsh900221/article/details/23428369
4、SpringMVC 静态资源的访问可以通过配置
<mvc:default-servlet-handler />