Struts 2的下载和安装
一.为Web应用增加Struts 2支持
下载和安装Struts 2步骤:
- 登录http://struts.apache.org/download.cgi站点,下载Struts 2的最新版,下载时有以下几个选项:
-
-
- Full Distribution:下载Struts的完整版,通常建议下载该选项,该选项包括Struts2的实例应用,空示例应用,核心库,源代码和文档。
- Example Applications:仅下载Struts2 的示例应用。
- Essential Dependcies:仅下载Struts2的核心库。
- Documentation:仅下载Struts2的相关文档
- Source:下载Struts的全部源代码
-
通常建议下载第一个选项 ,既下载Struts的完整版,将下载的文件解压,该文件夹包含以下文件结构:
-
-
- apps:该文件夹下包含了基于Struts的示列应用。
- docs:该文件夹下包含了Struts的相关文档。
- lib :该文件夹下包含了Struts框架的核心库类,以及Struts的第三方插件类库。
- src :该文件夹下包含了Struts2框架的全部源代码。
-
2. 将Struts 2的lib文件夹下的commons-fileupload-1.2.1.jar, commons-io-1.3.2.jar,freemarker-2.3.16.jar,javassist-3.7.ga.jar,ognl-3.0.jar, struts2-core-2.2.1.jar 和xwork-core-2.2.1.jar必须类库复制到Web应用的WEB-INF/lib路径下。如果需要在Web的应用中使用Struts2的更多特性, 则需要将相应的类库复制到此路径下,如果需要在DOS或者Shell中下手编译Struts2的相关程序,则还应该将struts-core-2.2.1.jar和xwork-core-2.2.1.jar添加到系统的CLASSPATH环境变量中。
大部分时候,使用Struts2的Web应用并不需要利用到Struts2的全部特性,应此没有必要将lib路径下的JAR文件一次性复制到Web应用的WEB-INF/lib路径下。
还有一点,可能有些人找不到javassist-3.7.ga.jar,这个JAR包是一个动态编译,生成Java字节码的类库,可登陆http://www.javassist.org/下载该JAR包,也可在Hibernate3.6的libytecodejavassist路径下找到该包。
3. 编辑Web应用的web.xml配置文件,配置Struts2的核心Filter,
<filter> 根元素用于注册一个filter <filter-name></filter-name> 子元素用于设置Filter的名称 <filter-class></filter-class> 子元素用于设置Filter的完整类名 </filter>
<filter-mapping> 根元素用于设置一个Filter所拦截的Web资源 <filter-name></filter-name> 子元素用于设置Filter的名称,此名称必须要与filter中<filter-name></filter-name>的一样 <url-pattern></url-pattern> 该子元素用于匹配用户请求的URL,例如“/Myservlet” </filter-mapping>
经过以上的三个步骤,就可以在一个Web应用中使用Struts2的基本功能了
上面的步骤仅完成了Web应用增加了Struts2的支持,但依然没有使用Struts功能,使用Struts功能至少还需要一个struts.xml的配置文件,这个配置文件默认放在Web应用的类加载路径下(通常就是WEB-INF/classes路径)。
二.在Eclipse中使用Struts2
让Web应用具有Struts2的功能,必须将Struts2框架的核心库类加载到Web应用中。刷新过后就可以看到如下界面
在Struts2 2.5中原来的xwork单独的jar已经合并到了struts-core的jar包中了,出现如图界面,表示Web应用以已经加入了Struts2的基础类库,但是还是需要修改web.xml文件,让该文件负责加载Struts的框架。
注意:在开始创建web应用时,如果选择的时3.0版本,是没有web.xml文件的,选择2.5版本是可以看到web.xml文件的。
单击web.xml文件节点,编辑该文件,同时是在web.xml中定义Struts的核心Filter,并定义Filter所拦截的URL模式,(固定的)
<!--定义Struts2的核心Filter-->
<filter>
<filter-name>struts2</filter-name>
<!--在Struts2的版本为2.5之前是这样写的-->
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!--让Struts2的核心拦截所有的请求-->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
三.增加登录处理
下面为StrutsDemo应用增加一个简单的登录处理流程,通过这个流程可以大致了解Struts2的开发步骤
增加一个JSP页面,名为index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <form action="login"> 用户名:<input type="text" name="uname"><br> 密 码:<input type="text" name="upass"><br> <input type="submit" value="登陆" /> </form> </body> </html>
再设置一个登录成功的页面Helloword.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <h1>Hello Strtus2!!!!你好</h1> </body> </html>
在设置一个登录失败的页面,error.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <h1>登陆出错</h1> </body> </html>
配置web.xml文件
<?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"> <display-name>StrutsDemo</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!--定义Struts2的核心Filter--> <filter> <filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>在Struts2.5之前是这样写的
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> 在Struts2.5之后是这样写的 </filter> <!--让Struts2的核心拦截所有的请求--> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
创建一个DemoLog类,用来验证登录账号和密码是否正确
package com.strtus2.action; import com.opensymphony.xwork2.Action; public class DemoLog implements Action { private String uname; private String upass; @Override public String execute() throws Exception { System.out.println("姓名:"+uname); System.out.println("密码:"+upass); if(uname.equals("ykp")&&upass.equals("123")){ return SUCCESS; } return "error"; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getUpass() { return upass; } public void setUpass(String upass) { this.upass = upass; } }
再在src里面创建一个xml文件(上面显示要把此文件放在Web应用的类加载路径中,但是为什么此处却放在src中?因为现在在Eclipse工具的管理下,当Eclipse生成,部署Web项目时,会自动将src路径下除了 *.java外的所有文件复制到Web的WEB-INF/classes路径下)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" > <struts> <package name="default" namespace="/" extends="struts-default"> <action name="login" class="com.strtus2.action.DemoLog"> <result name="success">/Helloword.jsp</result> <result name="error">/error.jsp</result> </action> </package> </struts>
运行结果
运行项目时一直出现了404错误,访问任何资源都是找不到,控制台一直显示找不到org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
百度后才知道Struts2的版本不同,此处的写法也不同,如下: