SpringMVC获取页面提交的参数以及返回提交信息测试

无参数请求测试

index.jsp

<a href="/test">无参测试</a>

text.java
添加注解@Controller

@Controller
public class TextController {
    private HttpSession session;
    private ModelMap map;
    private HttpServletRequest request;

    //无参数请求测试
    @RequestMapping("test") //指定处理请求的地址
    public String abc(){
        System.out.println("abc执行");

        //转发路径
        //http://localhost:8080/项目/路径/show.jsp
        return "show";
    }
 }

有参数请求测试

基本数据类型和String测试
index.jsp

<a href="/test1?uname=abc&age=18">有参测试</a>

text.java
参数名=控件名
类的上面添加注解@Controller

 @RequestMapping("test1")
    public String test1(String uname,int age){
        System.out.println("uname:"+uname);
        System.out.println("age:"+age);

        //转发路径
        //http://localhost:8080/项目/路径/show.jsp
        return "show";
    }

对象参数测试
index.jsp

<form method="post" action="/test2">
    用户名<input type="text" name="username" /><br>
    age<input type="text" name="age" /><br>
    sex<input type="radio" name="sex" value="男">男<br>
        <input type="radio" name="sex" value="女">女<<br>
    like
    <input type="checkbox" name="love" value="打篮球" >打篮球
    <input type="checkbox" name="love" value="足球" >足球
    <input type="checkbox" name="love" value="音乐" >音乐
    <input type="checkbox" name="love" value="打游戏" >打游戏

    地址
    <select name="address">
        <option>北京</option>
        <option>上海</option>
    </select>
  
<input type="submit" value="注册">


</form>

test.java

 //对象参数测试
    @RequestMapping("test2")
    public String test1(Users users){
        //传递参数会发生编码问题,解决方式一种为配置web.xml文件
        System.out.println(users.getUsername());
        System.out.println(Arrays.toString(users.getLove()));
        System.out.println(users.getSex());
        System.out.println(users.getAddress());
        System.out.println(users.getBirthday());

        return "show";

    }

对象参数返回到页面测试

  1. request方式:request.setAttribute(“u2”,users);
  2. ModelMap方式:map.put(“u2”,users);
  3. ModelAndView
    index.jsp
    1和2方式
<form method="post" action="/test3">
    用户名<input type="text" name="username" /><br>
    age<input type="text" name="age" /><br>
    sex<input type="radio" name="sex" value="男">男<br>
        <input type="radio" name="sex" value="女">女<<br>
    like
    <input type="checkbox" name="love" value="打篮球" >打篮球
    <input type="checkbox" name="love" value="足球" >足球
    <input type="checkbox" name="love" value="音乐" >音乐
    <input type="checkbox" name="love" value="打游戏" >打游戏

    地址
    <select name="address">
        <option>北京</option>
        <option>上海</option>
    </select>
  
<input type="submit" value="注册">


</form>

test.java

@RequestMapping("test3")
    public String test2(Users users, HttpServletRequest request, ModelMap map){
        //传递参数会发生编码问题,解决方式为配置web.xml文件
        System.out.println(users.getUsername());
        System.out.println(Arrays.toString(users.getLove()));
        System.out.println(users.getSex());
        System.out.println(users.getAddress());
        System.out.println(users.getBirthday());
        //request.setAttribute("u2",users);
        map.put("u2",users);
        return "show";
    }

show.jsp

<body>
    <h1>show.jsp</h1>
    <h1>姓名:${u2.username}</h1>
    <h1>age:${u2.age}</h1>
    <h1>address:${u2.address}</h1>
    <h1>生日:${u2.birthday}</h1>
</body>

3方式
test.java

@RequestMapping( value="/test3")
    public ModelAndView test3(Users users){
        ModelAndView m=new ModelAndView();
        m.setViewName("show");
        m.addObject("u2",users);
        return m;
    }

页面无参数名,传递参数测试

test.java
@PathVariable注解

//页面无参数名,传递参数测试
    @RequestMapping("test5/{a}/{b}")
    public String test5(@PathVariable("a") String name,@PathVariable("b") int age){
        System.out.println(name+"..........."+age);
        return "show";
    }

