Struts2详述一(struts2基础及2个核心)

article/2025/9/30 10:28:18

临近大学毕业了,在毕业之前做点大学学到的知识和总结。如有哪些方面存在错误还望大神见谅。微笑

首先,这里想从SSH这三大框架说起。首选从最简单的Struts2说起。这一篇我将讲述struts2一些基础及2个核心(Action和result),下篇我们将着重讲述struts2基石OGNL和相关标签等知识。

其实,在我学完Java Web(Servlet+Jsp+JSTL+Filter)之后,就已经可以用Web最经典的Mvc设计模式,实现相关Web项目。但是代码的耦合程度,难以实现企业级Web。

MVC设计模式概览(学完Java Web后对Mvc的理解)

实现MVC(Model、View、Controller)模式的应用程序由 3 大部分构成:

–模型:封装应用程序的数据和业务逻辑 POJO(Plain Old Java Object)
–视图:实现应用程序的信息显示功能 JSP
–控制器:接收来自用户的输入,调用模型层,响应对应的视图组件 Servlet/ Filter
好了,该说说struts2了
1:Struts2概述
Struts2是一个用来开发 MVC 应用程序的框架. 它 提供了 Web 应用程序开发过程中的一些常见问题的解决方案:
–对来自用户的 输入数据进行合法性验证
统一的布局
可扩展性
国际化和本地化
–支持 Ajax
表单的重复提交
文件的上传下载
2:怎样使用Struts2
①:Struts2核心一Action
•action:应用程序可以完成的每一个操作. 例如: 显示一个登陆表单; 把产品信息保存起来
•Action类: 普通的 Java类, 可以有属性和方法, 同时必须遵守下面这些规则:
属性的名字必须遵守与JavaBeans 属性名相同的命名规则. 属性的类型可以是任意类型. 从字符串到非字符串(基本数据库类型)之间的数据转换可以自动发生
–必须有一个不带参的构造器
至少有一个供struts 在执行这个 action时调用的方法
同一个 Action 类可以包含多个action 方法.
Struts2 会为每一个 HTTP请求创建一个新的 Action 实例
②:Struts2访问 web 资源(即:HttpSession, HttpServletRequest, HttpServletResponse )
Servlet API 解耦的访问方式
通过com.opensysmphony.xwork2.ActionContext
•通过Action 实现如下接口:
org.apache.struts2.interceptor.ApplicationAware
org.apache.struts2.interceptor.RequestAware
org.apache.struts2.interceptor.SessionAware
•为了避免与Servlet API 耦合在一起, 方便Action 做 单元测试, Struts2 对 HttpServletRequest, HttpSession 和 ServletContext 进行了封装, 
构造了3 个 Map对象来替代这 3 个对象, 在 Action 中可以直接使用HttpServletRequest, HttpServletSession, ServletContext 对应的
Map 
对象来保存和读取数据.  
通过ActionContext 访问Web 资源
ActionContext 是 Action 执行的上下文对象, 在 ActionContext 中保存了Action 执行所需要的 所有对象, 包括parameters, request,session, application 等.
•获取 HttpSession 对应的Map 对象: 
–publicMap getSession()
•获取 ServletContext 对应的Map 对象:
–publicMap getApplication()
•获取请求参数对应的 Map 对象:
–public Map getParameters()
•获取 HttpServletRequest 对应的Map 对象:
–publicObject get(Object key): ActionContext 类中没有提供类似getRequest() 这样的方法来获取HttpServletRequest 对应的Map 对象. 
要得到 HttpServletRequest 对应的Map 对象, 可以 通过为 get() 方法传递“ request” 参数实现
通过实现 Aware 接口访问 Web 资源
•Action类通过可以实现某些特定的接口, 让 Struts2 框架在运行时向Action 实例注入 parameters,request, session 和 application 对应的 Map对象  
通过与Servlet 耦合的访问方式
•直接访问Servlet API 将使Action 与 Servlet 环境耦合在一起,  测试时需要有 Servlet 容器, 不便于对Action 的单元测试.
•直接获取HttpServletRequest 对象:
ServletActionContext.getRequest()
•直接获取HttpSession 对象
–ServletActionContext.getRequest().getSession()
•直接获取ServletContext 对象
–ServletActionContext.getServletContext()
•通过实现ServletRequestAware, ServletContextAware 等接口的方式
③:Struts2核心二result
•每个action 方法都将返回一个 String 类型的值, Struts 将根据这个值来决定响应什么结果.
•每个action 声明都必须包含有数量足够多的 result 元素, 每个result 元素分别对应着 action方法的一个返回值.
•result元素可以有下面两个属性
–name:结果的名字, 必须与Action 方法的返回值相匹配, 默认值为success
–type:响应结果的类型. 默认值为dispatcher
dispatcher org.apache.struts2.dispatcher.
ServletDispatcherResult
 默认结果类型,用来呈现JSP页面
