最近接触了Struts2这个JavaWeb框架,结果被套路了,而且套路的很惨。

要学Struts2 就必然要下载Struts2的jar包,在官网上下载了最新的,没错就是这个:

这个东西真是把我快搞疯了。

然后有了这个东西就开始我的配置Struts2之旅,我没有用MyEclipse,我用的是Eclipse,我根据书上把关键的几个包放在了WEB-INF下的lib文件夹下,

然后满还期待的写了一个action和两个jsp文件,配置了web.xml的过滤器、添加了struts.xml,之后满怀信心的运行了,结果失败了。连JSP文件都加载不出来,感觉快要崩溃了,赶紧对照书中的各个部分看了又看,结果并没有发现问题,查看了Tomcat的日志文件,发现找不到一个类(NotFindClass)---org.apache.struts2.dispatcher.FilterDispather,我打开了这个Jar包就是这个,发现FilterDispather这个类并没有

我郁闷了。赶紧百度,发现从好像从Struts2 2.1之后就没有再用FilterDispather这个分发器了,而是用的上面图中的第三个类,也就是StrutsPrepareAndExecuteFilter这个累,我干煎吧web.xml中的过滤器中的内容改成百度到的org.apache.struts2.dispatcher.ng.StrutsPrepareAndExecuteFilter,运行还是出错说是找不到这个类,我打开包一看发现没有ng这个文件夹,去掉ng后变成org.apache.struts2.dispatcher.StrutsPrepareAndExecuteFilter

运行又出错误,连Tomcat是运行不起来。是找不到log4的东东。我赶紧百度查到需要这个日志的包赶紧加上

以下是我导入的所有的包

再次运行,Tomcat运行正常了,可是JSP文件还是打不开,查书,百度,google,用了很多方法才发现是Struts.xml除了问题。Struts.xml的头没有这一段话

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

加上了后果然JSP可以运行了,终于算是吧Struts2给配置好了,可以高兴了吧,结果接下来的几点让我有崩溃了

先是在通过URL执行action的方法就是这个样子:http://localhost:8080/Struts2/Login!login.action,也就是执行Login映射的Action类中的login自定义方法(只要返回String类型的函数都可以),结果很悲催的出现了404错误,怎和会找不到呢,之前运行http://localhost:8080/Struts2/Login.action都没有问题怎么这下出问题了,找不到,不应该啊,出错也是出的500服务器错误啊,检查了struts.xml中的映射,完全没有问题,赶紧又百度(百度是个好东西,也是个烂东西)。发现原来Strust2提供了一种配置,用于禁用DMI,你可以在struts.xml文件中,使用constant元素将struts.enable.DynamicMethodInvocation属性设置为true,来启动DMI。也就是在package标签上struts标签下加上这么一句

高兴的以为解决的,结果呢,被套路的完全没有问题,一遍遍的检查,甚至重新敲一边,结果都是一样的,大自然的规律果然没法避免呢(^.^),纠结了2个多小时,终于在这个网页找到了正确答案http://www.05935.com/bc/554840/

里面说的是在是用struts2 2.5版本的包的时候,出现一个很恶心的问题,就是使用动态方法的时候,报这样一个问题:This method: login for action user is not allowed!

和我的问题一样,作者果然是大牛,在看源代码的时候发现了

原来是struts2 2.5版本的安全度提高了一个台阶,所有不安全的访问都必须要在Struts.xml中声明允许,接下来的问题也是因为版本的问题

在使用通配符的时候出现了问题你就是  {1}   获取不到   *   所表示的字符,一开始我没有往版本上考虑,我一遍一遍的排查,发现是这个通配符的问题,之前并没有想到,因为出的还是404  action找不到的问题,我先不用通配符,能正确显示,使用通配符导致Action不能区别访问,

<action name="Person" method="add" class="com.struts2.action.LoginAction2">
      <result name="success">/success.jsp</result>
      <result name="logout">/error.jsp</result>
      <allowed-methods>*</allowed-methods>
      </action>

上面的不用通配符,下面的用了通配符却出错了,一边一边的改这个配置

<action name="*Person" method="{1}" class="com.struts2.action.LoginAction2">
      <result name="success">/success.jsp</result>
      <result name="logout">/error.jsp</result>
      <allowed-methods>*</allowed-methods>
      </action>

结果这个可以访问到,于是我发现问题出在了    {1}       这个符号上,最后发现这是struts2 2.5 的又一个新特性---通配符禁止使用,我想应该是这种操作虽然对于编程人员来说简化了许多操作,但是对系统来说却增加了系统的开销。所以默认禁止使用通配符,需要加入允许操作才可以

红线标记的两句话就是开启这个的秘密。终于解决了,错,struts.xml显示这两个东西是没有的,瞬间懵逼了,没有,怎么可能,又开始检查文件,发现并没有错误,又纠结了好长时间最终想到是不是还是版本的问题,看了看struts.xml

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

果然是版本的问题,赶紧改正

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">

