struts2框架基础

struts2

struts2框架的概念

充当了MVC中Controller(控制器),可替换原有的Servlet(Action)

struts2程序

开发环境搭建

①获得Struts2开源框架(OpenSource)附带源代码。下载地址:www.apache.org

Version:2.x

这里写图片描述

②项目中引入Jar包: javassist 分析、编辑和创建字节码类库

这里写图片描述

1). Struts2的核心Jar包(struts2-core-2.3.15.1)。

2). 第三方依赖Jar包(Strtus2框架的设计者在实现过程当中,所使用的其他厂商提供的工具或Jar包)

③导入Struts2的配置文件:struts.xml

路径位置:

–struts2-blank.war

扫描二维码关注公众号,回复: 3051555 查看本文章

WEB-INF

classes

struts.xml

注意:将struts.xml放置在项目的src中

④导入web.xml,或在原生web.xml中配置struts2的核心过滤器,让struts2框架生效。

这里写图片描述

这里写图片描述

⑤完成struts2的(Controller层)编码

I、实现Action接口、覆盖execute()方法

public class MyFirstAction implements Action{
    @Override
    public String execute() throws Exception {
        System.out.println("---this is my first action------");
        return "success";
    }
}

II、配置struts.xml

<package name="basic" extends="struts-default">
        <!-- action中name代表访问路径(别名),class代表真实的访问类 -->
        <action name="firstAction" class="controller.MyFirstAction">
        <!-- action标签包含result标签,其中的name属性表示控制器中execute()方法返回值标记(目标文件的路径名称) -->  
        <result name="success">/index.jsp</result>
        </action>
    </package>

III、通过Action中的返回值和 < result > 完成页面跳转

这里写图片描述

这里写图片描述

IV、通过Struts2的工具类ServletActionContext获得作用域对象、并收集数据

这里写图片描述

Action对象的创建

a、多次请求同一个Servlet只创建一个Servlet对象

b、多次请求同一个Action对象会创建多个Action对象(每次请求都会创建一个)

struts2的跳转

1、Action跳转到jsp页面

I、dispatcher(默认的跳转方式):URL不变

这里写图片描述

II、redircet(重定向):URL改变

这里写图片描述

2、Action到Action之间的跳转

I、chain(Action中的转发):URL不变

这里写图片描述

result的值为将要跳转的action的name值,可以转发,result中必须手写type=”chain”


II、redirectAction(Action中的重定向):URL改变

这里写图片描述

result的值为将要跳转的action的name值,可以重定向,result中必须手写type=”redirectAction”

package包标签

作用

I、按功能划分模块,管理不同 标签

II、功能的复用。(拦截器)

这里写图片描述

package添加namespace后访问路径必须添加namespace,否则出现404

Action 间的跨包跳转

跨包跳转方式:chain | redirectAction

这里写图片描述

全局跳转 global-results 标签

I、标签位置: 标签属于的子标签,定义在所有之前。

<global-results>
    <result name="success">/success.jsp</result>
</global-results>

在整个中,如果存在没有的标签,则使用全局跳转

II、注意:

​ ①如果配置了局部则优先执行

​ ②全局跳转只在本包有效

​ ③全局跳转必须定义在所有Action之前

​ ④全局变量一定是在后期开发中,重构项目时使用的

struts2处理字符集乱码

一、Struts2处理字符集乱码:

1、请求乱码:

​ I. get请求:超链、地址栏、表单(method=”get” | 默认)

​ 解决方案:(tomcat/conf/server.xml –> URIEncoding=UTF-8)。

​ II. post请求:表单(method=”post”)

​ 解决方案:request.setCharacterEncoding(“UTF-8”); | Filter中解决

2、 响应乱码:

​ I. 代码:response..setContentType(“text/html ;charset=UTF-8”); | Filter中解决

​ II. JSP:

<%@ pagepageEncoding="UTF-8" contentType="text/htm;charset=UTF-8"%>

3、总结:Struts2自动对post请求执行UTF-8字符编码处理。

struts2获取Client数据【重点】

1、Action实例变量接收零散数据

这里写图片描述

优势:使用方便、自动转换成匹配的数据类型。

注意:对于日期类型而言,顺序必须是(年、月、日),常用格式(yyyy-MM-dd)

XXXAction中同时需要提供响应实例变量的get和set方法

2、Action实例变量接收对象数据

这里写图片描述