chain com.opensymphony.xwork2.
ActionChainResult
 将action和另外一个action链接起来
freemarker org.apache.struts2.views.freemarker.
FreemarkerResult
 呈现Freemarker模板
httpheader org.apache.struts2.dispatcher.
HttpHeaderResult
 返回一个已配置好的HTTP头信息响应
redirect org.apache.struts2.dispatcher.
ServletRedirectResult
 将用户重定向到一个已配置好的URL
redirectAction org.apache.struts2.dispatcher.
ServletActionRedirectResult
 将用户重定向到一个已定义好的action
stream org.apache.struts2.dispatcher.
StreamResult
 将原始数据作为流传递回浏览器端,
该结果类型对下载的内容和图片非常有用
velocity org.apache.struts2.dispatcher.
VelocityResult
 呈现Velocity模板
xslt org.apache.struts2.views.xslt.
XSLTResult
 呈现XML到浏览器,
该XML可以通过XSL模板进行转换
plaintext org.apache.struts2.dispatcher.
PlainTextResult
 返回普通文本类容
result相关的通配符映射
•一个Web 应用可能有成百上千个 action 声明. 可以利用struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系
•通配符映射规则
–若找到多个匹配, 没有通配符的那个将胜出
若指定的动作不存在, Struts 将会尝试把这个 URI与任何一个包含着通配符 *的动作名及进行匹配 
被通配符匹配到的 URI 字符串的子串可以用{1}, {2} 来引用.{1} 匹配第一个子串, {2} 匹配第二个子串…
{0} 匹配整个URI
–若 Struts找到的带有通配符的匹配不止一个, 则按先后顺序进行匹配
* 可以匹配零个或多个字符, 但不包括/ 字符. 如果想把 / 字符包括在内, 需要使用 **. 如果需要对某个字符进行转义, 需要使用\.

http://chatgpt.dhexx.cn/article/lwPyN8vx.shtml

相关文章

【面试】【Struts2常见问题总结】【02】

【常见面试问题总结目录>>>】 031 struts2如何对指定的方法进行验证? 1.validate()方法会校验action中所有与execute方法签名相同的方法;   2.要校验指定的方法通过重写validateXxx()方法实现, validateXxx()只会校验action中方法…

【面试】【Struts2常见问题总结】【01】

【常见面试问题总结目录>>>】 001 请简述struts1的工作流程和机制: Struts的工作流程:   在web应用启动时就会加载初始化ActionServlet,ActionServlet从   struts-config.xml文件中读取配置信息,把它们存放到各种配置对象   当ActionServlet接收到…

一道Struts面试题

