Struts2上

Struts2第一部分

学习思路

  1. 入门案例先敲熟(重点
  2. 独立使用struts2框架完成登陆案例

知识点:

struts是JAVAEE结构中WEB层的框架。

框架概述

百度

是一组组件或者说是一个应用的半成品。

提高了生产效率和质量。

核心

  • 拦截器
  • action
  • ognl与valuestack

与struts2类似框架

struts1 webwork springmvc jsf

struts2代替servlet

入门案例

//Servlet完成
/**
 * Servlet 登陆案例
 */
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //接收封装参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        //调用业务层(模拟)
        //页面跳转
        if("aaa".equals(username)&&"123".equals(password)){
            //成功,跳转success,重定向
            response.sendRedirect(request.getContextPath()+"/success.jsp");
        }else{
            //失败,跳转fail
            response.sendRedirect(request.getContextPath()+"/fail.jsp");
        }
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

struts入门案例执行流程

  1. 请求路径
  2. 被核心过滤器/前端控制器拦截
  3. 去找struts.xml文件中对应的action

使用struts2框架

  1. 导入jar包
  2. 在web.xml中配置一个filter(配置了才可以使用框架)
  3. struts2.xml配置
  4. 创建action完成操作

快速入门

struts2jar包目录解析

  • apps:示例代码
  • docs:文档
  • lib:相关jar包
  • src:源码

使用struts2框架不需要把所有jar包导入,只需要参考他的示例代码导包就可以了

配置StrutsPrepareAndExecuteFilter

<!--只有配置了才能使用框架-->
<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>

创建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>
    <package name="default" namespace="/" extends="struts-default">
    
    </package>
</struts>

使用struts2

​ 在action中的name属性的值结合package中的namespace属性的值可以得到一个路径.从而调用指定的action方法.

<action name="struts2" class="com.it.ssh.web.struts2.Struts2Action" method="show"></action>
    

获取参数

​ 在action类中提供成员变量和方法,就可以直接接收参数,名字必须和参数属性名相同.

public class LoginAction {
    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;
    }
    public String login(){
        System.out.println("连接成功");
        //获取参数
        //判断
        if("aaa".equals(username)&&"111".equals(password)){
            return "success";
        }else{
            return "fail";
        }
    }
}

页面跳转

  1. 在action中的方法添加一个string返回值
  2. 在struts.xml配置确认跳转路径.
<!--页面跳转的配置-->
<action name="Login" class="com.it.ssh.web.struts2.LoginAction" method="login">
            <result name="success">/success.jsp</result>
            <result name="fail">/fail.jsp</result>
        </action>

Struts2核心文件

​ struts2共有三个部分的源代码

  • 核心部分源代码
    • core目录下的源代码
  • xwork核心部分源代码
  • 插件源代码
  1. 导源码:
  2. 配置dtd约束的提示功能

struts2完整执行流程

  1. 浏览器发送请求到服务器
  2. 服务器中的拦截器interceptor被加载,拦截请求
  3. 加载struts.xml,根据struts.xml的配置访问对应的action.
  4. 执行action
  5. 根据返回值找到对应的result标签
  6. 根据result属性来跳转视图.

struts2的配置文件struts.xml

  1. web.xml
  2. struts.xml
  3. struts-default.xml
  4. default.properties

加载顺序

第一个加载的是 default.properties 文件
​ 位置:strtus2-core.jar 包 org.apache.struts2 包下
​ 作用:主要是声明了 struts2 框架的常量

第二个加载的是一批配置文件

​ Strtus-default.xml
位置:struts2-corl.jar
作用:声明了 interceptor result bean

​ Strtus-plugin.xml
位置:在 strtus2 的插件包中
作用:主要用于插件的配置声明

​ Strtus.xml
位置:在我们自己的工程中作用:用于我们自己工程使用 strtus2 框架的配置
第三个加载的是自定义的 strtus.properties

位置:都是在自己工程的 src 下
作用:定制常量
第四自定义配置提供
第五加载的是 web.xml 配置文件

​ 主要是加载 strtus2 框架在 web.xml 文件中的相关配置.
第六加载 bean 相关配置

配置文件加载流程

  1. default.properties
  2. struts-default.xml
  3. struts-plugin.xml
  4. struts.xml
  5. web.xml

重点掌握

  • struts-default.xml能找到,知道里边有什么东西.
  • default.properties找到,知道里边有什么.
  • struts.xml每一个标签和每一个属性的作用.

struts.xml

package标签配置

  • name属性:定义一个包的名称,必须唯一
  • namespace属性:主要是与action标签的name属性联合使用来确定一个action的访问路径.
  • extends属性:指定继承自哪个包,一般值是struts-default.struts-default包是在struts-default.xml文件中声明的.
  • abstruct:代表当前包是一个抽象的,主要是用于被继承.

action标签配置

  • name属性:主要是与package的namespace属性联合使用来确定一个action的访问路径.
  • class属性:作用是用于指示当前的action类.这个类的全路径.
  • method属性:用于指示当前的action类中的哪个方法执行.

result标签配置

​ 主要用于指示结果视图的

  • name属性:作用与action类的method方法的返回值进行匹配,来确定跳转路径.
  • type属性:用于指定跳转方式(redirect是重定向,不写默认是转发)

