首页 > 代码库 > 创建一个Struts2的web项目

创建一个Struts2的web项目

前言

从零开始一步一步的搭建一个Struts2的web项目。

工具:eclipse

搭建过程

首先,创建一个动态的Web工程,结构如下:

技术分享

然后我们加入一些项目所需的jar包,将其放入WEB-INF下面的lib目录下面,然后加入到项目中:

jar包下载地址:http://download.csdn.net/detail/zjq_1314520/9802042

这里包含了基本的所有需要的jar包,我们选取一些我们这个最简单的项目需要的。

技术分享

接着我们来配置 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_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>HelloStruts2</display-name>

  <filter>
    <filter-name>hellostruts</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>hellostruts</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

web.xml配置完成之后,我们来进行一些struts的配置。

在 src 目录下创建 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>
</struts>

在 src 目录下面创建一个 Struts2 的 Action(下图中的HelloStrutsAction),继承ActionSupport基类。

技术分享

Action中加入如下代码:

package com.struts.trio;

import com.opensymphony.xwork2.ActionSupport;

public class HelloStrutsAction extends ActionSupport {

    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        return "index";
    }

}

上面的代码中我们重写了基类中用以处理用户请求execute()方法。
上述方法的返回值为index,那么程序要怎样识别并返回相应的界面呢?

所以就需要定义逻辑视图与物理资源之间的映射

struts.xml中增加如下代码:

<struts>
    <!-- 定义逻辑视图与物理视图之间的联系 -->
    <package name="trio" extends="struts-default">
        <action name="index" class="com.struts.trio.HelloStrutsAction">
            <!-- 将index映射到物理地址 -->
            <result name="index">/index.jsp</result>
        </action>
    </package>
    <!-- end -->
</struts>

这时候就会返回WebContent目录下面的index.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>
<h1>hello struts2 login success!</h1>
</body>
</html>

到这里,一个Struts2的项目就完成了,放在服务器上面跑一下,如果最终结果如下,说明你也创建成功了!

技术分享

上面主要是一个Struts2的大致模型,关于这个Action的用法见下面:

数据交互

现在就会用到上面刚搭建的那个架构来进行数据的交互。

我们来设计一个应用场景,定义需求如下:

  • 这是一个用户登录的页面(用户名,密码)
  • 登录成功,跳转到 success.jsp
  • 登陆失败,跳转到 failure.jsp

我们就在上面的基础上来完成这个需求:

首先我们将index.jsp改成一个含有登录表单的文件:

引入Struts2的标签库:

   <!-- 引入struts的标签库-->
<%@ taglib uri="/struts-tags" prefix="s"%>

最后代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
   <!-- 引入struts的标签库-->
<%@ taglib uri="/struts-tags" prefix="s"%>
<!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>登录</title>
</head>
<body>
    <s:form action="index">
        <s:textfield name="username" key="用户名"></s:textfield>
        <s:textfield name="password" key="密    名"></s:textfield>
        <s:submit key="登录"></s:submit>
    </s:form>
</body>
</html>

注1:更多有关Struts2标签的可以参考:Struts2标签

注2:表单中的提交地址(index),与struts.xml中此处的配置相对应:

技术分享

说明,点击按钮,数据会传到com.struts.trio.HelloStrutsAction这个Action中。

接下来我们来接受前台传过来的数据:

当用户名为:admin,密码为:123456 时候登录成功,反之失败。

则,Action中的代码修改为如下:

package com.struts.trio;

import com.opensymphony.xwork2.ActionSupport;

public class HelloStrutsAction extends ActionSupport {

    //定义请求参数的 username 和password
    //与前台jsp中表单中的name属性相同
    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;
    }


    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        String userName=this.getUsername();
        String userPassword=this.getPassword();

        if(userName.equals("admin")&&userPassword.equals("123456")){
            ActionContext.getContext().getSession()
                .put("user", userName); //用户名存储在 session 用于返回界面显示
            return "success";
        }
        return "failure";
    }
}

因为Action的返回值发生了改变,则struts.xml中的相应的映射改为:

<struts>
    <!-- 定义逻辑视图与物理视图之间的联系 -->
    <package name="trio" extends="struts-default">
        <action name="index" class="com.struts.trio.HelloStrutsAction">
            <result name="success">/jsp/success.jsp</result>
            <result name="failure">/jsp/failure.jsp</result>
        </action>
    </package>
    <!-- end -->
</struts>

接下来我们创建两个返回界面相应的 jsp 文件:

技术分享

在登陆失败界面直接显示:登陆失败
在登录成功界面显示:XXX(用户名)登录成功

对应的failure.jsp就不过多说明,那么success,jsp文件该怎样输出后台存入 session的用户名呢?

            ActionContext.getContext().getSession()
                .put("user", userName); //用户名存储在 session 用于返回界面显示

上面就是存储用户名的代码了,可知存储的key为”user”
我们使用JSP中的EL表达式获取session中的值,部分代码如下:

</head>
<body>
<h1>${session.user} 登录成功</h1>
</body>

好了,这个简单的实例就算是写完了,查看一下自己的项目是否能正确的跑起来吧!

项目测试

运行项目,输入用户名密码

技术分享

点击登录

技术分享

显示登录成功,至此,实例完成!

<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>

    创建一个Struts2的web项目