SpringMVC + spring + hibernate问题:
问题一:项目运行第一次显示的界面如何设置:
如果设置首次显示的界面在WEB-INF下面
首先把webApp 或者WebContent下的jsp,html文件删除,不然貌似会默认进入
然后进行如下设置
方式一:
设置: web.xml中设置 <url-pattern>/</url-pattern>如下图改为/
(不懂的请看下面/*和/的区别)
<url-pattern>/</url-pattern> 会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url,不会进入spring的DispatcherServlet类 <url-pattern>/*</url-pattern>会匹配所有url:路径型的和后缀型的url(包括/login,*.jsp,*.js和*.html等),导致进入spring的DispatcherServlet类,然后去寻找controller,
然后在web.xml里面设置<welcome-file>
方式二:设置 <url-pattern>/</url-pattern>或者设置<url-pattern>/*</url-pattern>(但是/*这种方式我玩不转啊,遇到各种问题,可能是我对这种方式理解不透彻吧,日了狗了)
然后设置<mvc:view-controller path
1.
<!-- 如果当前请求为“/”时,返回index视图(交给相应的视图解析器直接解析为视图)” --> <mvc:view-controller path="/" view-name="/index"/>
2.重定向 使用redirect:
<mvc:view-controller path="/" view-name="redirect:/admin/index"/>
即如果当前路径是/ 则重定向到/admin/index
3.转发 使用 forward:
<mvc:view-controller path="/" view-name="forward:/first"/> 转发过程需要进入Controller,由controller 根据判断转发的路径
关于使用转发的形式使用
设置web.xml<url-pattern>/</url-pattern> 上面提到了
转发是需要进入controller的
如图你的controller需要这样
或者:上面的配置文件会自动加上后缀.jsp,下面这种形式需要手动加上.jsp并且加上redirect:加上/(redirect:/manager_login.jsp)
运行跳转到manager_login.jsp界面了并且可以看到控制台打印的信息:证明这种方式进入了controller
有同学设置后运行出现了下面的界面:(红框里面是中文乱码了,因为你配置的使用使用了中文的符号)
将中文符号的部分该为英文就行了
问题二:SpringMVC日期转换问题:
后台日期(java.util.Date)不做任何处理可以正常显示在前端。但是前台日期字符串保存到后台时如果不做转换会出错:
(前台与后台实体类之间日期转换处理的问题了)如下:
这种错误百度一下就是前台传入后台的数据格式不匹配
如何化解这中问题呢:
在Spring MVC中处理文件上传有两种方法
1.用Commons FileUpload组件上传组件,需要导入两个jar包
2.用Servlet3及其更高版本的内置支持上传文件
下面是我使用第二种方法时遇到的问题(如果是使用第一种方法遇到了问题,请移步)
需要注意的问题:把下面这两个配置文件弄好springmvc.xm中配置:这个一般都会配置
2.web.xml配置。这个是经常忘记的。注意:这里经常有人忘记配置。在ssh开发中这里是必须要配置的。
问题四:
he request sent by the client was syntactically incorrect.
1、 前台提交form,tomcat返回 http status 400 The request sent by the client was syntactically incorrect,控制台无任何错误输出。
这是因为前台form表单中的某些参数 和 后台接受的参数类型不一致导致的。即参数名称相同,但是类型不一致。spring mvc在绑定参数的时候出现异常,所以返回400错误。但是坑爹的地方在于,这个异常会被spring mvc吃掉,不会显示在控制台中。
解决办法:检查form表单中的参数和后台的参数对应,看是否有参数名相同但是类型不一致的情况。或者把当前日志设为debug 级别,然后在日志中即可看到spring 抛出的异常信息,即可发现哪个参数出现了错误。
如果名称参数都是匹配的,请检查比如日期没有限定格式(即:上面的问题二)问题五:实体类Id在前台界面找不到
在定义实体类的时候经常会定义一个id属性。但是在前台使用springmvc时 显示实体类id信息的时候,经常会报找不到id,或者报这一行出错。具体原因不清楚,这里有一种处理方式:在定义实体类id的属性名的时候不要直接使用Id或id或者ID。这种在前台会查找不到。可以使用其它形式比如:studentid或者sid。
问题六:Hibernate验证器报错
The type javax.validation.Payload cannot be resolved. It is indirectly referenced from required .cla
我在使用hibernate验证器的时候 出现了这种情况,具体原因是少了导入一个验证器的jar包。一共4个。
问题七:hibernate验证器的使用问题
2016.12.12补充:这个问题主要是因为我对Hibernate验证器的工作原理没搞清楚,具体请看我的另外一篇博客SSH网站实录(6)登录模块添加验证器进行表单验证
问题主要出在控制器上:如下这样写
运行报错:
如果把红色框model的位置挪到最后。运行就正常了如下:(请大神解读一下为什么,我暂时还很迷惑,可能是我理解不够深刻吧)
问题八:项目重新部署图片文件丢失显示不出来
参考:
遇到的问题:发现上传的图片在改动eclipse上的代码的时候,也就是重新部署后,tomcat下的webapps中的工程目录下的图片全部没有了,很奇怪,经过研究发现,原因如下:
我们在Java代码中上传图片时,图片的路径是通过代码
request.getSession().getServletContext().getRealPath("/img")
来获取路径的,而这句代码返回的路径是tomcat中webapps目录下的工程路径,图片就直接保存到了tomcat中。
当我们重新发布工程的时候,tomcat其实是先将原来的工程删掉,然后再将改动过的新的工程放上去。而改动过的新的工程师来自与我们eclipse的工作空间中的工程,这就也难怪了,因为我们是把图片直接上传到的tomcat服务器下,而不是放到工作空间的工程目录下,自然重新部署后图片就没了。
解决办法:
归根到底的原因就是因为
request.getSession().getServletContext().getRealPath("/img")
这句代码搞的鬼,所以在调试时,我们在Java代码中保存上传的图片位置时将图片的保存路径应该保存在eclipse工作空间的目录下,如:
String path = "E:\\program\\eclipse project\\Server\\WebContent\\img";
这样,图片在上传到该工作空间后,因为项目发生了改变,eclipse会再次发布工程,这时图片便会同步到tomcat服务器中,这时,我们前端jsp页面也就可以通过URL定位到图片了。
注意的地方:
归根到底这些问题其实还是因为我们是在调试的工程中,发布后肯定是不会出现这些问题的。因为你想想我们的web工程一般是发布到Linux下,发布了之后你的tomcat服务器只有关闭和打开,而不会对工程重新部署,自然也就不会出现这些问题。然后这也同时出现了另外一个问题,就是我们的web系统是在Linux下,也不会有eclipse环境,那也就更不用谈什么工作空间了,所以如果在代码中String path = "E:\\program\\eclipse project\\Server\\WebContent\\img";这么写系统肯定会报错咯。所以最终来说,改成这样也只是权宜之计,方便我们在调试的时候用的,到项目正式发布的时候需要我们再将路径改成request.getSession().getServletContext().getRealPath("/img")的。