Struts框架<一>

来源:互联网 发布:北理莫斯科大学知乎 编辑:程序博客网 时间:2024/05/21 12:39

Struts框架<一>

Struts框架,是基于MVC框架【(Model-View-Controller)把一个Java应用的输入、输出、处理流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层—-模型层、视图层、控制层。】
现在主要使用的是Struts2框架,

Struts2是

Struts的第二代产品,以WebWork为核心,采用拦截器的机制处理用户请求,使业务逻辑控制器能与Servlet API完全脱离。Struts1采用Servlet的机制处理用户请求。
Struts 2框架的所有类都基于接口,核心接口独立于HTTP。Struts 2配置文件中的大多数配置元素都会有默认值,有助于减少在XML文件中需要进行的配置。

Struts2框架主要由三部分组成:

核心控制器(StrutsPrepareAndExecuteFilter)、业务控制器和用户定义的业务逻辑组件。
1、核心控制器
FilterDispatcher是早期struts2的过滤器,可以对客户端URL请求进行过滤,负责处理用户所有以.action结尾的请求。2.1.3版后,官方推荐使用StrutsPrepareAndExecuteFilter
2、业务控制器
是用户实现的Action类实例。Action类通常包含一个execute方法,返回一个字符串作为逻辑视图名。创建了Action类之后,还需要在struts.xml文件中配置此Action的相关信息
3、业务逻辑组件
通常是指用户自己针对系统功能开发的功能模块组件。被业务控制器组件所调用来处理业务逻辑的。

Struts2框架的处理流程

第1步:客户端浏览器发送一个请求。
第2步: web服务器如Tomcat收到该请求,读取配置文件,将请求 导向Struts2的StrutsPrepareAndExecuteFilter(核心控制器), 后者根据请求决定调用合适Action。
第3步:StrutsPrepareAndExecuteFilter在调用Action之前被Struts2的拦截器拦截,拦截器自动对请求应用通用功能,如数据转换,校验等。
第4步:调用Action的execute方法,该方法根据请求的参数来执行一定的操作。
第5步:依据Action的execute方法处理结果,导向不同的URL。如在execute中验证用户,验证成功可以导向成功的页面。否则重新登录

Action:类似于EJB,在JavaBean中封装方法。

在Struts2中,Action不同于struts1.x中的Action。Struts2中Action并不需要继承任何控制器类型或实现相应接口。比如struts1.x中的Action需要继承Action或者DispatcherAction。
同时Struts2中的Action并不需要借助于象struts1中的ActionForm获取表单的数据。可以直接通过与表单元素相同名称的数据成员(setter-getter函数)获取页面表单数据。
虽然Struts2中的Action原则上不用继承任何类。但是一般需要实现Action接口或者继承ActionSupport类,重写execute方法。如果继承ActionSupport类,我们可以在的控制器中增加更多的功能。

定义Action类的两种形式:

1、基本形式:从ActionSupport类继承    public class LoginAction extends ActionSupport{         private String username;          private String password;         /*getter-setter代码略*/         public void validate(){…}         public String execute()throws Exception {….}    }2、普通JavaBean    package com.bean;    public class User {      private String username;      private String password;            /*getter-setter代码略*/     public String execute()throws Exception {...}    }

Action自己写:

//第一种是不继承ActionSupportpublic class LoginAction extends ActionSupport{    private String username;    private String password;    //必须写set,get方法    //根据默认业务方法,返回的字符串来指定结果页面    public String execute(){        //自己定义数据,放到指定容器中        ActionContext context = ActionContext.getContext();        Map<String,Object> appCtx=context.getApplication();        appCtx.put("user", this);        context.getSession().put("user", this);        //手动获取指定容器中数据        Object obj =context.getSession().get("user");        if(username.startsWith("hncu") && password.length()>3){            return "SUCCESS";        }else{            return "index";        }        //其他方法        public void fun1(){        System.out.println("fun1:"+username+","+password);        }    }
//第二种是继承public class LoginAction extends ActionSupport{//其他的是一样的,主要是可以用到父类中的方法,例如数据校验@Override    public void validate() {        System.out.println("数据校验:"+username+"----"+password);        //super.validate();    }}

必要的包:这里写图片描述

然后写配置文件(我是直接拷的struts2-blank中的struts.xml)

//struts.xml是放到src目录下<?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>    <!-- 动态方法调用,true -->    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>    <package name="default" namespace="/" extends="struts-default">    <!-- name就是index表单里面的action -->        <action name="Login" class="cn.hncu.login.action.LoginAction">        <!-- 导向结果页面 -->            <result name="SUCCESS" >/jsps/show.jsp</result>            <result name="index">/index.jsp</result>        </action>    </package></struts>

在index.jsp中表单的action:

<body>    <h2>用户登录</h2>    <!-- 用Strust框架后,表单提交给action处理,这里的action就是struts中配置的Action名字-->    <form action="Login" method="post">    Name:<input type="text" name="username"><br/>    Pwd:<input type="password" name="password"><br/>    <input type="submit" value="登录"><br/><br/><br/>    </form>  </body>

也可以调用其他方法:

<form action="Login!fun1.action">    Name:<input type="text" name="username"><br/>    Pwd:<input type="password" name="password"><br/>    <input type="submit" value="登录">    </form> 

在show.jsp页面中显示:

<body>     <h2>登录成功</h2>    欢迎你:${username }!<br/>    ${sessionScope.user.username }<!-- 从容器中拿-->  </body>

在web.xml中要配置过滤器,可以在过滤器中写拦截器:

//写在第一个,拦所有 <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>

一个官方给我们的空白框架:

里面包含xml配置文件,必要的包
http://pan.baidu.com/s/1pLuQKT9

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 校园网经常断网怎么办 身份证号姓名电话号码泄露怎么办 中国邮政银行短信通知怎么办 中通递送不到怎么办 智齿碎了一半怎么办 驾照扣50分怎么办 办不了租赁合同怎么办 收到佰仟律师函怎么办 佰仟律师打电话怎么办 右转车道右方路禁行怎么办 收费站没带现金怎么办 过收费站没有现金怎么办 高速收费站没有现金怎么办 过收费站没现金怎么办 查社保忘记密码怎么办 医保密码忘记了怎么办 买房房东不过户怎么办 转户口金牛区怎么办 高中办休学手续怎么办 电动车灯壳发黄怎么办 买二手车上当了怎么办 成都社保卡遗失怎么办 成都个人怎么办健康证 成都健康证怎么办周末 扶贫办 2020年后怎么办 学历认证通不过怎么办 中考落榜后该怎么办 高考没有填志愿怎么办 上海怎么办人户分离 四级考试被禁考怎么办 高考志愿没填怎么办 腓总神经损伤怎么办 怀孕了没有医保怎么办 卫生间便池堵了怎么办 管道被泥沙堵住怎么办 错过报志愿时间怎么办 报名准考证丢了怎么办 高中毕业证掉了怎么办 军人买不到票怎么办 大学作弊被开除怎么办 信访复查不受理怎么办