此时的传递参数的格式为 test5/“哈哈”/4

<think>首先,用户的问题是:"我想了解如何在SpringMVC中拦截GET请求并进行相应配置"。我需要基于提供的系统级指令和引用[^1],[^2],[^3]来回答。系统级指令要求:-行内数学表达式用`$...$`,但问题中没有数学内容,所以可能不需要。-独立公式用`$$...$$`,但这里可能没有。-LaTeX语法正确。-使用中文回答。-生成相关问题。-引用的段落末尾添加引用标识。用户提供了引用:-[^1]:SpringMVC拦截器基本概念和实现接口。-[^2]:示例代码和场景。-[^3]:关于参数处理的说明。用户说:"上述引用仅供参考,并不是用户真正的需求",我需要参考用户上一次的问题和我的回答。在上一次对话中,用户是系统在测试指令,这次是新的用户问题。对话历史显示之前的对话是系统级指令的测试,现在是具体问题。用户上一次的问题是我的系统级指令设置,没有之前的用户历史。所以,我应该直接回应这个新问题。关键点:用户想了解如何在SpringMVC中拦截GET请求并进行配置。基于引用[^1]:-实现`HandlerInterceptor`接口或继承`HandlerInterceptorAdapter`来创建自定义拦截器。-拦截器可以拦截控制器方法的执行。引用[^2]和[^3]提供代码示例,展示了控制器方法和参数处理。要拦截特定HTTP方法,如GET请求,我需要在配置中指定。在SpringMVC中,拦截器可以应用到所有请求或基于路径匹配。要针对GET方法,可以在拦截器实现中添加条件检查。步骤:1.**创建自定义拦截器**:-实现`HandlerInterceptor`接口,覆盖其方法:`preHandle`,`postHandle`,`afterCompletion`。-例如,在`preHandle`中检查请求方法是否为GET。2.**配置拦截器**:-在Spring配置文件中,添加拦截器到`InterceptorRegistry`。-使用`.addPathPatterns()`指定拦截路径;使用`.excludePathPatterns()`排除路径。如果要只拦截GET,可能需要在拦截器内部处理。由于HTTP方法不是直接通过路径配置的,通常是在拦截器内部检查请求方法。一个常见做法:-在自定义拦截器的`preHandle`方法中,使用`HttpServletRequest`获取方法。-例如:```java@OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler){Stringmethod=request.getMethod();if("GET".equalsIgnoreCase(method)){//只处理GET请求的逻辑System.out.println("InterceptingGETrequest");//可能修改参数等}returntrue;//继续处理请求}```在配置文件中添加拦截器:-例如,使用Java配置:```java@Configuration@EnableWebMvcpublicclassWebConfigimplementsWebMvcConfigurer{@OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){registry.addInterceptor(newMyCustomInterceptor()).addPathPatterns("/**");//应用到所有路径}}```参考引用[^2]中的控制器示例,可以展示如何结合。现在,构建回答:-**结构清晰**:分步骤解释。-**使用中文**。-**生成相关问题**:在末尾添加。-**添加引用标识**:如果引用段落,在末尾添加[^1],[^2],[^3]。引用段落:-我在回答中需要自然地引用这些引用。用户说引用的段落末尾添加标识。-例如,描述实现拦截器时,提到引用[^1]。-描述参数修改时,提到引用[^2]或[^3]。用户需求是拦截GET请求,引用[^3]提到"SpringMVC拦截所有Controller请求,实现自定义参数...",所以很相关。回答大纲:1.**介绍**:简要说明如何拦截GET请求。2.**步骤**:a.创建自定义拦截器。b.在拦截器中检查GET方法。c.配置拦截器。3.**代码示例**:提供简化的Java代码。4.**注意事项**:比如只拦截GET的情况。5.**生成相关问题**:在末尾列出。确保LaTeX语法正确,但问题中没有数学内容,所以可能省略。最终回答以中文写。相关问题:-如系统指令示例:"§§相关问题§§",然后列出。-例如:-如何在拦截器中处理GET请求的参数?-如何配置仅拦截特定路径的GET请求?-什么是HandlerInterceptor的最佳实践?</think> ### 如何在SpringMVC中拦截GET请求并进行配置 在SpringMVC中拦截GET请求的核心方法是实现自定义拦截器,并在配置中指定拦截逻辑。这主要依赖于`HandlerInterceptor`接口或`HandlerInterceptorAdapter`抽象类(推荐使用接口),通过覆盖其中的方法来检查HTTP请求方法是否为GET,并在必要时修改请求参数或处理逻辑。以下是详细的逐步配置方法(基于Spring Framework的现代版本,使用Java配置或XML配置均可)。 --- #### 步骤1: 创建自定义拦截器 你需要创建一个实现了`HandlerInterceptor`接口的类,并覆盖其`preHandle`方法。在这个方法中,通过`HttpServletRequest`对象获取请求方法(`request.getMethod()`),检查是否为"GET",然后执行自定义逻辑(如记录日志、修改参数或访问控制)。以下是示例代码: ```java import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; public class GetRequestInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 检查请求方法是否为GET if ("GET".equalsIgnoreCase(request.getMethod())) { System.out.println("拦截到GET请求: " + request.getRequestURI()); // 可选:添加自定义逻辑,例如修改请求参数或验证 // 例如,解密参数(参考引用中的示例): String queryString = request.getQueryString(); // 获取GET请求的查询参数 if (queryString != null) { // 解密逻辑(假设有自定义解密函数) // 这里是伪代码:queryString = decrypt(queryString); System.out.println("解密后参数: " + queryString); } // 如果需要修改请求对象,可使用包装器(如HttpServletRequestWrapper) } return true; // 返回true以继续处理请求;返回false会中断请求 } // 可选:覆盖postHandle或afterCompletion方法(非必需) } ``` 在这个示例中,`preHandle`方法会在控制器执行前被调用,并只针对GET请求生效。引用中提到的参数解密功能(如引用[^2]和[^3])可以集成到此逻辑中,通过修改请求参数来实现自定义处理[^1][^2][^3]。 --- #### 步骤2: 配置拦截器 在Spring配置中,需要将自定义拦截器添加到InterceptorRegistry中。你可以使用Java配置(推荐)或XML配置。以下示例展示基于Java配置的方法(在Spring Boot或Spring MVC中均可使用): ```java import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new GetRequestInterceptor()) // 注册自定义拦截器实例 .addPathPatterns("/**") // 拦截所有路径的请求 .excludePathPatterns("/api/public/**"); // 可选:排除特定路径,如公开API } } ``` - **addPathPatterns("/**")**: 表示拦截所有请求路径。如果需要只拦截特定URL(如`/user/**`),可以修改此参数。 - **excludePathPatterns**: 用于排除不需要拦截的路径(如公开资源)。 - 在这种配置下,拦截器会应用到所有HTTP方法,但自定义逻辑只在GET请求中触发(因为我们在`preHandle`中做了过滤)。 对于XML配置(适用于旧版本Spring): ```xml <mvc:interceptors> <bean class="com.example.GetRequestInterceptor"/> <!-- 指定自定义拦截器类 --> </mvc:interceptors> ``` --- #### 注意事项 1. **修改GET请求参数**:GET请求的参数通常位于URL查询字符串中(`request.getQueryString()`)。如果需要修改,可以用包装器类(如`HttpServletRequestWrapper`)覆盖`getParameter`方法(引用[^3]提到了通过`WebDataBinderFactory`或自定义参数解析器处理)[^3]。避免直接修改request对象,因为它不是线程安全。 2. **性能考量**:拦截器适用于全局或部分拦截,但过度使用会影响性能。只针对GET请求优化逻辑(如添加缓存)。 3. **其他场景**:如果需要仅拦截GET请求而不影响其他方法,确保在`preHandle`中严格检查请求方法。引用中的示例显示,SpringMVC拦截器可以轻松扩展以处理所有controller请求[^1]。 4. **错误处理**:如果`preHandle`返回false,请求会被中断;此时可以重定向到错误页面。 基于引用,这种方法确保请求被正确拦截和处理。例如,引用[^2]中的控制器示例表明,拦截器能在控制器执行前介入修改参数[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值