SpringMVC學習2——SpringMVC與jsp的參數傳遞和返回值響應
解決提交亂碼的問題:
在web.xml中加入過濾器:
<!-- 解決post亂碼問題 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 設置編碼參是UTF8 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
參數傳遞
獲取get請求中的參數
@RequestMapping("/addUser1")
public String addUser1(String username,String password) {
System.out.println("username is:"+username);
System.out.println("password is:"+password);
return "demo/index";
}
// 可以用@RequestParam("password")來進行參數名的轉換
public String addUser1(String username, @RequestParam("password") String psw) {...}
// 設定參數必傳和默認值
public String addUser1(String username, @RequestParam(value="password",required=true, defaultValue="123") String psw) {...}
通過HttpServletRequest接收
@RequestMapping("/addUser2")
public String addUser2(HttpServletRequest request) {
String username=request.getParameter("username");
String password=request.getParameter("password");
System.out.println("username is:"+username);
System.out.println("password is:"+password);
return "demo/index";
}
注意:post方式和get方式都可以, 但不能接收json, post方式的時候編碼方式需設置爲:x-www-form-urlencoded轉換爲鍵值對
通過一個bean來接收
@RequestMapping("/doLogin")
public User doLogin(User u) {
logger.info("name: " + u.getName());
logger.info("pswd: " + u.getPswd());
User user = new User();
user.setName(u.getName());
user.setPswd(u.getPswd());
return user;
}
注意: post方式和get方式都可以,同時,也可以接受json數據
使用Map接收json
@RequestMapping("/doLogin")
public @ResponseBody User doLogin(@RequestBody Map<String, String> u) {
logger.info("name: " + u.get("name"));
logger.info("pswd: " + u.get("pswd"));
User user = new User();
user.setName(u.get("name"));
user.setPswd(u.get("pswd"));
return user;
}
返回值響應
返回值響應有三種:
1、返回ModelAndView 2、返回void 但是用request和response進行額外處理 3、返回string
這裏主要看下2、3
返回void 但是用request和response進行額外處理
@RequestMapping("queryVoid")
public void queryVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
// request響應用戶請求
// request.setAttribute("msg", "這個是request響應的消息");
// request.getRequestDispatcher("/WEB-INF/jsp/msg.jsp").forward(request,
// response);
// response響應用戶請求
// response.sendRedirect("itemList.action");
// 設置響應的字符編碼
// response.setContentType("text/html;charset=utf-8");
}
注意:request 做跳轉可以帶入參數,response做跳轉無法帶入參數
返回string
@RequestMapping("item/{id}")
public String itemQuery(@PathVariable("id") Integer ids,Model model) {
...
return "forward:itemList:action";
}
通過前綴forward,redirect 進行尋址,相當於requst的請求轉發和response請求重定向。也可以直接寫頁面id