引用 : http://jinnianshilongnian.iteye.com/blog/1698916 java
在使用方法時Spring Web MVC框架會自動幫助咱們把相應的Servlet請求/響應(Servlet API)做爲參數傳遞過來web
在定義方法的時候能夠定義不少參數安全
public String requestOrResponse ( ServletRequest servletRequest, HttpServletRequest httpServletRequest, ServletResponse servletResponse, HttpServletResponse httpServletResponse )
public void inputOrOutBody(InputStream requestBodyIn, OutputStream responseBodyOut) throws IOException { responseBodyOut.write("success".getBytes()); }
requestBodyIn:獲取請求的內容區字節流,等價於request.getInputStream();session
responseBodyOut:獲取相應的內容區字節流,等價於response.getOutputStream()。app
public void readerOrWriteBody(Reader reader, Writer writer) throws IOException { writer.write("hello"); }
reader:獲取請求的內容區字符流,等價於request.getReader();框架
writer:獲取相應的內容區字符流,等價於response.getWriter()。spa
InputStream/OutputStream 和 Reader/Writer兩組不能同時使用,只能使用其中的一組。線程
WebRequest是Spring Web MVC提供的統一請求訪問接口,不單單能夠訪問請求相關數據(如參數區數據、請求頭數據,但訪問不到Cookie區數據),還能夠訪問會話和上下文中的數據;NativeWebRequest繼承了WebRequest,並提供訪問本地Servlet API的方法。code
public String webRequest(WebRequest webRequest, NativeWebRequest nativeWebRequest) { System.out.println(webRequest.getParameter("test"));//①獲得請求參數test的值 webRequest.setAttribute("name", "value", WebRequest.SCOPE_REQUEST);//② System.out.println(webRequest.getAttribute("name", WebRequest.SCOPE_REQUEST)); HttpServletRequest request = nativeWebRequest.getNativeRequest(HttpServletRequest.class);//③ HttpServletResponse response = nativeWebRequest.getNativeResponse(HttpServletResponse.class); return "success"; }
① webRequest.getParameter:訪問請求參數區的數據,能夠經過getHeader()訪問請求頭數據;orm
② webRequest.setAttribute/getAttribute:到指定的做用範圍內取/放屬性數據,Servlet定義的三個做用範圍分別使用以下常量表明:
SCOPE_REQUEST :表明請求做用範圍;
SCOPE_SESSION :表明會話做用範圍;
SCOPE_GLOBAL_SESSION :表明全局會話做用範圍,即ServletContext上下文做用範圍。
③ nativeWebRequest.getNativeRequest/nativeWebRequest.getNativeResponse:獲得本地的Servlet API。
public String session(HttpSession session) { System.out.println(session); return "success"; }
此處的session永遠不爲null。
注意:session訪問不是線程安全的,若是須要線程安全,須要設置AnnotationMethodHandlerAdapter或RequestMappingHandlerAdapter的synchronizeOnSession屬性爲true,便可線程安全的訪問session。
Spring Web MVC可以自動將請求參數綁定到功能處理方法的命令/表單對象上。
相似於status2和bean
@RequestMapping(value = "/commandObject", method = RequestMethod.GET) public String toCreateUser(HttpServletRequest request, UserModel user) { return "customer/create"; } @RequestMapping(value = "/commandObject", method = RequestMethod.POST) public String createUser(HttpServletRequest request, UserModel user) { System.out.println(user); return "success"; }
若是提交的表單(包含username和password文本域),將自動將請求參數綁定到命令對象user中去。
@RequestMapping(value = "/test") public ModelAndView test() { ModelAndView mv = new ModelAndView("success"); mv.addObject("a", "update"); return mv; }
在頁面取值${a} 可取得update