欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

最简单的Struts2使用例子[struts-2.3.20]

程序员文章站 2022-07-13 21:30:51
...
Struts2版本:struts-2.3.20
IDE工具:Eclipse Java EE IDE for Web Developers
WEB容器:apache-tomcat-7.0.40

解压struts-2.3.20-all.zip
apps是Struts的例子
docs是Struts的帮助文档
lib是Struts的发布包
src是Struts的源代码
我们关注的是apps目录,首先我们进入到apps目录。
可以看到几个war包,这几个都是简单的Struts例子。我们挑一个最简单的struts2-blank.war解压缩。解压出来就是一个普通的web项目结构。
我们关注的是2个文件web.xml、struts.xml和1个目录lib。

现在我们在Eclipse中新建WEB项目工程HelloStruts2,参照Struts的例子我们先来修改web.xml文件。
定义Struts2的filter配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>


把项目部署到Tomcat并启动,报错是肯定的,因为我们还没有放Struts2的jar包到工程里面。
有些人会说,Struts2中的jar那么多,是不是全部要放进去呢,或者要挑哪些放?
当然如果你只是想把项目运行起来,也可以把刚才解压的例子struts2-blank中的12个jar包都加进去,或者可以把整个Struts2的jar包加进来,这都是可以的。
缺少jar包在项目启动的时候是会抛异常的,根据这些异常信息我们就可以知道要加入哪些jar包了,下面我们就一起来看看最简单的Struts2例子到底想要哪些jar包。
第一个异常:
java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

这个是我们在web.xml文件中配置的filter,这个class是在Struts2的核心包里面。
缺少的包是“struts2-core-2.3.20.jar”。
第二个异常:
java.lang.NoClassDefFoundError: com/opensymphony/xwork2/ActionContext

大家都知道Struts2是基于WebWork的,这个class就在WebWork的包里面。
缺少的包是“xwork-core-2.3.20.jar”。
第三个异常:
java.lang.NoClassDefFoundError: ognl/PropertyAccessor

缺少的包是“ognl-3.0.6.jar”。
第四个异常:
Caused by: java.lang.ClassNotFoundException: javassist.ClassPool

缺少的包是“javassist-3.11.0.GA.jar”。
第五个异常:
java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils

缺少的包是“commons-io-2.2.jar”。
第六个异常:
java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils

缺少的包是“commons-lang3-3.2.jar”。
第七个异常:
Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.RequestContext

缺少的包是“commons-fileupload-1.3.1.jar”。
第八个异常:
Caused by: java.lang.NoClassDefFoundError: freemarker/cache/TemplateLoader

缺少的包是“freemarker-2.3.19.jar”。
到这里Tomcat已经可以正常启动了,这也就说明我们把Struts2必须的jar包都已经加到项目中来了。
Struts2至少需要下面8个jar包才可以正常运行。
struts2-core-2.3.20.jar
xwork-core-2.3.20.jar
ognl-3.0.6.jar
javassist-3.11.0.GA.jar
commons-io-2.2.jar
commons-lang3-3.2.jar
commons-fileupload-1.3.1.jar
freemarker-2.3.19.jar


现在我们来看例子中的最后一个文件struts.xml,这个是Struts2的配置文件。
在src目录下新建struts.xml文件,参照例子中的进行修改。
新建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="hello" extends="struts-default">
		<action name="HelloStruts2" class="com.lnc.hello.struts2.HelloAction">
			<result>/hello.jsp</result>
		</action>
	</package>
</struts>


新建Action:
package com.lnc.hello.struts2;

public class HelloAction {
	public String execute() {
		return "success";
	}
}


新建jsp文件:
<!DOCTYPE html>
<html>
<head>
<title>Hello Struts2</title>
</head>
<body>
	<h1>Hello Struts2</h1>
</body>
</html>


现在可以将项目完整的部署到Tomcat中了,运行Tomcat,打开浏览器访问“http://localhost:18080/HelloStruts2/HelloStruts2.action”。
浏览器请求到服务器以后,第一个遇到的是Struts2的拦截器StrutsPrepareAndExecuteFilter,拦截器会结合Struts2配置文件struts.xml对请求进行分析,我们的请求.action前面是HelloStruts2,Struts2就会找看有没有对应的Action配置,找不到是会报错的,当然我们配置了HelloStruts2这个Action。
找到配置的Action以后,根据class属性可以知道处理这个请求的是HelloAction,Struts2就会调用HelloAction.execute()方法处理这个请求,当然也可以通过method属性指定处理请求的方法。
根据execute方法返回的字符串和对应Action中配置的result,Struts2就知道处理完成以后跳转到哪个视图。我们的execute返回的是success,配置文件中对应的Action配置的result是/hello.jsp,所以Struts2最后展示给我们的就是hello.jsp页面。