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

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

首先,这里想从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找到的带有通配符的匹配不止一个, 则按先后顺序进行匹配
* 可以匹配零个或多个字符, 但不包括/ 字符. 如果想把 / 字符包括在内, 需要使用 **. 如果需要对某个字符进行转义, 需要使用\.
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

指挥官飞飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值