Struts2.1.6的环境搭建与示例

开发 后端
本文介绍了Struts2.1.6的环境搭建,并提供了一段简单的代码做为示例,介绍如何测试这个搭建好的环境。

Struts2.1.6的环境搭建

首先下载Struts2.1.6。

然后下载Eclipse for JavaEE(3.4 or 3.5),点击下图选中的链接,进入下一个页面,找到能够下载的地方下载就行。

JDK6.0和Tomcat6.0,请大家自行下载。

另外,建议下载JSP标准标准库JSTL。

暂时下载这些,以后,需要用到其他的时,再下载。至于JDK6.0,Tomcat6.0,Eclipse的安装,请大家自行安装,在这里就不演示安装过程了。

关于Eclipse的部分用法,如在Eclipse里配置Tomcat服务器,新建动态Web项目等,请上网找一下其他的资料学习一下。

Struts2.1.6:***个项目

来开始我们的项目吧,先做个简单的测试,New一个Dynamic Web Project,起名为“SimpleWeb”,将Struts2.1.6的下载包解压后得到的lib目录,在lib目录下,找到以面的jar包:

xwork-2.1.2.jar
struts2-core-2.1.6.jar
struts2-convention-plugin-2.1.6.jar
ognl-2.6.11.jar
freemarker-2.3.13.jar
commons-loggin-1.0.4.jar
commons-fileupload-1.2.1.jar

把这些包放进项目的lib目录下,同时,建议也把JSTL的核心jar包也放到lib目录,这些JSTL的包主要有:

jstl.jar
standard.jar

