您的位置:首页 > 编程语言 > Java开发

SSH网站开发遇到的问题汇总SpringMVC+Spring+Hibernate

2016-11-18 10:26 260 查看
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)不做任何处理可以正常显示在前端。但是前台日期字符串保存到后台时如果不做转换会出错:

(前台与后台实体类之间日期转换处理的问题了)如下:






这种错误百度一下就是前台传入后台的数据格式不匹配

如何化解这中问题呢:

方法一:实体类中加日期格式化注解

@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date date;//新闻发布日期
如上,在对应的属性上,加上指定日期格式的注解,本人亲自测试过,轻松解决问题!
其实还有其他方法,不过上面的方法是最简单的。其它请参考http://blog.csdn.net/chenleixing/article/details/45190371

问题三 文件上传不成功问题(用Servlet3及其更高版本的内置支持上传文件)

在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")的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: