日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

SpringMVC(二)——转发和重定向、处理前端请求的数据(普通字符串/对象)

發布時間:2025/3/13 HTML 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringMVC(二)——转发和重定向、处理前端请求的数据(普通字符串/对象) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1. 轉發和重定向
  • 2. 處理前端請求的數據
    • 2.1 普通字符串
    • 2.2 對象

1. 轉發和重定向

轉發:url不會發生變化 (查詢前端固定模板的數據)

@RequestMapping("/hello1")public String hello1(Model model){model.addAttribute("msg","Spring01");return "hello"; //普通返回}

重定向:url會發生變化 (登錄業務時,跳轉頁面)

@RequestMapping("/hello2")public String hello2(Model model){model.addAttribute("msg","Spring02");return "redirect:/index.jsp";}

2. 處理前端請求的數據

2.1 普通字符串

@Controller @RequestMapping("/user") public class HelloController {//處理前端請求的數據:普通字符串@RequestMapping("receive1")public String receive(String name,String password,Model model){System.out.println("接收到了name=>"+name+" pwd:"+password);String str="name:"+name+"pwd:"+password;model.addAttribute("msg",str);return "hello";} }

點擊啟動測試:在前端輸出用戶名和密碼

如果輸入中文出現亂碼,可以在web.xml文件中添加一個亂碼過濾器

如在index.jsp頁面內創建一個表單

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html><head><title>$Title$</title></head><body><form action="/login" method="post"><p>用戶名:<input type="text" name="username"></p><p>密碼:<input type="password" name="password"></p><input type="submit"></form></body> </html>

在控制層controller目錄下創建LoginController類

package com.zz.controller;import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class LoginController {@RequestMapping("/login")public String login(String username, String password, Model model){System.out.println("接收到了name=>"+username+" pwd:"+password);model.addAttribute("msg",username);return "hello";} }

點擊啟動測試:輸入中文名,提交表單

出現亂碼現象:

解決辦法:在web.xml中添加一個亂碼過濾器

<!--SpringMVC 給我們提供了一個亂碼過濾器--><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><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

重啟測試后,發現不出現亂碼現象

有些極端情況下,SpringMVC 給我們提供的亂碼過濾器還不能解決亂碼問題,這時可以自定義一個過濾器

package com.zz.filter;import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Map;/*** 解決get和post請求 全部亂碼的過濾器*/ public class GenericEncodingFilter implements Filter {public void destroy() {}public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {//處理response的字符編碼HttpServletResponse myResponse=(HttpServletResponse) response;myResponse.setContentType("text/html;charset=UTF-8");// 轉型為與協議相關對象HttpServletRequest httpServletRequest = (HttpServletRequest) request;// 對request包裝增強HttpServletRequest myrequest = new MyRequest(httpServletRequest);chain.doFilter(myrequest, response);}public void init(FilterConfig filterConfig) throws ServletException {}}//自定義request對象,HttpServletRequest的包裝類 class MyRequest extends HttpServletRequestWrapper {private HttpServletRequest request;//是否編碼的標記private boolean hasEncode;//定義一個可以傳入HttpServletRequest對象的構造函數,以便對其進行裝飾public MyRequest(HttpServletRequest request) {super(request);// super必須寫this.request = request;}// 對需要增強方法 進行覆蓋@Overridepublic Map getParameterMap() {// 先獲得請求方式String method = request.getMethod();if (method.equalsIgnoreCase("post")) {// post請求try {// 處理post亂碼request.setCharacterEncoding("utf-8");return request.getParameterMap();} catch (UnsupportedEncodingException e) {e.printStackTrace();}} else if (method.equalsIgnoreCase("get")) {// get請求Map<String, String[]> parameterMap = request.getParameterMap();if (!hasEncode) { // 確保get手動編碼邏輯只運行一次for (String parameterName : parameterMap.keySet()) {String[] values = parameterMap.get(parameterName);if (values != null) {for (int i = 0; i < values.length; i++) {try {// 處理get亂碼values[i] = new String(values[i].getBytes("ISO-8859-1"), "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}}hasEncode = true;}return parameterMap;}return super.getParameterMap();}//取一個值@Overridepublic String getParameter(String name) {Map<String, String[]> parameterMap = getParameterMap();String[] values = parameterMap.get(name);if (values == null) {return null;}return values[0]; // 取回參數的第一個值}//取所有值@Overridepublic String[] getParameterValues(String name) {Map<String, String[]> parameterMap = getParameterMap();String[] values = parameterMap.get(name);return values;} }

然后,只需要在web.xml中,在此處改為自定義過濾器的目錄位置即可!

如果前端表單內的屬性名和控制層不一致,如表單中用戶名為user, 而控制層是username,測試運行后結果如下:

發現name的值為null,為了解決這個問題,可在控制層方法的參數前增加注解@RequestParam(“user”)

@RequestMapping("/login")public String login(@RequestParam("user") String username, String password, Model model){System.out.println("接收到了name=>"+username+" pwd:"+password);model.addAttribute("msg",username);return "hello";}

再次測試結果:

2.2 對象

如果我們接收到了一個對象,只要保證,前端傳遞參數名和我們對象的屬性一致即可!

先創建一個user類:

package com.zz.pojo;import lombok.Data;@Data public class User {private int id;private String name;private String pwd; } @RequestMapping("/login2")public String login(User user, Model model){model.addAttribute("msg",user.getId());System.out.println(user.getName());System.out.println(user.getPwd());return "hello";}

再在控制層controller目錄下的LoginController類內編寫

@RequestMapping("/login2")public String login(User user, Model model){model.addAttribute("msg",user.getId());System.out.println(user.getName());System.out.println(user.getPwd());return "hello"; }

啟動測試:在頁面內顯示id,在控制臺顯示name和pwd

總結

以上是生活随笔為你收集整理的SpringMVC(二)——转发和重定向、处理前端请求的数据(普通字符串/对象)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。