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

    xiaoxiao2021-08-16  136

    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")的。

    转载请注明原文地址: https://ju.6miu.com/read-676461.html

    最新回复(0)