ideal创建Struts 2.x项目

ideal创建Struts 2.x项目

一、 目录

二、 Struts 2原理

Struts 2webwork的工作方式相似,使用拦截器作为处理用户请求的控制器。在Struts 2中有一个核心控制器FilterDispatcher,相当于Struts 1.x中的ActionServlet类,负责处理用户的请求,Struts 2的工作流程如下:

 1. 客户端浏览器发送请求到服务端,以page.action页面的形式。
 2. 核心控制器FilterDispatcher接收请求后,根据后面的扩展名,来决定是否调用Action,以及调用哪个Action。
 3. 在调用Action的execute方法之前,Struts 2会调用一系列的拦截器以提供一些通用的功能,如workflow、验证或文件上传等功能。被称为拦截器链。
 4. 之后就会调用execute方法,执行用户相关操作,如数据库操作,业务处理等。
 5. 根据execute方法的返回值,会将处理结果返回到浏览器,可以是HTML页面、JSP页面、图像或其他web资源。

Struts 2原理图

Struts 2原理图

Struts 2源码

Struts 2源码:https://github.com/apache/struts


三、 ideal创建过程


下面用一个简单登陆(没有整合database)的demo简述struts 2的流程

四、 struts 2的工作流程Demo:

表现层:login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>用户登录</title>
</head>
<body>
    <s:form action="login">
        <s:textfield label="用户" name="username"/>
        <s:password label="密码" name="password"/>
        <s:submit value="登录"/>
    </s:form>
</body>
</html>

逻辑层:LoginAction.java

package main.action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import java.util.Map;
public class LoginAction implements Action{

    private String username;
    private String password;

    private static Map<String, String> users = new java.util.
    HashMap<String, String>();

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

    static {
        users.put("bill", "123");
        users.put("wong", "123");
        users.put("song", "123");
    }

    @Override
    public String execute() throws Exception {
        try{
            // 获得ActionContext对象,可以通过该对象实例访问Servlet API
            ActionContext ctx = ActionContext.getContext();
            // 获得Map对象,可以通过用这个Map对象访问ServletContext对象
            Map application = ctx.getApplication();
            // 获得Map对象,可以用这个Map对象访问HttpSession对象
            Map session = ctx.getSession();
            // 从ServletContext对象中获得计数器变量,应用计数器
            Integer counter = (Integer) application.get("counter");
            // 将用户名保存进HttpSession对象中
            session.put("username", getUsername());
            String pw = users.get(username);

            if (pw == null){
                ctx.put("info", "该用户不存在,登录失败");
                return ERROR;
            } else {
                if (pw.equals(getPassword())){
                    if (counter == null){
                        counter = 1;
                    } else {
                        counter++;
                    }
                    application.put("counter", counter);
                    ctx.put("info", "已成功登录");
                    return SUCCESS;
                } else {
                    // 将处理结果保存在HttpServletRequest对象中
                    ctx.put("info", "该用户不存在,登录失败");
                    return ERROR;
                }
            }
        }
        catch (Exception e){
            return ERROR;
        }
    }

最重要的就是在struts.xml中配置action

<action name="login" class="main.action.LoginAction">
    <result name="success">/success.jsp</result>
    <result name="error">/error.jsp</result>
    <!--<interceptor-ref name="defaultStack"/>
    <interceptor-ref name="authorization"/>-->
</action>

显示结果的页面success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登陆成功</title>
</head>
<body>
    本站访问次数:${applicationScope.counter}<p/>
    用户名:${sessionScope.username}<p/>
    ${requestScope.info}
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值