SSM框架搭建遇见的问题
- 页面访问不到controller里的URL
Request method ‘POST’ not supported
controller中新增一个方法,并为其设置URL,但页面始终无脑的不能访问到,带参数时不可以访问到,不带参数可以访问到
解决:新建方法后,添加@RequestMapping(value = “save”,method = RequestMethod.POST)注解,需要跟上一个方法间隔一行,它就能读到,然后把换行删掉后,依然能访问到,这么无脑的问题。。。
原因:采用springMVC断点执行,查出当后台采用实体作为接收值时,参数的值类型弄错了,但MVC没有正确报出错误
最终解决:
第一步:查看PageNotFound是否存在对应的类(这一步其实一出现我就查看是没有的),怎么验证它是否存在呢?很简单:在代码中输入它看是否有对应的引用包。
第二步:第一步最直接的入口失败,于是想到了SpringMVC的核心Servlet:DispatcherServlet, 而它的核心方法则是:doDispatch,于是在方法中进行断点调试找到出错原因。经过调试后,终于发现问题所在,发现在解析json是实体的属性出错,如下图:
2、找不到文件
java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory
java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory
解决:在pom.xml文件中添加依赖
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
3、springmvc添加拦截器后,java.lang.StackOverflowError
java.net.PlainSocketImpl.getInetAddress(PlainSocketImpl.java:106)
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
request.setCharacterEncoding(“utf-8”);
if(request.getSession() == null ||request.getSession().getAttribute(“user”) == null){
System.out.println(“执行到了拦截器方法”);
request.getRequestDispatcher(“save”).forward(request,response);
return false;
}
System.out.println(“执行到了preHandle方法”);
return true;
}
原因:在拦截器preHandle方法中,未通过验证,又重新跳入到这个页面,造成死循环
解决方案:将页面跳转换成login页面