J2EE框架——Struts2基础

Struts2和Struts1的体系结构差别巨大,Struts2以WebWork为核心,采用拦截器的机制来处理用户请求,这样的设计也使得业务逻辑控制器能够和Servlet API完全脱离开。

一.下载安装Struts2框架

1.http://struts.apache.org,下载Full Distribution最新的Struts2,解压缩后将lib文件夹下的压缩包都放到WEB-INF/lib下

2.web.xml配置:

<?xml version="1.0" encoding="UTF-8" ?>
<web-app version="2.5"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
    "
    >

    /**定义核心Filter*/
    <filter>
        /**定义核心Filter名称 */
        <filter-name>Struts2</filter-name>
        //filter实现类
        <filter-class>
           org.apache.struts2.dispatcher.FilterDispatcher
        </filter-class>
    </filter> 
    <filter-mapping>
        <filter-name>struts2</filter-name>
        /* 接受的Web请求 */
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

二.基于Struts2框架实现登陆案例

1.准备工作
①新建Web项目,并通过上述安装struts2框架(文件和web.xml)
②在WEB-INF/classes文件夹下新建struts.xml配置文件
③新建用户登录界面login.jsp,登陆成功界面login_success.jsp,登录失败界面login_failure.jsp和业务逻辑组件LoginCheck.java
④编译业务逻辑组件LoginCheck,使编译后的class文件,包括包名放入项目的WEB_INF文件夹下的classes文件夹中

2.控制类Action
struts2的控制类不同于struts1,不需要继承Action父类,也无需任何接口,是一个普通的POJO类。Action中包含了多个属性用来封装用户请求的参数,和Struts1中的ActionForm非常相似,同时还有一个execute方法,用来调用业务逻辑组件来判断,返回字符串,指定视图资源

//实现Action接口
public interface Action{
    public static String SUCCESS = "success";
    public static String NONE = "none";
    public static String ERROR = "error";
    public static String INPUT = "input";
    public static String LOGIN = "login";
    //定义execute处理请求
    public String execute() throws Exception;
}


//登陆Action
import com.yl.test.LoginCheck;
import com.opensympgony.xwork.Action
import com,opensymphony.xwork.ActionContext;

public class LoginAction implements Action{
    private String uname;
    private String upassword;
    //获得uname值
    public String getUname(){return uname;}
    public void setUname(String uname){
        this.uname = uname;
    }
    public String getUpassword(){
        return upassword;
    }
    public void setUpassword(String upassword){
        this.upassword = upassword;
    }

    public String execute() throws Exception{
        //LoginCheck对象
        LoginCheck lc = new LoginCheck();
        //调用业务逻辑组件判断功能
        if(lc.isLogin(getUname(),getUpassword)){
            ActionContext.getContext().
                        getSession().put("login","true");
            return SUCCESS;
        }else{ return ERROR; }
    } 
}


//配置Action,struts.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    //Action必须放在指定包名空间中
    <package name="struts2" extends="struts-default">
    //定义login的Action类
    <action name="login" class="com.yl.test.action.LoginAction">
    //定义处理结果和视图资源的关系
        <result name="success">/login_success.jsp</result>
        <result name="error">/login_failure.jsp</result>
    </action> 
  </package>
</struts>

3.Struts2标签库和输入校验

//导入标签库
<%
    @ taglib prefix="s" uri="/struts=tags"
%>
/**登录表单,提交到login.action*/
<s:form action="login">
    <s:textfield name="uname" label="用户名"></s:textfield>
    <s:password name="upassword" label="密码"></s:textfield>
    <s:submit value="登陆"></s:submit>
</s:form>

//继承ActionSupport完成输入校验
//ActionSupport类已经完成Action和Validatable等接口,可以直接继承重写

import com.yl.test.LoginCheck;
import com.opensymphony.xwork.ActionContext;
import com.opensymphony.xwork.ActionSupport;

public class LoginAction extends ActionSupport{
    private String uname;
    private String upassword;
    public String getUname(){return uname;}
    public void setUname(String uname){
        this.uname = uname;
    }
    public String getUpassword(){
        return upassword;
    }
    public void setUpassword(String upassword){
        this.upassword = upassword;
    }

    //执行输入校验
    public void validate(){
        if(getUname()==null||"".equals(getUpassword().trim())){
            this.addFieldError("uname","需要用户名");
        }
        if(getUpassword()==null||"".equals(getUpassword().trim())){
            this.addFieldError("upassword","需要密码");
        }
    }


    public String execute() throws Exception{
        //LoginCheck对象
        LoginCheck lc = new LoginCheck();
        //调用业务逻辑组件判断功能
        if(lc.isLogin(getUname(),getUpassword)){
            ActionContext.getContext().
                        getSession().put("login","true");
            return "success";
        }else{ return "faliure"; }
    } 
}

//在struts.xml中加入,输入错误返回登陆页面
<result name="input">/login.jsp</result>

//当然所有的校验工作都可由前台完成,不必那么麻烦
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值