写了一个Spring MVC的Demo复习一下,结果发现一直有问题,当前端页面输入用户名和密码,发到controller,但是一跳转就报404,但是controller可以进去的问题
- 登录界面代码如下
- controller部分代码
- 跳转前页面
- 跳转结果:
出现这种问题有两种情况的,
原因一(这种情况是部署项目的时候路径使用了项目名):
- 细心的话能发现,跳转前后页面的url出现了问题,跳转前有项目名,跳转后没有项目名了,根本原因在于前端页面的<form标>签提交路径action的问题,路径action="/login",这个前面加上“/”就代表从根目录跳转,根目录就会抹掉你的项目名,这样肯定找不到你实际要跳转的位置,但是如果删掉“/”同样无法跳转
- 解决方法一:在action的跳转路径把项目也补上,就是action="/项目名/login"。
- 解决方法二:这种方法比较推荐,因为之后所有的位置都可以通用
在java下创建一个util包,创建WebPathInitServlet类
代码如下:
@WebServlet(urlPatterns = {},loadOnStartup = 2)
public class WebPathInitServlet extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
//在整体应用上下文当中存储了一个ctx的值,用它来引用上下文路径.
config.getServletContext().setAttribute("ctx",config.getServletContext().getContextPath());
super.init(config);
}
}
- 然后就可以在任何可能造成路径错误的地方写成 action="${ctx}/login" 这种形式
**解决方法三:**直接删掉部署的时候的项目名
原因二(这种情况是部署项目的时候路径本来就没有使用项目名):
前端:通过链接跳转到login的controller,并且使用链接传值
controller部分
跳转结果:
依旧是路径的问题,检查自己的springMVC视图解析器
在jsp前面加上"/"即可