我们先要在项目WEB-INF下的web.xml文件中配置Struts2应用,配置后,web.xml全部代码如下:

  1. < ?xml version="1.0" encoding="UTF-8"?> 
  2. < web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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"> 
  3.   < display-name>SimpleWeb< /display-name> 
  4.   < filter> 
  5.     < filter-name>Struts2< /filter-name> 
  6.     < filter-class>org.apache.struts2.dispatcher.FilterDispatcher< /filter-class> 
  7.   < /filter> 
  8.   < filter-mapping> 
  9.     < filter-name>Struts2< /filter-name> 
  10.     < url-pattern>/*< /url-pattern> 
  11.   < /filter-mapping> 
  12. < /web-app> 

我们在项目的WEB-INF目录下新建一个文件夹命名为“content”,这个文件夹名一定要这样,如果写成别的,要另外配置一下,但初学的话,就按它默认的吧。我们新建的这个content目录,就是专门用来放JSP文件的。

我们在content目录下建一个JSP文件,命名为“hello.jsp”,内容可以很简单,就在里面写一个简单的话:Hello SImple,代码略。

这时,整个项目的文件夹视图如下:

整个项目的文件夹视图 

我运行Tomcat服务器,测试一下Struts2配置能不能用。首先我们在地址栏输入:http://localhost:8060/SimpleWeb/hello.jsp ,很遗憾,不管用了,报错了:HTTP Status 404 - The requested resource (/SimpleWeb/hello.jsp) is not available.

正确的做法是,输入地址: http://localhost:8060/SimpleWeb/hello.action 或者http://localhost:8060/SimpleWeb/hello 如果出现如下结果,就说明Struts2配置成功了。

Struts2配置成功

注意一点,这只是在WEB-INF/content目录下的文件是通过这种方式访问的;如果不是在这目录下,而在项目目录下,即Eclipse对应项目的WebContent下,就不能这样访问了。举例说,在项目根目录下建个hello.jsp的文件,则我们只能通过http://localhost:8060/SimpleWeb/hello.jsp来访问。

能通过hello.action或者hello访问WEB-INF/content下的hello.jsp,这种做法,是Struts2.1.6跟Struts2.0不同之处之一。使用时请确保你使用的Struts版本是2.1.6+。相关的命名规范与默认的action匹配规则,请参考官方的文档:http://struts.apache.org/2.1.6/docs/convention-plugin.html

我们再新建一个Java类,命名为HelloAction,此类须继承com.opensymphony.xwork2.ActionSupport,代码如下:

  1. package cn.simple.action;  
  2.  
  3. import org.apache.struts2.convention.annotation.Result;  
  4. import org.apache.struts2.convention.annotation.Results;  
  5. import com.opensymphony.xwork2.ActionSupport;  
  6.  
  7.  
  8. public class HelloAction extends ActionSupport {  
  9.  
  10.     @Override 
  11.     public String execute() throws Exception {  
  12.         System.out.println("HelloAction execute ... ");  
  13.         return SUCCESS;  
  14.     }  
  15. }  

让我们再次访问:http://localhost:8060/SimpleWeb/hello.action 或者http://localhost:8060/SimpleWeb/hello

可以看出,在Eclipse的控制台确定打印出了以下信息,这说明,访问请求确定经过了HelloAction类。

在Eclipse的控制台确定打印出了以下信息 

同时页面是跳到了WEB-INF/content/hello.jsp文件(如下图),这说明请求的确是从HelloAction类转发到了hello.jsp。

这说明请求的确是从HelloAction类转发到了hello.jsp 

看来,好像在不做什么配置,Struts2.1.6也会找到名为HelloAction的类来处理…/hello.action或者…/hello的请求,而好像也没有做什么配置,HelloAction会自动将请求转发给名为hello.jsp的页面,这正是Struts2.1.6的妙用之处,全赖struts2-convention-plugin-2.1.6.jar这个插件,具体了解,可看我上面提供的官方链接,或者看这位帅哥的翻译之作:struts2采用convention-plugin实现零配置。

看了上面的HelloAction的代码若感到莫名其妙的话,我这里把那些默认的、约定俗成的代码也写出来,这样,修改后的HelloAction类如下:

  1. package cn.simple.action;  
  2.  
  3. import org.apache.struts2.convention.annotation.Result;  
  4. import org.apache.struts2.convention.annotation.Results;  
  5. import com.opensymphony.xwork2.ActionSupport;  
  6.  
  7. @Results({  
  8.     @Result(name="success",location="hello.jsp",type="dispatcher")  
  9. })  
  10. public class HelloAction extends ActionSupport {  
  11.  
  12.     @Override 
  13.     public String execute() throws Exception {  
  14.         System.out.println("HelloAction execute ... ");  
  15.         return SUCCESS;  
  16.     }  
  17. }  

这样就容易明白许多了。解释如下:

name = “success” 跟 Action里的execute()方法的返回值SUCCESS(也可写成“success”)对应,即若此Action类一旦返回SUCCESS,就会跳到对应的这个Result去处理。
location = “hello.jsp”,表示请求由这个Action跳转到hello.jsp这个页面。
type = “dispathcer”,表示转发方式,具体解释见下面。

其中type=”dispatcher”表示请求转发,还有另一种常用的叫做type=”redirect”重定向,在下文会出现。Struts2.1.6的请求转发和重定向的区别其实跟Java Servlet里的是差不多的。Servlet里与其功能等价的的代码片断如下:

  1. request.getRequestDispatcher("hello.jsp").forward(request, response);    //请求转发  
  2. response.sendRedirect("hello.jsp");    //重定向 

两者的区别可以这样理解:请求转发(Dispatcher)在转发到的另一页面(如hello.jsp)还能保留Request域里的东西,而重定向(Redirect)的话,就跟它的名字“重定向”一样,跳到了另一个页面(如hello.jsp),不再跟原来页面(或者一个action、或者一个Servlet,或者JSP页面)有任何瓜葛,不会保存原来页面Request域的东西。还有一个表面上的区别就是:请求转发(Dispatcher)到另一个页面(如hello.jsp)后,地址栏里显示的仍然是上一个页面(这里称页面不太合适)的路径(如hello.action),而重定向则显示的是新跳到的那个页面的路径。大家自己测试一下,观察一下,其实也挺容易理解的。

【编辑推荐】

  1. iBATIS Spring Struts2整合实例浅析
  2. Struts+WebWork简单示例
  3. Struts2对WebWork的改进
  4. MyEclipse开发Struts配置测试浅析
  5. Struts和JSP页面的技术
责任编辑:yangsai 来源: cnBlogs
相关推荐

2009-06-25 16:09:37

2009-07-16 16:27:26

Struts WebW

2013-08-27 14:45:30

CouchbaseCouchbase环境测试

2011-06-03 14:36:32

IOS 环境搭建

2011-06-03 15:36:22

IOS 环境搭建

2009-09-07 18:14:55

Scala开发环境

2011-06-03 15:08:09

IOS 环境搭建

2011-06-03 16:05:20

IOS 环境搭建

2009-07-07 15:45:17

JSP环境搭建

2010-12-23 10:49:47

Windows 7Fedora

2010-03-23 13:30:36

Python VIM

2020-10-12 11:33:00

鸿蒙

2009-07-03 16:56:37

JSP开发环境

2011-03-23 10:13:53

LAMP环境搭建

2011-03-10 14:40:48

LAMP搭建

2010-02-06 13:18:51

CentOS LAMP

2016-08-16 13:44:28

AndroidLinuxADT

2009-07-07 15:59:51

2013-10-30 22:41:23

Clouda环境

2011-09-01 16:38:59

Ubuntunginxflup
点赞
收藏

51CTO技术栈公众号