临近大学毕业了,在毕业之前做点大学学到的知识和总结。如有哪些方面存在错误还望大神见谅。
首先,这里想从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 | 返回普通文本类容 |
•一个Web 应用可能有成百上千个 action 声明. 可以利用struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系
•通配符映射规则
–若找到多个匹配, 没有通配符的那个将胜出
–若指定的动作不存在, Struts 将会尝试把这个 URI与任何一个包含着通配符 *的动作名及进行匹配
–被通配符匹配到的 URI 字符串的子串可以用{1}, {2} 来引用.{1} 匹配第一个子串, {2} 匹配第二个子串…
–{0} 匹配整个URI
–若 Struts找到的带有通配符的匹配不止一个, 则按先后顺序进行匹配
* 可以匹配零个或多个字符, 但不包括/ 字符. 如果想把 / 字符包括在内, 需要使用 **. 如果需要对某个字符进行转义, 需要使用\.