Struts2知识点

一、Struts2简介

Struts2是轻量级的MVC框架,主要解决了请求分发的问题,重心在控制层和表现层。低侵入性,与业务代码的耦合度很低。Struts2实现了MVC,并提供了一系列API,采用模式化方式简化业务开发过程。

二、struts2内部运行流程

这里写图片描述
(1)客户端发出HTTP请求
(2)然后请求被核心过滤器StrutsPrepareAndExecuteFilter拦截
(3)核心过滤器将请求转发到Action映射器,Action映射器负责识别当前的请求是否需要交由Struts2处理。
(4)Action映射器返回需要struts2处理的信息,StrutsPrepareAndExecuteFilter会创建一个Action代理
(5)Action代理并不知道执行哪一个Action,它会向配置管理器询问调用哪一个Action,配置管理器会从struts.xml读取我们配置的Action信息。
(6)Action代理创建相关请求的Action对象,调用相关的方法之前,struts2的一系列拦截器会帮我们做一些操作,例如获取请求参数等。
(7)然后调用execute方法根据返回的字符串去匹配相应的页面,
(8)页面可以获取一些页面模板,然后生成最终页面,再倒序的执行拦截器的后续操作
(9)最后生成HTTP响应内容

三、搭建Struts2运行环境

①新建Web项目,导入Struts2需要使用的jar包。
②在web.xml中配置Struts2的核心Filter,配置struts2的核心拦截器。

<?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">

 <!-- 配置Struts2的核心过滤器 -->
 <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>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
 </filter-mapping>

</web-app>
③创建struts.xml(格式可以参考核心包根路径下的DTD文件,struts-default.xml),配置Struts.xml。
<!-- 解释说明 -->
<struts>
    <!--
        package:包,用于对Action进行封装
        name:包名,根元素下可以有多个包,彼此不能重名
        extends:继承,用于指定继承的包,相当于将继承包下的配置信息复制到当前包
        namespace:命名空间,用于规定Action的访问路径,必须“/”开头    -->
    <package name="test01" namespace="/test01" extends="struts-default">
        <!--action:业务控制器,用于注册业务控制器组件
            name:action名称,用于规定Action的访问路径
            class:业务控制器组件,用于指定业务控制器对应的类
            method:方法,用于指定访问当前action时要调用的方法
            *请求URL:http://ip:port/projectName/namespace/ActionName.action
        -->
        <action name="hello" class="test01.konrad.action.HelloAction" method="execute">
            <!--result:输出组件,用于转发、重定向、直接输出
                name:名称,一个action下可以有多个result,彼此不能重名
                默认值转发,元素内设置转发的页面
            -->
            <result name="success">
                /hello.jsp
            </result>
        </action>
    </package>
</struts>
<!--  SSH中的实例 -->
<?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>

    <constant name="struts.devMode" value="false" />

    <package name="shop" extends="struts-default" namespace="/">
        <!-- 配置自定义拦截器 -->
        <interceptors>
            <interceptor name="privilegeInterceptor" class="cn.itcast.shop.interceptor.PrivilegeInterceptor"/>

        </interceptors>

        <global-results>
            <result name="msg">/WEB-INF/jsp/msg.jsp</result>
            <result name="login">/admin/index.jsp</result>
        </global-results>

        <!-- 配置首页访问的Action -->
        <action name="index" class="indexAction">
            <result name="index">/WEB-INF/jsp/index.jsp</result>
        </action>
  </struts>

四、Action

使用struts 2框架,主要的开发都是围绕action进行的,我们编写的action通常需要实现com.opensymphony.xwork2.Action接口。

1.action属性

action中有一个映射框架,主要是讲url映射到对应的action类,action的配置主要在struts.xml文件中编写,所有action的属性如下:
这里写图片描述

2.三种实现action的方式:

2.1 普通的POJO类(没有继承没有实现)——不常用
2.2 实现Action接口-基本不使用 ——不常用
Action接口中定义了5个常量,5个常量的值对应的是5个逻辑视图跳转页面(跳转的页面还是需要自己来配置),还定义了一个方法:execute方法。

5个逻辑视图的常量

  • SUCCESS – 成功.
  • INPUT – 用于数据表单校验.如果校验失败,跳转INPUT视图.
  • LOGIN – 登录.
  • ERROR – 错误.
  • NONE – 页面不转向.

2.3 继承ActionSupport类 ——常用

<!-- SSH中的 后台登录Action 实例  -->
import com.opensymphony.xwork2.ActionSupport;
public class AdminUserAction extends ActionSupport implements
        ModelDriven<AdminUser> {
    // 模型驱动使用的对象
    private AdminUser adminUser = new AdminUser();

    public AdminUser getModel() {
        return adminUser;
    }
<!--  SSH 中 的 Struts.xml -->
<!-- 后台登录Action -->
        <action name="adminUser_*" class="adminUserAction" method="{1}">
            <result name="loginFail">/admin/index.jsp</result>
            <result name="loginSuccess" type="redirect">/admin/home.jsp</result>
            <interceptor-ref name="privilegeInterceptor">
                <param name="excludeMethods">login</param>
            </interceptor-ref>
            <interceptor-ref name="defaultStack"/>
        </action>

五、Result

1.介绍:

用于做输出的组件,用于向页面输出一些内容,转发、重定向可以理解为特殊方式的输出。每一个Result实际上是一个类,这些类都实现了共同的接口Result。Struts2预置了10种类型的Result,定义在strtus-default.xml

2.Result类型

a)dispatcher:用于转发的result,可以将请求转发给JSP,这种类型的Result对应的类为ServletDispacherResult,通过default=”true”指定该Result为Struts2默认的Result类型。
b)stream:用于向页面输出二进制数据,此种类型的Result可以将二进制数据输出到请求发起端,对应类为StreamResult
c)redirectAction:用于将请求重定向给另外一个Action,对应类为
ServletActionRedirectResult
d)json:用于向页面输出json格式的数据,可以将json字符串输出到请求发起端。对应类为JSONResult。json需要导包,修改package继承关系为json-default。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值