【2019年4月27日】 idea中有关struts2的启动常遇到的错误和解决方法
idea中使用Struts2还是又很多坑的
1.新建项目坑
不是在java中新建web
在java enterprise中新建java web项目
选择下载 struts的最新依赖包 【2.5.14】系统自动下载
开始下载
2.项目部署之坑
这是最新,且最小的struts2的依赖包
问题:struts2 2.5中已经不存在ng了
解决方法:删除ng
3.运行之坑
使用tomcat8启动,
坑一:
ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
其实这个问题到不是太大,关键的问题不在他,仔细看:
坑二:
org.apache.catalina.startup.HostConfig.deployDescriptor Deploying configuration descriptor [C:\Users\jimiy\.IntelliJIdea2018.3\system\tomcat\Tomcat_8_5_31_AllModule_3\conf\Catalina\localhost\web.xml]
27-Apr-2019 20:33:21.756 严重 [localhost-startStop-1] org.apache.tomcat.util.digester.Digester.fatalError Parse Fatal Error at line 1 column 1: 文件提前结束。
因为这个错误,也许你要找很多解决方案,却找不到原因所在,继续看,下面或许更严重的错误,
坑三:
Caused by: java.lang.IllegalArgumentException: Javassist library is missing in classpath! Please add missed dependency!
这明显是缺少javasisit包,于是包下载放进去,
4.解决之坑
这样还不行,得添加到project structor中
这样就将jar包添加进去了
启动
好了!
虽然启动了,但是还是会有下面的错误:
27-Apr-2019 20:44:18.012 严重 [localhost-startStop-1] org.apache.tomcat.util.digester.Digester.fatalError Parse Fatal Error at line 1 column 1: 文件提前结束。
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 文件提前结束。
解决:
更改tomcat9可解决
使用tomcat9 又会遇到乱码
在idea中添加 -Dfile.encoding=UTF-8
如果还是不行,在idea启动时候添加 -Dfile.encoding=UTF-8
如果使用struts2的其他版本,比如2.3.4
依赖包如上,
web.xml中为旧版本
struts2动态方法调用
在动态方法调用时,方式之一就是通过在浏览器地址栏中输入 ! 加不同的方法名来访问不同的方法,如果使用的是 idea 编辑器,访问路径就应该是这样的,如
也就是说,在我们配置的访问路径之后加上配置文件中配置的相应的值
特别注意:不管是不是用了动态方法调用,在路径的最后都别再加斜杠了
idea 使用struts2出现struts-default显红的解决办法
还可以解决result中返回jsp路径显示红色的问题!
struts2.5中使用通配符出错,如何解决?
Web项目的WEB-INF目录使用说明以及重定向与转发
总结一下:
WEB-INF下面的内容都是只能由服务器级别才能访问,客户端并不能访问。
什么是客户端级别?什么是服务器级别呢?
转发:就是服务器级别,浏览器的地址不会变,因为,客户端发送一个请求,服务器受理之后,发现要请求内容还要再去别的请求,那么转发就是服务器自己去处理完成。不麻烦客户端(浏览器)了,所以客户端上面的地址栏不会改变。
重定向:就是客户端级别的。服务器收到请求后,发现还要去请求别的内容,但是服务器自己不想处理,那么就告诉客户端,你自己去处理吧,那么客户端就去请求那个别的内容了。所以客户端(浏览器)地址栏就会改变了。
在web项目中,为了安全,可能需要把jsp文件放在WEB-INF目录下,这样如果我们的页面中出现超链接a标签或者js的location.href去直接转向到WEB-INF下的某一个jsp页面,那么就会引用不到,因为这样的请求方式是客户端的请求,而WEB-INF页面只对服务端开放,对客户端是不可见的。这时候我们可以使用action,来进行转向,我们先去请求一个action,然后由这个action分发到这个WEB-INF下的页面就可以了。我们可以自己定义一个类似struts1的DispatcherAction的一个action来分发页面。
由于WEB-INF下对客户端是不可见的,所以相关的资源文件,如css,javascript和图片等资源文件不能放在WEB-INF下,那么如何从WEB-INF下引用非WEB-INF下的文件,以及js,html的frame的框架如何去访问WEB-INF下的jsp呢?
WEB-INF页面中的注意事项进行说明:
把页面资源文件只能放在WebContent目录内,,如 CSS,JS,image等.不能放在WEB-INF下,因为WEB-INF是对客户端隐藏的,所以放在WEB-INF下会造成页面的布局等文件引用不到的情况。
页面文件一般放在WEB-INF目录下面,这样可以限制访问,提高安全性.如JSP,html文件,放在WEB-INF目录下就可以避免客户端直接在地址栏上输入路径进行访问了。基于不同的功能 ,把JSP 放置在WEB-INF下的不同的目录中。
只能用转向方式来访问WEB-INF目录下的JSP,不用采用重定向的方式请求该目录里面的任何资源。
4.转向方式:
4.1、请求转发:
如struts.xml文件中配置<result name ="goMain2">WEB-INF/main/main2.jsp</result >
或在Action中写
request.getRequestDispatcher("/WEB-INF/main/main2.jsp").forward(request, response);
的方式都是服务器读取了该页面内容,并发送到客户端的,客户端的地址不变,然后内容跳转了。这样的方式是可以访问到WEB-INF目录下的jsp文件的。
4.2、重定向方式:
如struts.xml文件中配置<result name ="goMain2" type="redirect">WEB-INF/main/main2.jsp</result >
或在action中
response.sendRedirect("WEB-INF/main/main2.jsp ");
都属于重定向的方式,重定向的含义就是服务器把地址发给客户端,让客户端去访问,这样还是在客户端访问的WEB-INF目录,所以是无法访问到WEB-INF目录下的jsp文件的。
struts2.5坑真的很多!
这样就不会有问题了,
好了,今天就讲到这里!
- 本文标签: Java Spring
- 本文链接: http://www.unknowtime.top/article/115
- 版权声明: 本文由仓颉大哥原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权