这下没问题了,这下是完全成功了,终于从Struts2   2.5的套路中走出来了,不得不说2.5的套路太深了,我都无言以对了,但是从另一个方面来看,他禁止了许多不安全或是对系统来说负担过中的功能,这也是应该引导编程人员进步的阶梯吧,从struts2 的更新开始就是对struts2的优化开始。

新的东西出现的很快,当我们的教材还是以前的版本时,就已经跟不上了,我们需要去接触最新的东西,即使很难,这是因为新的东西和旧的东西有很大的改变,当这种差异显现的时候,头疼的就是程序员了,这是为什么错了,怎么又错了,欸,怎么对了,好奇怪。原来我接触JAVAFX2.0的时候也很头疼,因为这种GUI很新,和旧的AWT、SWING完全不是一个思想,可以说是更高层的抽象了。扯远了,以上就是我在最新的Strut2 2.5的版本上发现的新的,估计以后会发现更多,希望可以解决你们的问题。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24059599/article/details/51986761

Struts2 2.5.2的套路相关推荐

  1. struts2.5.2的套路

    被struts2.5.2套路的出现的问题 以前刚学struts2的时候,用的是书里介绍的struts2.1的版本,用起来没什么问题,但是最近想要用struts2了,就去官网上下载了一个最新的版本,是s ...

  2. 也说说家养猿类养成套路

    作为猿厂公众号的开(说)篇(说)巨(而)著(已),打算聊聊成为家养猿类的套路.家养的猿类?还有野生的不成?这里的家养是指在厂里搬砖,比如鹅厂.猫厂.猪场.狗场,夫妻店等等...野生的就不好分类了,大多 ...

  3. struts2 与 sping 整合 控制器中 service注入的问题

    以个人见解认为struts1 与spring整合的时候按照习惯,我们会把 action 控制器直接配置到sping中去: eg : 这里以使用元注解方式实现Service注入进行讲解: 控制器关键代码 ...

  4. Spring整合Struts2

    ①导入Struts2 jar包 ②在web.xml文件中创建过滤器 <?xml version="1.0" encoding="UTF-8"?> & ...

  5. Struts2标签库

    这是个音乐播放列表 1.queryMusic.jsp <%@ page language="java" import="java.util.*" page ...

  6. Struts2中Action接收参数

    Struts2中Action接收参数的方法主要有以下三种: Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数:     a.定义:在Action类中定义属 ...

  7. struts2笔记01-环境搭建

    1.官网下载struts2 struts-2.3.28-all.zip,这个包可谓应有尽有,以后全靠它了! 2.jar包怎么选?       (1)struts-2.3.28-all\struts-2 ...

  8. 使用Struts2标签遍历集合

    遍历Map<String,Object> 遍历Map<Stirng,List<Student>> 遍历List<Map<String,Student&g ...

  9. 关于SpringMVC和Struts2的区别

    1.    与struts2不同 1.  springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过虑器. 2. springmvc是基于方法开发,传递参数是通 ...

最新文章

  1. Java HashMap、Hashset、ArrayList和函数间调用的练习
  2. PHP使用imagick扩展来合并图像
  3. HDU1671-Phone List (trie树)
  4. PHP和Javascript实现转换文件大小为人性化可读方式
  5. 开箱即用的VScode C++环境
  6. WEB入门之二十 插件
  7. LoadRunner 常用C语言函数使用
  8. mysql字符串字段类型_MySQL字符串字段类型选择的一般规则
  9. Win32汇编---控件的超类化感想
  10. sql转化为int类型
  11. vscode编写php好用吗,vscode可以编写php吗
  12. HTML5制作对联网页,经典的JS对联广告代码
  13. bochs模拟器创建映像文件 、写入文件并启动
  14. 判定覆盖与条件覆盖的区别
  15. android内存取证,CTF内存取证入门(以安洵杯为例)
  16. FileZilla查看站点隐藏文件
  17. 竟可监控员工离职倾向!一系统引发大争议
  18. 解决bug-python中关于Process finished with exit code -1073740791
  19. 【Java】一文秒懂http请求获取FlexManager平台FBox盒子信息
  20. OpenGL(四) 左右手坐标系及基本坐标变换

热门文章

  1. 计算机平面设计图片简单,计算机平面设计教学实用标准 - 图文
  2. python朋友圈可见_女神说不能每张照片P的一样,所以朋友圈开三天可见,用Python一步解决...
  3. 【Neo4j】第 7 章:社区检测和相似性措施
  4. 百度webgis-api-mapv可视化开源库
  5. Online Temporal Calibration for Monocular Visual-Inertial Systems 翻译
  6. 随手拍能当副业靠谱不,每天拍车辆违规可以赚钱吗?
  7. matlab多元回归程序,多元回归程序MATLAB程序.doc
  8. 利用百度翻译阅读外文文献PDF/CAJ
  9. 音频变时不变调处理(SoundTouch WSOLA)
  10. 【数据分析实例】1 亿条淘宝用户行为Hive数据分析