structs2.3.16的一个示例

自从structs2出了二次漏洞后,structs2的实例也有了不少的改变。

使用Eclipse搭建Struts2的开发环境

1创建用户库

       Struts2所需的包建成用户库,可以更加方便地进行管理和使用,这是一个好的习惯——编程从习惯开始。

       1.选择菜单Window->Preferences->Java->Build Path->User Libraries。如图4

       structs2.3.16的一个示例_第1张图片

       (4)

       2.点击右侧的New…按钮,创建一个新的用户库,弹出如图5所示对话框:

       structs2.3.16的一个示例_第2张图片

       (5)


       3.
输入用户库的名称,如:Struts2,点击OK按钮,该对话框自动关闭。结果如图6所示:

       structs2.3.16的一个示例_第3张图片

       (图6

       此时,右侧的按钮被点亮。

       4.点击“Add JARS…”按钮,添加用户库所需的库文件,在Struts2中,至少要包含上文中提到的5个库文件。添加后效果如图7所示:(需要的jar包比以前2.1多了

      

       (图7

2开发第一个Struts2应用程序——世界,你好

       开发WEB应用程序,本文使用了MyEclipse插件。

       入门教程总是以HelloWorld作为学习的第一步,自然笔者也不例外。本示例从游览器输入网址,提交请求后在页面中显示“世界,你好”的信息。

       1.新建WEB工程,如图8所示:

       structs2.3.16的一个示例_第4张图片

       (图8

       2.点击“Next”,输入工程名,如图9所示:

       

       (图9

       3.点击“Finish”完成。

       4.现在将Struts2的库导入到工程中,右击工程名称弹出快捷菜单,选择Build Path->Add Libraries…,如图10所示。

       structs2.3.16的一个示例_第5张图片

       (图10

       5.从弹出的对话框中选择“User Libraries”,如图11所示。

       structs2.3.16的一个示例_第6张图片

       (图11

       6. 单击下一步,我们看到,上文中创建的用户库出现在列表中,在“Struts2前的复选框上打勾,点击“Finish”完成。如图12

       structs2.3.16的一个示例_第7张图片

       (图12

       7.Struts2所带的过滤器org.apache.struts2.dispatcher.FilterDispatcher配置到工程的web.xml文件中,默认情况下,该过滤器拦截请求字符串中以.action结尾的请求,并将该请求委托给指定的Action进行处理。最直观的表现就是调用Actionexecute()方法。代码如下:

代码清单1web.xml

   <filter>

       <filter-name>struts2</filter-name>

       <filter-class>

           org.apache.struts2.dispatcher.FilterDispatcher

       </filter-class>

    </filter>

    <filter-mapping>

       <filter-name>struts2</filter-name>

       <url-pattern>/*</url-pattern>

    </filter-mapping>

    <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> 


注:在Sturts1.X中,该行为由Servlet完成。

8.创建包com.lizanhong.action,并在该包中创建HelloWorldAction类,该类继承自com.opensymphony.xwork2.ActionSupport。理论上,Action可以不继承任何类或实现任何接口,以增强程序的可测试性,这也是和Struts1.X不同的地方。但是,继承自ActionSupport可以减少更多的编码工作。

       ActionSupport中,定义了方法execute(),当用户向该Action发送请求时,会自动调用。程序代码如下:

代码清单2HelloWorldAction.java

package com.lizanhong.action;

import com.opensymphony.xwork2.ActionSupport;

publicclass HelloWorldAction extends ActionSupport {

    @Override

    public String execute() throws Exception {

       System.out.println("Action执行了。");

       if(10>20){

         return "a";

       }else if(10>30){

         return "b";

       }

       returnSUCCESS;

    }

}

注:ActionSupportStruts2提供的类,功能类似于Struts1.x中的Action类,该类封装了几个有用的功能,比如:

getText():从资源文件中获取国际化消息。

addFieldError():验证输入未通过时添加错误消息,支持国际化。

execute():该方法一般会被重写,当客户端向Action发送请求时,会调用此方法。

总结起来,该类主要提供了错误消息的支持和国际化支持。

       在工程类路径下创建struts.xml文件,这是Struts2的配置文件,类似于Struts1.x中的struts-config.xml,在struts.xml文件中可以配置ActionBeanInterceptor等组件。

代码清单3struts.xml

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <include file="struts-default.xml"></include>

   

    <package name="a" extends="struts-default">

       <action name="helloworld" class="com.lizanhong.action.HelloWorldAction">

           <result>/result.jsp</result>

           <result name="a">/a.jsp</result>
           <result name="b">/b.jsp</result>

       </action>

    </package>

</struts>

注:WEB应用程序的类路径是指WEB-INF/classes目录,在Eclipse中,创建在src目录下的文件最终发布后会自动复制到WEB-INF/classes目录下。

代码清单3中涉及到很多标签,以下是简单的解释:

标签名称

说明

include

包含其他xml文件,在示例中,这意味着struts.xml可以访问定义在struts-default.xml文件中的组件。

该元素可以使得Struts2定义多个配置文件,“分而治之”。

要注意的是,任何一个struts2配置文件都应该和struts.xml有相同的格式,包括doctype,并且可以放在类路径下的任何地方。

package

Action或截拦器分组。

name:名称,必填项,名称自定义,没特别要求。方便别的package引用。

extendspackage能继承其他的package,即通过该属性实现,值为另一个packagename

在示例中,extends =”struts-default”是从struts-default.xml中继承的。

如果在package 中添加属性namespace="/mystruts"

则在访问URI中则为:http://localhost:8081/Struts2Demo/mystruts/helloworld.action

action

定义Actionname属性为访问时用到的名称,class属性是Action的类名。

result

根据Action的返回值定义页面导航。

Action的预定义的返回值有:

String SUCCESS = "success";

String NONE    = "none";

String ERROR   = "error";

String INPUT   = "input";

String LOGIN   = "login";

比如,当Action返回SUCCESS时希望转到ok.jsp页面,则可以这样写:

<result>/result.jsp</result>

    其中,name的缺省为success

       9.result.jsp是一个非常简单的jsp页面,输出“世界,你好”。

代码清单4result.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

 <head>

    <base href="<%=basePath%>">

   

    <title>My JSP 'result.jsp' starting page</title>

   

    <meta http-equiv="pragma" content="no-cache">

    <meta http-equiv="cache-control" content="no-cache">

    <meta http-equiv="expires" content="0">   

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

    <meta http-equiv="description" content="This is my page">

    <!--

    <link rel="stylesheet" type="text/css" href="styles.css">

    -->

 </head>

 

 <body>

    世界,你好. <br>

 </body>

</html>

9.发布工程,在浏览器中输入:http://localhost:8081/Struts2Demo/helloworld.action,在控制台输出“Action执行了。”


总结:应用structs2 只有以下几个步骤:1、添加需要jar包,并在web.xml中添加过滤器;2、在src下添加structs.xml;3、添加具体功能的action类,继承ActionSupport;4、完善业务层和表示层。



 

你可能感兴趣的:(structs2.3.16的一个示例)