题目是这样的 有两张表 一张为新闻类别表 有2个字段: nid(pk) sort 有一张新闻内容表 有三个字段 cid(pk) nid(fk) title content 要求通过下拉列表框的方法选择新闻类别然后显示该类别的新闻标题(在当前…

Java面试----2018年最新Struts2面试题

1、描述Struts2的工作原理 答:客户端发送请求--》请求经过一系列过滤器--》FilterDispatcher通过ActionMapper来决定这个Request需要调用哪个Action --》FilterDispatcher把请求的处理交给ActionProxy--》通过ConfigurationManager询问Struts配置文件(Struts.xml&a…

Struts2面试问题

转载自 Struts2面试问题 1.什么是Struts2? Apache Struts2是一个用Java构建Web应用程序的开源框架。Struts2基于OpenSymphony WebWork框架。它从Struts1中得到了很大的改进,使其更加灵活,易于使用和扩展。Struts2的核心组件是Action&…

查看es的tcp和http端口

1、登录linux部署服务器,用命令查找配置文件elasticsearch.yml,如图 find -name elasticsearch.yml 2、进到elasticsearch.yml文件的目录 3、查看tcp,http端口

w10查看端口_Windows 10系统如何查看已打开的端口

最近Win10用户反映,电脑很经常中病毒,用户表示并没有在电脑上插入U盘,也没有打开不安全的网页,但就是一直中毒,这让用户非常苦恼。其实,出现这一问题,可能与电脑开启了一些端口有关,…

使用frp端口映射实现内网穿透(SSH、HTTP服务)

使用frp端口映射实现内网穿透(SSH、HTTP服务) 一、下载 通过内网穿透的原理和实现方式的学习我们已经明白了内网穿透的原理,想要实现内网穿透就需要让内网实现与具有公网IP的设备进行绑定。 我们这里使用frp(一个专注于内网穿透的高性能的反向代理应用…

rinetd端口转发工具

前言 环境:Centos7.9 rinetd.tar.gz 在生产环境中,为了网络安全,我们需要进行端口转发,而rinetd是一款很好用的端口转发工具,下面我们就来讲解一下如何使用rinetd来实现端口转发。rinetd的下载地址:http:…

电脑端口详解

计算机端口号总数:65535,一般用到的是1~65535,0一般不使用 0-1023: 系统端口,也叫公认端口,这些端口只有系统特许的进程才能使用;1024~65535为用户端口: 1024-5000: 临时…

HTTP服务占用80端口的解决办法,找出占用80的元凶。

电脑没有运行web服务,但是80端口被占用,导致运行使用80端口的软件的时候提示80端口监听失败。 网络上搜索一般给的办法是 net stop HTTP,把windows的http API禁用,这样确实80端口没有占用了,但是所有依赖http的服务就…

python端口扫描

文章目录 python网络编程socket函数服务器端套接字函数客户端套接字函数公共用途套接字 C/S架构实践 编写端口扫描器多线程端口扫描2.0 python网络编程 socket又称“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答请求。使主机间或者一台计算机上的进…

https默认端口443_为什么选择80作为默认HTTP端口,选择443作为默认HTTPS端口?

https默认端口443 While many of us are familiar with various ports being assigned for specific purposes or uses, we may not know the particular reason why they were chosen. Today’s SuperUser Q&A post has the answers to a curious reader’s questions. 尽…

HTTP协议

目录 前置 1.网络划分 1)局域网 2)广域网 2.IP地址和端口号 1)IP地址 2)端口号 3.网络通信 一,概念 1.HTTP 2.二进制数据和文本 二,抓包 1.网络抓包 2.URL(统一资源定位器&#…

C语言字符串数组赋值错误

直接上代码&#xff1a; #include"stdio.h"int main(){char a[10];for(int i 0; i<10;i){printf("第%d个&#xff1a;",i);scanf("%c",&a[i]);}return 0; }经典的错误&#xff0c;标准的零分&#xff01; 这样的赋值手法&#xff0c;是…

c 语言定义2维字符串数组赋值,二维数组赋值字符串 c 语言 二维字符串数组赋值问题...

C语言中二维字符数组应该怎样赋值&#xff1f; c语言二维数组如何定义字符串&#xff1f;&#xff1f;&#xff1f;&#xff1f;急。。。 二维字符数组的定义格式为&#xff1a;char 数组名[第一维大小][第二维大小]; 例如&#xff1a;char c[3][10]; //定义了一个3行10列的二维…

关于中字符串常量给字符数组赋值

结论 在定义字符数组时&#xff0c;可以同时初始化字符数组&#xff0c;即用字符串常量给字符数组赋值在定义完之后&#xff0c;则不允许用字符串常量给字符数组赋值。如需赋值&#xff0c;则使用strcpy()函数&#xff08;需包含头文件string.h&#xff09; #include <std…

C语言:字符数组赋值

字符数组&#xff1a;C语言学习中较麻烦的部分&#xff0c;C语言中没有字符串这种类型的数组&#xff0c;字符串只能存储在字符型数组中。 1、定义时直接赋值 char a[10]{"I LOVE C"};//可以直接省去花括号直接写成char a[10]I LOVE C"; 注意&#xff1a;此处的…

【C#】 Convert.ToInt16 、Convert.ToInt32、Convert.ToInt64 区别

一般写程序是用的都是Convert.ToInt32&#xff0c;为什么呢&#xff1f; 1.Convert.ToInt是数据类型转换成int类型 2. 有三种方法toint16,toint32,toint64 int16-数值范围&#xff1a;-32768 到 32767 int32-数值范围&#xff1a;-2,147,483,648 到 2,147,483,647 …

C# 中int short Int16 Int32 Int64详解

Java中没有Int32,Int64,,只有int,short,long Java中int就代表Int32 ,short就代表Int16&#xff0c;long就代表Int64 首先&#xff0c;几个基本的关键字&#xff1a; Int16 short, 占2个字节. -32768 ~ 32767 Int32 int, 占4个字节. -2147483648 ~ 2147483647 Int64 lon…