`
hcr51hcr
  • 浏览: 14430 次
社区版块
存档分类
最新评论

Struts2入门碰钉记

 
阅读更多

Struts2入门碰钉记
2010年11月01日
  前一阵子,想着学学Struts2吧,就借了本书开始干。经历了下载myEclipse漫长的等待,解决了Tomcat的设置问题后,一个长久而纠结大问题把我郁闷得不行。
  这就是"HTTP STATUS 404 request resource (xxxxx.action) is not available"错误。
  先看代码:
  web.xml
  [/b]  [b]-
   Struts 2
  -
   struts2
   org.apache.struts2.dispatcher.FilterDispatcher
  
  -
   struts2
   /*
  
  -
   index.html
  
  
  ----------------------------
  struts.xml
       -
  -
    
  -
   /helloreader.jsp
  
  
  
  ------------------------
  HelloReader.java
  package tutorial;
  import com.opensymphony.xwork2.ActionSupport;
  public class HelloReader extends ActionSupport{
   public static final String MESSAGE = "Hello Reader, I'm from Struts 2!";
   public String execute() throws Exception{
  setMessage(MESSAGE);
  return SUCCESS;
  }
  private String message;
  public void setMessage(String message){
  this.message=message;
  }
   public String getMessage(){
  return message;
  }
  }
  -------------------
  helloreader.jsp
  
  
  
  Hello Reader!
  
  
  
  
  
  ================
  开始我觉得是配置的问题。因为架构中变量参数很多,讲究个一致。
  其中,web.xml中和中相应的filter-name要完全一样;struts.xml中result标签内容要和要跳转到的jsp文件名一致;action标签的name属性要和URL中最后的action名一致……其中的道理非常简单,但容易出错。
  我就把两个xml文件从头到尾检查了N遍,得出结论:和书上的一模一样,并且没有错误!
  后来我想,用action访问不到,直接输jsp路径呢?结果,jsp也访问不到!这个比较弱智,是因为我的URL输的不对,我输的是:http://localhost:8080/项目名/HelloReader.action/,这是不对的。http://localhost:8080/是到Tomcat文件夹中的webapps目录下,而我为了防止凌乱,在它下面建了个Pros目录,将我的工程都放在里面。这样就应该是http://localhost:8080/Pros/项目名/HelloReader.action/
  或者把Tomcat的conf文件夹中的server.xml里的中的appBase改为"webapps/Pros"也行。
  没辙,然后开始到网上去问。
  一上网才知道,这个问题困扰了海一样的人!都是问这个问题的,回应的人也很多,但最终解决问题的却很少,就算解决了,他们的方法我试了,也都不行。好多人也是晕晕乎乎就好的。
  下面是我看到了几种解决方法:
  一、代码错误
  有的人最后发现,自己代码打错了!我气得直接PASS。
  二、文件位置错误
  我看了看我的文件们的位置。struts.xml和tutorial.HelloReader.java在src目录下,web.xml在WEB-INF目录下,而helloreader.jsp在WebRoot根目录下。
  一切是那么完美,但就是有错~
  三、jar包版本的问题
  我认为是struts2的问题,我用的是2.2.1,于是开始下其他的。结果,是一样的~
  四、晕晕乎乎好的
  我更晕。
  然后我就晕了,这已经搞掉我一天的时间,接下来的几天里我都有空就上网看看有没有解决办法,结果没有。
  后来,我看到有人说Struts2的lib里的包不能全导入工程,会冲突。简单的程序只要导入struts2-core.jar、xwork.jar、ognl.jar 、commons-logging.jar、commons-fileupload.jar 五个包就行。马上删去工程里我早就看不顺眼的其它包,然后满怀希望地调试,又出现了404那熟悉的数字……吐!
  至此,我已经把Struts2的流程、原理搞得熟透,简单例子的代码闭着眼就写出来了,睁开眼看一看一恶心,顺便熟悉了Tomcat的各种配置,甚至对XML又有了新的认识……
  但就是搞不掉404 。
  和网上好多人一样绝望。
  今天看见,有人说Struts2.2.1(正是我用的版本!我怎么这么倒霉!)必须在项目的lib里加上一个叫javassist-X.X.ga.jar的包,这个包在Struts2下的lib中还没有!这不玩人呢吗?我马上下了一个这个XX包,导入工程后……还是404!
  晕倒。
  最后才知道,不用下载,在Struts2送的例子的lib文件夹中就有那个javassist包。我……
  刚才,看见有人提到WAR文件什么的,发布方式不一样,就有可能运行不起来。不抱希望的我,就把工程打包成WAR文件Export到webapps文件夹里,结果输入URL,以action结尾,还是404!吐啊~
  不过幸亏我又看了一眼,这回这个404和原来不一样!原来都是XXXXX.action )is not available,这个是XXXXX.jsp) is not available!说明它跳转了!只是JSP文件没找到!!!
  结果发现,WAR文件里没有我放在工程根目录下的jsp文件,那它跑哪了呢?经过对比发现,WAR的根目录就是工程里的WebRoot目录!马上把jsp文件放到WebRoot目录下,重启Tomcat,输入那被我输了千遍的URL。
  当Hello Reader, I'm fom Struts2!这一行字出现时,我竟有点不敢相信,也没有很兴奋,默默地写了这篇文章!
  回头看看,虽然最终是靠不同的发布方式解决了问题,但上面说的真的也是可能造成这样错误的原因!比如代码输错,使配置文件不能很好地传递数据;URL错误,使Struts找不到相应的action等。
  以前所做的一些修改也不是多余的。其实我是犯了很多错误,只不过改变发布方式是最后一次改正罢了。比如javassist.jar这个包是需要的。我把它删掉后,连Struts2给的例子都不能运行。
  PS:其实只要点击MyEclipse中的Deploy命令,选择工程名及Tomcat版本后,即可自动发布成功!且以后有修改只要Redeploy即可,不用重启Tomcat服务器。
  补:今天(2011年8月18日)又配了一个struts2,出现以下错误:
  Unable to load configuration. - bean - jar:file:/D:/Program%20Files/Tomcat%206.0/webapps/ssh/WEB-INF/lib/struts2-core-2.1.8.1.jar!/struts-default.xml:47:178
  Tomcat启动都失败了。试了其他的struts版本也不行,最后原来是公司机器上Tomcat的问题。
  又在官网上下了个Tomcat,于是就成功了。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics