Struts2之HelloWolrd

来源:互联网 发布:java输入输出流 编辑:程序博客网 时间:2024/06/03 07:18

Hello World程序
以下是建立Struts2的HelloWorld程序的详细步骤:

编写web.xml,添加如下配置:

<!-- 配置struts2过滤器 -->    <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>

编写action类文件。在src目录下创建HelloWorld.java文件,如下:

public class HelloWorld {    private String meg;    public String getMeg() {        return meg;    }    public void setMeg(String meg) {        this.meg = meg;    }    public String execute(){        meg = "Hello World";        return "success";    }}

配置structs.xml

<struts>    <!-- 这项配置表示是否启动动态方法调用 -->    <constant name="struts.enable.DynamicMethodInvocation" value="false" />    <!-- 这项配置表示是否启用开发者模式,开发者模式的好处可以自动部署代码的修改,方便调试 -->    <constant name="struts.devMode" value="true" />        <!-- name属性指定在浏览器中的访问地址,class属性指定该action对应的类的全限定名 -->        <action name="hello" class="example.HelloWorld">            <!-- result指定该action跳转的路径,其name属性的默认值就是success,所以当name属性是success的时候可以不写name属性 -->            <result name="success">/index.jsp</result>        </action>    </package>    <!-- Add packages here --></struts>

编写jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!-- 添加这项配置表示使用struts2的标签库,就像使用jstl时一样 --><%@ taglib uri="/struts-tags" prefix="s" %><%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>struts2</title>    <meta http-equiv="pragma" content="no-cache">    <meta http-equiv="cache-control" content="no-cache">  </head>  <body>      <!-- 这是struts2自带的标签,value属性表示获取meg属性的值 -->    <s:property value="meg"/>  </body></html>

启动服务器,在浏览器中就可以看到hello world了。至此,hello world程序建立成功。

Struts2的开发步骤主要分为:
准备jar包,建议直接使用struts-blank.war项目中的jar包,这是该版本最精简的jar包了
在web.xml中添加struts2过滤器的相关配置(这个步骤在整个项目开发过程中只会编写一次)
开发Action,针对不同的功能开发不同的Action。就像在Servlet中开发不同的Servlet类似
在struts.xml配置文件中添加上一步骤开发的Action的相关配置
编写相关的结果页面
struts2表单处理

我们继续在现在的项目基础上创建一个表单,用以说明struts2中如何接受和设置参数。

创建login.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>login.jsp</title>    <meta http-equiv="pragma" content="no-cache">    <meta http-equiv="cache-control" content="no-cache">    <meta http-equiv="expires" content="0">      </head>  <body>    <form action="login" method="post">        <table>            <tr>                <td>用户名:</td>                <td><input name="user.username"></td>            </tr>            <tr>                <td>密码:</td>                <td><input type="password" name="user.password"></td>            </tr>            <tr>                <td colspan="2">                    <input type="submit">                </td>            </tr>        </table>    </form>  </body></html>

创建LoginAction

public class LoginAction {    private User user;    public String execute() {        if ("admin".equals(user.getUsername())                && "123".equals(user.getPassword()))            return "success";        return "error";    }    public User getUser() {        return user;    }    public void setUser(User user) {        this.user = user;    }}

配置Action

<!-- 登录Action -->        <action name="login" class="action.LoginAction">            <result>/success.jsp</result>            <result name="error">/error.jsp</result>        </action>

创建User类

public class User {    private String username;    private String password;    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }}

编写success.jsp和error.jsp文件
success.jsp(省略部分代码)

<body>    <h3>        <s:property value="user.username"/>,登录成功    </h3>  </body>

error.jsp(省略部分代码)

<body>    登录失败,请重新登录    <a href="login.jsp">返回</a></body>

注意在表单name属性的书写格式:user.username。但是我们在LoginAction中并未使用任何初始化的方法构造User对象,那么值是怎么传递过来的呢?在Struts2中使用了自动绑定的机制,当LoginAction中获取user.username属性的时候,实际上会执行以下过程:

action.getUser();
//当Struts2发现获取的User对象是null的时候,调用以下的语句
action.setUser(new User());
//通过调用User类的默认构造方法,实例化User对象之后,就可以设置username的属性的值了
action.getUser().setUserName();

除了以上的方式,还可以使用Action属性获取jsp页面表单的值,就是form表单的属性写在Action中,然后添加set和get方法,同样可以获取。不过个人感觉这种方式没有上一种简洁,所以就不贴代码了。

Struts2访问Request、Session和Application对象

在Struts2中有多种方式可以访问以上三个对象,但可以分为两类:与Servlet API解耦的访问方式(也是个人推荐使用的方式,一目了然,简单清晰)和与Servlet API耦合的访问方式。下面介绍与Servlet API解耦的方式。

通过访问com.opensymphony.xwork2.ActionContext类可获取以上三个对象,方式如下:

//获取以上三个对象            request = (Map) ActionContext.getContext().get("request");            session = ActionContext.getContext().getSession();            application = ActionContext.getContext().getApplication();            //在request中放值            request.put("hello", "欢迎访问");            //在session放值            session.put("user", user);            //在Application中放值            Integer counter = (Integer) application.get("counter");            if(counter == null){                counter = 1;            }else{                counter++;            }            application.put("counter", counter);

然后在success.jsp页面访问以上对象设置的值:

<body>    <h3>        ${requestScope.hello },${sessionScope.user.username },访问量是${applicationScope.counter }    </h3>  </body>

转自博客:http://blog.csdn.net/u011116672/article/details/50238413

原创粉丝点击