注意:JSP页面中表单元素的name值应该为:实例变量(Entity).实体属性名。例如:user.username

XXXAction中同时需要提供响应实例变量的get和set方法

3、Action实例变量接收List、Set、数组数据:hobbys tags

这里写图片描述

4、Action实例变量接收Map数据:citys

这里写图片描述

DMI(Dynamic Method Invocation):动态方法调用

这里写图片描述

配置标签中的method方法

这里写图片描述

继承ActionSupport完成Action类

这里写图片描述

DMI 高级配置(使用通配符)

这里写图片描述

通配符跨包跳转

这里写图片描述

OGNL(Object-Graph Navigation Language):对象导航语言

I、语法与EL相似、功能强大、简单的表达式语言

II、可直接访问对象的getters方法、还可直接访问对象的普通方法

III、OGNL是一套独立的、完整的技术组件、不属于Struts本身

总结:

I、List:直接书写属性名称,即可完成List中的逐个对象查找,以及目标属性的获取。

II、 Map:#为前缀+key查找Map中的目标对象,再导航查找各个属性。


ValueStack(值栈)

概念

Struts2中提供的逻辑上的存储空间,统筹管理了一次请求中所涉及到的所有

数据。

这里写图片描述

值栈的特点、好处:

与视图层解耦(JSP基于内置对象获取作用域数据,运行效率低),不同的视图层获取数据的方式不同,没有统一的访问形式。

ValueStack提供两个存储空间,Root区是常用的栈结构;Context区是操作作用域的键值结构。可OGNL对ValueStack进行便利的访问。

每次请求某个Action时,会产生独立的ValueStack对象。

值栈的操作

Root区

栈(Last In First Out),访问时,直接获取栈顶元素。Root下标代表栈的起始,获得到的是起始下标的子集

这里写图片描述

这里写图片描述

Context 区

Struts2在ValueStack中提供Map格式存储空间,主要用来操作JavaEE作用域

这里写图片描述


值栈操作常用的书写方式

这里写图片描述

ValueStack使用经验:

1、操作Root:vs.push()、Action中声明实例变量。

2、操作Context:vs.setValue(“expr”, Object);

将对象存入已有的作用域中(request、session、application)

这里写图片描述


Struts2标签:OGNL表达式 +Struts2标签(页面数据展示、逻辑处理)

  1. 作用:逻辑处理,用以替代EL表达式。

​ 2. 使用方式:

​ I. 引入标签库:

<%@taglib uri="/struts-tags" prefix="s" %>

​ II. 选择标签:

1). 单条数据展示:

这里写图片描述

2). 条件判断:

这里写图片描述

3). 遍历:

这里写图片描述

这里写图片描述

这里写图片描述

struts2高级标签

获取日期类型、并格式化

这里写图片描述

​ URL重写

1). JSP到JSP:

这里写图片描述

2). JSP到Action:

这里写图片描述

将带有数据的动态页面汇总在同一个页面中

这里写图片描述


实战:商城首页内容显示

这里写图片描述

这里写图片描述


struts2开发结构

这里写图片描述


Struts2拦截器(Interceptor)

拦截请求及响应。可将多个Action中共有的代码提取到拦截器,从而减少Action中

的代码冗余。(和Filter作用相同,如:权限验证)

实现

实现Interceptor接口

这里写图片描述

配置文件书写

这里写图片描述

拦截响应:

ai.invoke()方法之前执行的代码片段,称为拦截请求;

ai.invoke()方法之后执行的代码片段,称为拦截响应。

中断请求

这里写图片描述

拦截器栈

这里写图片描述

引用默认的拦截器栈
<defult-interceptor-ref name="MyStack" />
Struts2.xml中标签的书写顺序

​ I. 拦截器

​ II. 拦截器栈

​ III. 默认引用的拦截器(栈)

​ IV. 全局跳转

​ V. Action

Struts2的拦截体系:

​ I. 系统拦截器:struts2-core-2.3.15.1.jar的根中struts-defalt.xml

​ II. 继承,引用此包中的默认拦截器栈

​ III. 注意:如果添加自定义拦截器,同时需要使用默认拦截器栈,则需要在配置文件中依次引用。


Cookie拦截器

这里写图片描述

I、Cookie的存储

这里写图片描述

II、获取Cookie

实现接口CookieAware

这里写图片描述

III、获取Cookie的Action配置:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_38928944/article/details/80572115