关于action配置中的class与method的默认值

<!--
name属性的默认值是success
type的默认值是转发dispatcher.
-->
<action >
    <result>/success.jsp</result>
</action>

​ 如果查找不到指定的 class 及对应的 method 就会执行ActionSupport 类中的 execute 方法。

​ 在这个类的 execute 方法中默认返回的是”success”也就是说,result 的 name 属性默认值是 success,默认的跳转方式是请求转发 dispatcher

常量配置

default.properties文件中定义了struts2框架的常用常量

  1. 可以在src下创建一个struts.properties
  2. 在web.xml下也可以
在filter标签中:
<filter>
  <filter-name></filter-name>
  <filter-class></filter-class>
  <init-param>
    <param-name></param-name>
    <param-value></param-value>
  </init-param>
</filter>
  1. 可以直接在struts2.xml中声明
在struts标签里
<contant name="" value=""></contant>

struts.i18n.encoding----编码(utf-8)
struts.action.extension---指定访问(action,,)struts2框架路径的拓展名
struts.devMode---开启关闭(true/false)
配置这项后会提供更加详细的错误信息,以及修改struts.xml后不需要重启服务器

注意:后加载的配置文件中的常量会将先加载的常量覆盖

action类的创建方式

普通类

​ 在开发中不用.

继承(ActionSupport)

​ struts2中的action,主要是完成业务逻辑操作,替代了Servlet的作用

  1. 如何创建一个struts2的action
  2. 如何访问一个struts2的action

action类的创建方式详解

  1. 创建一个pojo类:

    ​ Pojo(plani Ordinary java object)简单的JAVA对象:就是没有实现任何接口,没有继承任何类的一个类.

    优点:无耦合

    缺点:所有的功能都要自己完成

  2. 实现Action(struts2中的)接口

    ​ 在Action接口中定义了5个常量,1个execute方法.

    5个常量都是默认的5中结果视图

    <result name="常量值">

    • ERROR:错误视图
    • INPUT:它是struts2框架中interceptor发现问题后会访问的一个视图.
    • LOGIN:登陆视图.可以在权限操作中使用
    • NONE:什么都不做
    • SUCCESS:成功视图

    优点:耦合度低

    缺点:还是需要自己完成功能

  3. 创建一个类继承ActionSupport类

    ActionSupport类也实现了Action接口

    我们在开发中一般使用这种方案

    优点:功能多.

    ​ 例如:表单校验,错误信息设置,国际化

    缺点:耦合度高.

action类的访问

  1. 配置方式指定method(前边的知识)
标签访问
如果没有method访问execute
  1. 通配符(最常用)

关键字:*

<action name="XXX_*" class="" method="{1}"></action>
*代表想调用的方法名
{1}的作用获取第一个*号的值
<action name="*_*" class="XXX.XXX.XXX.{1}" method="{2}"></action>
*号的值用这种方式获得

​ 不建议使用太多的*,带来了阅读的障碍.不便于理解

​ 使用*简化操作方案,它对名称规范必须进行一个统一

拓展--动态方法的调用

个人不建议使用动态方法调用!!

Struts2的数据封装

属性驱动

  • 直接在action类中提供与请求参数匹配属性提供get/set方法
  • 在action类中创始一个javaBean,对其提供get/set。在请求页面上要进行修改,例如:user.username user.password

以上两种方法的优缺点:

  • 第一种方法比较方便简单,但是在实际操作中我们需要将action的属性赋值给模型(javaBean)
  • 第二种,不需要给javabean直接赋值,但是它要求在页面上必须使用ognl表达式,就存在页面不通用的问题。

模型驱动

让action实现一个接口ModelDrivern

实例化模型对象(new一个JavaBean)

重写getModel方法返回一个实例化的模型

​ 对于模型驱动和属性驱动相比在实际开发中使用较多,但是它只能对一个模型数据进行封装。

关于 <result> 标签

result标签中的type属性标识页面跳转的方式:

  • dispatcher 默认,转发
  • redirect 重定向
  • chain 请求转发,针对action跳转
  • redirectAction 类似与重定向,针对action

全局result

<!--配置全局的result-->
<global-results>
    <result name="" type=""></result>
</global-results>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容

  • 概述 什么是Struts2的框架Struts2是Struts1的下一代产品,是在 struts1和WebWork的...
    inke阅读 2,225评论 0 50
  • 本文包括: 1、Struts 2 概述2、Struts 2 快速入门3、Struts 2 的执行流程4、配置 st...
    廖少少阅读 2,932评论 3 13
  • 详谈 Struts2 的核心概念 本文将深入探讨Struts2 的核心概念,首先介绍的是Struts2 的体系结构...
    可爱傻妞是我的爱阅读 1,101评论 0 2
  • 1、struts2工作流程 Struts 2框架本身大致可以分为3个部分: 核心控制器FilterDispatch...
    重山杨阅读 1,508评论 0 38
  • 好多人说不相信“人性”!其实他们不相信的不是人性,而是他们所期望的真正纯真的人性。 他们不相信人性,实在是怪错了人...
    卫老板阅读 275评论 0 0