Spring MVC点击提交无法跳转目标JSP页面问题咨询
解决Spring MVC提交按钮无法跳转至目标页面的问题
兄弟,我之前也踩过Spring MVC跳转的坑,结合你描述的情况,咱们一步步来排查和解决:
核心问题分析
你遇到的跳转失败+修改action后出异常,大概率是请求映射不匹配或者路径/配置错误导致的,咱们从最常见的原因开始排查:
1. 检查Controller的请求映射是否匹配
你期望跳转至localhost:8080/input,那对应的Controller方法必须有准确的映射配置:
- 首先确认Controller类上标注了
@Controller注解,然后方法上的请求映射要和目标路径完全一致,同时请求方法要和form的method属性对应。示例代码:
@Controller public class UserController { // 如果form用POST提交,就用@PostMapping;用GET就用@GetMapping @PostMapping("/input") public String handleLogin(User user, Model model) { // 把用户输入的name传到视图 model.addAttribute("name", user.getName()); // 返回视图名,对应input.jsp(需配合视图解析器) return "input"; } }
- 你提到修改action为「inpu...」时出异常,很大概率是这个路径少打了字符(比如
/input写成/inpu),而Controller里没有对应/inpu的映射,直接触发了404或者请求找不到的异常。
2. 检查starts.jsp中form标签的配置
form的action和method是跳转成功的关键,这里容易踩相对路径的坑:
- 确保
method属性和Controller的请求方法一致(比如Controller用@PostMapping,form就要写method="post") action路径要注意绝对/相对路径的区别:- 写
action="/input"是绝对路径(相对于服务器根目录),会请求localhost:8080/input - 写
action="input"是相对路径(相对于当前页面路径/webapp/),会请求localhost:8080/webapp/input,如果Controller映射的是/input就会不匹配
- 写
- 正确的form示例:
<form action="/input" method="post"> <input type="text" name="name" /> <!-- name属性要和User类的name字段一致 --> <button type="submit">LOGIN</button> </form>
3. 检查Spring MVC视图解析器配置
要确保视图解析器能正确找到你的input.jsp文件:
- 如果是XML配置,需要在Spring配置文件中添加:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <!-- 你的jsp文件存放路径前缀 --> <property name="suffix" value=".jsp" /> <!-- 自动拼接后缀 --> </bean>
- 如果是JavaConfig配置:
@Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer { @Bean public ViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/jsp/"); resolver.setSuffix(".jsp"); return resolver; } }
- 配置后,Controller返回
"input"时,会自动定位到/WEB-INF/jsp/input.jsp,如果你的jsp放在其他目录,要修改prefix的路径。
4. 检查User模型类的正确性
Spring MVC依赖set/get方法绑定请求参数,确保你的User类写法正确:
public class User { private String name; // 必须有无参构造方法(Spring MVC默认调用) public User() {} // 正确的get/set方法,名称要规范(setName、getName) public String getName() { return name; } public void setName(String name) { this.name = name; } }
如果set/get方法名称写错,会导致参数绑定失败,可能触发500异常。
5. 查看服务器控制台的异常日志
当修改action后出现异常,一定要看Tomcat(或你使用的服务器)的控制台日志,里面会有具体错误信息:
- 404:请求路径找不到,说明action或Controller映射写错了
- 500:服务器内部错误,大概率是参数绑定失败或视图解析器配置错误
6. 直接测试目标路径
可以直接在浏览器地址栏输入localhost:8080/input(如果是GET请求的话),如果能正常显示input.jsp,说明Controller和视图解析器没问题,问题出在form的action配置上;如果不能,就重点排查Controller和视图解析器。
总结
你遇到的问题最可能的原因是:action路径拼写错误(比如你说的「inpu...」)、Controller请求映射不匹配,或者视图解析器配置错误。按照上面的步骤一步步排查,应该能快速解决问题。
内容的提问来源于stack exchange,提问作者j6wj1997
相关产品推荐
相关产品推荐

