struts2简单入门示例

             struts2是java web开发的MVC开发框架,struts2不同的版本,开发的包有一些变化,这也导致了网上许多入门教程照做最后都运行不起来,最常报的错误就是404错误,这里有必要自己记录一下。


开发环境


1、STS 3.7.3(Spring Tool Suit),下载。STS其实是一个包装过的Eclipse,由Spring小组开发的,专门用于Spring项目的开发,当然也可以集成struts2进来,如果你使用的是Eclipse或者MyEclipse也行。老规矩,安装之前先要安装jdk,并配置好环境变量。

2、Tomcat 7,下载Tomcat 7。sts已经集成了一个叫Pivotal tc Server的web服务器,不过我们一般都使用Tomcat作为我们的Web服务器。Tomcat配置


创建项目


1、创建Dynamic Web Project



2、填写项目名称:StrutsHelloWorld,点击两次下一步。



3、勾选generate web.xml,然后点击finish。



4、这样一个空的web项目就出来了,架构如下所示:



5、下载struts2包

        网上许多教程使用的struts2的包因为版本的原因都不一样,如果你版本不一致,很容易运行的时候最后报404错误。所以这里一定要按照我说的来准备struts2的包,不然无法保证运行成功。我使用的是目前最新的版本:struts2 2.5.2,建议下载完整包struts-2.5.2-all.zip,不要去下载最小包struts-2.5.2-min-lib.zip,最小包不全。如下图所示:

下载地址如下:struts-2.5.2下载地址 下载完成后,只保留如下包:

       需要注意的是,里面有些包在完整包struts-2.5.2-all.zip里也没有,比如log4j-api-2.6.2.jar、log4j-core-2.6.2.jar,完整包里只有log4j-api-2.5.jar,这两个是后来手工加的。你可以去官网下载log4j-api-2.6.2.jar和log4j-core-2.6.2.jar,官网下载地址:log4j下载。当然为了省时间,我已经将struts2 HelloWorld所需的最小必备包上传上来了,大家可以直接下载。下载地址:struts2 2.5.2最小必备包

6、导入strust2包

       struts2包下载下来后,手动复制粘贴到项目所在位置的WEB-INF/lib,然后右键刷新项目,就可以看到包导入进来了,不仅在lib下可以看到,它也自动导入到了Web App Libarary下,如图所示:



7、配置web.xml

       我们接下来需要在web.xml中配置struts2的核心控制器FilterDispacher,这个控制器主要是拦截请求,并将请求映射到具体的某个可以处理该请求的Action。不同的struts2版本中,FilterDispacher的叫法不一样,在struts-2.5.2中叫org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter。web.xml配置核心控制器内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<display-name></display-name>

	<!-- Struts2配置 -->
	<filter>
	    <!-- 配置核心过滤器 -->
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<filter-mapping>
	    <!-- 拦截所有请求 -->
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>
在web.xml中配置好核心过滤器后,struts2就可以正式开始工作了。


8、编写HelloWorld.jsp页面

     在webcontent下面新建HelloWorld.jsp页面,内容如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<%@ taglib prefix="s" uri="/struts-tags" %>  
<html>  
  <head>      
    <title>Hello World!</title>      
  </head>  
  <body>  
    <h2><s:property value="message" /></h2>  
  </body>  
</html>  


9、编写Action类

      与Spring MVC不同的是,在struts2中,处理请求的是对象,而不是方法。在src目录下新建package取名main,然后创建类HelloWorldAction.java,如图所示:



HelloWorldAction.java内容如下:

package main;  
import com.opensymphony.xwork2.Action;
  
public class HelloWorldAction implements Action 
{  
    public final static String MESSAGE = "Hello World!This my first struts2 project!";   
    private String message;  
  
    public String getMessage()  
    {  
        return message;  
    }  
  
    public void setMessage(String message)  
    {  
        this.message = message;  
    }  
  
    /*
     * 实现Action接口中的execute方法,在该方法中处理请求
     * */
    public String execute() throws Exception  
    {  
        setMessage(MESSAGE);  
        return SUCCESS;  
    }  
}  
处理请求的类必须实现Action接口或者继承ActionSupport类(其实ActionSupport也是实现了Action接口),然后在execute方法中处理请求,然后返回结果字符串即可。这里的SUCCESS是在Action接口中预定好定义的结果字符串“success”。


