序
猜想
HTTPHTMLUser Agents
HTTP 请求/响应周期
Java语言和应用框架
JavaBeans
属性文件和资源绑定
JavaServlet
介绍
Struts的历史
MVC模式
Struts控制流程
创建模型组件
概述
JavaBean和作用域
ActionForm Bean
系统状态Bean
商业逻辑Bean
创建视图组件
概述
国际化信息
Forms 和 FormBeans的交互
其他表示层技术
创建控制(Controller)组件
概述
ActionServlet
ActionForm类
Action类
异常处理器
插件类
ActionMapping的实现
编写Action Mappings
在页面中使用ActionMapping
在ActionMapping中使用通配符
公共的Log 接口
配置应用
概述
Struts配置文件
为应用配置模块
WEB应用部署描述符
序
猜想
本手册适合于有创建Java Web 应用经验的Web 开发人员在开始学习Struts之前你应该了解如下的技术:
HTTPHTMLUser Agents
HTTP 请求/响应生命周期
Java语言和应用框架
JavaBeans
属性文件和资源绑定
Java Servlets
Java Server Pages JSP Tag Librariy
XML
HTTPHTMLUser Agents
WWW是基于超文本传输协议和超文本标识语言建立的
用户代理比如浏览器他们使用HTTP去请求一个文档然后格式化显示
HTTP 请求/响应周期
对于Web开发者来说理解HTTP的请求和响应周期是很重要的你要使用HTTP发送一个请求然后服务器给你一个响应当你创建WEB应用时你需要返回一个响应对象来回应请求
Java语言和应用框架
Struts是用JAVA编写的JAVA是面向对象的语言而Struts充分利用了面向对象的技术除此而外JAVA支持线程如果你很好的掌握了JAVA特别是面向对象编程和线程这将会有益于最有效的使用Struts和这个手册
JavaBeans
象大多数JAVA应用一样大多数Struts对象都是JavaBean遵循JavaBean设计模式使得Struts更容易被开发者和JAVA开发工具使用尽管JavaBean的最初是用来开发可视元素的但它对开发可重用组件也非常有益
反射和内省
反射是决定什么样的函数或域存在某对象中的方法内省是反射的特殊形式
使用内省就可以知道哪些方法将会被其他对象使用(如gettersetter)
Struts框架使用内省来转换HTTP参数到JAVABEAN的属性中和把JAVABEAN中的属性数据组装到HTML的域
MAP
JAVABEAN把数据存在属性中JAVABEAN虽然是灵活而功能强的对象但它并不是编程者存储数据的唯一对象另一个熟为人知的对象是javautilMapMap它是一个名字/值对的数据集合它经常用来存储动态数据
DynaBeans
DynaBeans集成了JAVABEAN 的扩展性和MAP的灵活性编写JAVABEAN要创建一个新类并且要为每个属性编写方法DynaBeans则将属性放在XML中配置
在Struts应用中你可以使用DynaBeans来描述你的HTML Form这个策略可以避免编写普通的JAVABEAN来存储很简单的属性
属性文件和资源绑定
JAVA应用包括WEB应用的配置经常使用属性文件来完成 Struts的消息资源都是通过资源绑定和属性文件实现的
JAVA资源绑定使用一个或多个属性文件来实现应用的国际化
JavaServlet
由于JAVA是面向对象的语言因此JAVA平台已经将HTTP转换成对象的形式这将会使JAVA 程序员关注于应用本身而不是HTTP
HTTP提供了一个标准的机制来扩展服务器的功能我们称之为CGI服务器将请求发送到CGI程序CGI程序则返回一个响应同样的任何JAVA服务器则会接收请求然后转发到Servlet
Servelt 是javaxservlethttpHttpServlet的子类每个Servlet必须完成四个方法
* public void init(ServletConfig config)
* public void doGet(HttpServletRequest request HttpServletResponse response)
* public void doPost(HttpServletRequest request HttpServletResponse response)
* public void destroy()
Struts提供了一个可用的ServletorgapachestrutsactionActionServlet
作为一个Struts开发者你只需要编写对象供ActionServlet调用就行了但是理解Servlet并熟悉他在JAVA WEB应用中扮演的角色那是最好不过了
Servlets 和多线程
为了提高性能Servlet设计程多线程每个Servlet仅创建一个实例每一个请求都传递到同一个对象这将有利于Servlet容器充分的利用资源因此doGetdoPos在编程时必须保证他是线程安全的
Servlet Context
ServletContext(javaxservletServletContext)定义了Web 应用中Servlet的视图在Servlet中通过getServletConfig()可以访问得到在JSP中则通过隐式对象application得到ServletContext提供了几个对于创建Struts应用来说非常有用的几个方法:
访问WEB应用资源 Servlet通过getResource()getResourceAsStream()可以访问WEB应用中的静态资源文件
Servlet Context属性 Servlet上下文可以存储JAVA对象到属性中这些属性对整个WEB应用都可见
Servlet请求
Servlet请求就是javaxservlethttpHttpServletRequest通过它可以访问HTTP请求的所有信息:
Cookies通过getCookies()可以得到当前请求的所有cookie
HTTP头 HTTP请求的头可以通过对应的名字来访问你当然可以通过枚举来列出所有的头
参数你可以通过参数来访问HTTP请求的URL的参数或表单中的内容
请求特性 HTTP请求表单的提交方式(GET/POST)用的是什么协议(HTTP/HTTPS)
请求URI信息通过getRequestURI()可以得到最初的请求URI除此之外我们还可以得到contextPathservletPathpathInfo
用户信息 如果你正使用容器来进行安全管理你可以得到一个Principal对象来代表当前用户并确认该用户是否拥有某叫角色的权限
Servlet请求拥有请求级别的属性与前面提到的应用级别属性类似请求级别的属性经常用来传递状态信息到可视化组件(如JSP)
Servlet容器保证被Servlet处理的请求处于单线程内因此你不必担心在访问request对象的属性时会有多线程的问题
Servlet响应
Servlet的功能就是接收请求然后生成相应的响应 这是通过调用javaxservlethttpHttpServletResponse的方法实现的
设置头你可以设置包含在响应中的头最重要的头就是ContentType它用来告诉客户端内容的格式比如:text/html代表htmltext/xml代表XML
设置Cookies你可以加入cookie到当前的响应中
发送错误响应 你可以使用sendError()发送一个HTTP错误编号
重定向到其他资源你可以使用sendRedirect()定向到另外一个URL
使用Response API的一个最重要的原则就是:操作HeaderCookie的任何方法必须在第一次输出缓沖区满且发送到客户端前调用
过滤
如果你的Servlet容器是基于Servlet规范或更高那么你就可以使用javaxservletFilter来对请求和响应作些处理许多filter聚合在一起每一个filter都有机会来对请求和响应做处理
Struts只需要Servlet规范因此这些版本的Struts并不支持filter
Struts从开始就需要Servlet规范的容器了
Session
HTTP的一个关键特性就是无状态因此我们不知道某个请求是否是来自同一用户的请求这将会使跨请求的会话变得很艰难
为了解决这个问题Servelet实现了一个javaxservlet容器将采用Cookie或URL Rewriting来保证接邻近的请求包含session id来标识该请求是同一个session因此保存在session中的属性可以被多个请求共享
为了不浪费资源Session有一个可配置的超时时间设置如果两个请求间的时间差超过了超时时间间隔那么session中的数据会失效你可以定义一个默认的超时时