美文网首页
Struts2上

Struts2上

作者: Percy_Gemini | 来源:发表于2017-10-26 09:02 被阅读0次

    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>
    

    相关文章

      网友评论

          本文标题:Struts2上

          本文链接:https://www.haomeiwen.com/subject/ujshpxtx.html