10、请求-Action映射

       刚才说了核心控制器会根据请求来寻找能够处理该请求的Action类,这些映射都被写入了struts.xml的配置文件中。到时候org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter就会从struts.xml中读取映射。

       在src目录中新建struts.xml文件,内容如下:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE struts PUBLIC  
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<package name="struts2" extends="struts-default">
	    <!-- 请求-Action映射 -->
		<action name="HelloWorld" class="main.HelloWorldAction">
		    <!-- 返回结果 -->
			<result name="success">/HelloWorld.jsp</result>
		</action>
	</package>
</struts>  
在上面的映射中处理HelloWorld请求的类为main.HelloWorldAction类,返回的结果为success则映射到了HelloWorld.jsp页面。


11、运行

     右键项目Run As--->Run On Server,在地址栏中输入http://localhost:8080/StrutsHelloWorld/HelloWorld,如下图所示:

      

至此一个简单了struts2 Hello World便完成了,如果你成功看到了Hello World,而不是404,那么恭喜你!

工程下载struts2 Hello World工程源码


常见错误及解决方案:


1、最常见的错误要属404错误了,相信很多人都被这个错误折磨了很久,如图所示:

    

debug模式下console的输出为:


意思就是找不到类 ,引起这个错误的原因有很多,最常见的是包不全、build path和类名拼写错误这三个原因。

      (1)、包不全的问题,直接下载我给出的最小必备包就可以了。我之前就是栽在这个问题上的,官网给出的无论是最小包还是完整包,都不完整,都差别的包,不知道为什么会出现这样的低级错误。而且更无语的是,你包多了也不行,也会报错。为了大家少折腾,我给出了最小必备包,直接下载下来用就行了。

      (2)、如果是build path的问题,那么请将包放在WEB-INF/lib下面,不要通过User Library导入,如图所示:


        如果放入后不能识别这些包,那是因为你没有在Library中加入Web App Library,WEB-INF/lib下的包最后会自动被拷贝至Web App Library,没有Web App Library的话当然不能识别。右键项目--->build path---->Configure Build Path,然后选择Add Library,如图所示:




选择Web App Library,一路next,然后finish即可。


这样就OK了。


       如果你说:“手动拷贝到WEB-INF/lib下面,太麻烦了,我就想用User Library的方式导入!”别急,我们也有办法,通过User Library的方式导入后(这个不用我教吧?),右键项目--->build path---->Configure Build Path,然后选择Deployment Assembly,点击Add,如图所示:



选择Java Build Path Entries,如图所示:



选择你自己建立的struts2的User Library包,然后点击finish,然后点击OK就行了。



(3)、拼写错误

       这个错误最坑爹,如果你是照着书本或者网上教程来的,很有可能核心控制器FilterDispacher的名字各不一样,有的人是org.apache.struts2.dispatcher.FilterDispatcher,这个是老版本的写法,也有的人是org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter,但是我告诉你struts2.5.2里的写法是:org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter。请仔细检查你的FilterDispacher的拼写错误,比如大小写,名字与版本对应。如果你不知道你的版本的FilterDispacher的名字叫什么,请在左侧Project Exploer中打开struts2-core-2.5.2.jar,找到org.apache.struts2.dispatcher.filter包,查看你的FilterDispatcher的名字,如图所示:



(4)、Tomcat

       报404错误还有一部分原因是tomcat引起的,为了保证顺利运行,请安装Tomcat时,路径中不要带有空格。如果上面三个错误都解决后,仍然报404错误,请在你的IDE的servers中删除tomcat并重新配置后再运行,如图所示:



2、Tomcat报错:A child container failed during start。

   原因是包不完整,缺少log4j-api-2.6.2.jar和log4j-core-2.6.2.jar两个包。网上说还有可能是web.xml配置错误,url-pattern缺少/,正确的如下所示:

<filter-mapping>
	    <!-- 拦截所有请求 -->
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>


3、报错:java.lang.ClassNotFoundException: javassist.ClassPool  

      原因是包不完整,缺少javassist-3.20.0-GA.jar包,添加进来即可。


4、报错:java.lang.NoSuchMethodError: org.apache.logging.log4j.status.StatusLogger.debug

      这个是因为我在包中加入  log4j-api-2.6.2.jar和log4j-core-2.6.2.jar两个包,而完整包里已经包含了log4j-api-2.5.jar,删除log4j-api-2.5.jar即可。


5、报错:unable to load configuration -bean...Caused by: java.lang.ClassNotFoundException: org.apache.struts2.views.gxp.inject.InjectedObjectContainer

      原因是包太多(坑爹有木有),删除不必要的包,只保留必需的。然后在servers中删除并重新配置tomcat,防止包没有删除干净。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值