Java Web编程的主要组件技术——Struts入门
参考书籍:《J2EE开源编程精要15讲》
Struts是一个开源的Java Web框架,很好地实现了MVC设计模式。通过一个配置文件,把各个层面的应用组件联系起来,使组件在程序层面联系较少,耦合度较低。它定义了自己的标签库来实现是视图层,创建了一个内在的Servlet,叫ActionServlet,作为自己的控制器,建立一个叫Action类的对象实现业务逻辑。视图组件和业务逻辑组件的关系在struts-config.xml的配置文件中声明。当Struts应用程序启动时,它首先从struts-config.xml文件中读取信息。根据信息,控制器ActionServlet知道把视图中的请求转发给对应的业务逻辑组件处理,各组件之间没有代码上的联系。
Struts工作原理图:

核心组件
控制器组件
从客户端接受输入数据、调用业务逻辑操作、决定返回给客户何种视图等,包括:ActionServlet、Action、ActionMapping和ActionForward
1) ActionServlet类
把HTTP消息打包传送到框架中合适的处理器,非抽象类,可直接作为具体的控制器使用,必须在配置文件中详细配置
2) Action类
控制器组件的扩展,把用户动作与业务操作连接起来,使客户请求和业务模型松散耦合。收到请求后,调用execute()方法
3) 配置文件struts-config.xml
整个Struts应用程序的枢纽,声明各组件及其关系,主要包括<form-beans>、<action-mappings>等,用以对ActionForm、Action声明,
如:
(配置文件详解) http://blog.csdn.net/zzs0829/article/details/2695410
4) ActionMapping
动作映射(ActionMapping)封装了配置文件中action-mappings元素所包含的配置信息,ActionMapping对象包括了一个path属性,用来与外来
请求URI匹配
5) ActionForward
表示一个目标,指在Action完成后,控制器要转交控制权的地方。此时不指定实际的JSP页面,而是以声明的方式把某个动作的转发映射与JSP页面
相连,然后在整个应用程序中使用那个ActionForward对象。ActionForward对象封装了配置文件中forward元素所包含的信息。
视图组件
JSP页面、ActionForm、Struts标记、Java资源包等
1) ActionForm
用来在用户和业务层之间传输客户的输入数据,也叫Form Bean。Struts框架自动从请求中收集输入数据,交给一个使用Form Bean实例的Action对
象,再交给业务层
Struts框架处理每个请求对应的ActionForm对象步骤:
1. 检查该项动作的相应映射,查看是否有某个ActionForm得到配置
2. 如果配置了某个ActionForm,使用action元素中的name属性来查找Form Bean的配置信息
3. 查看是否已经创建了ActionForm的一个实例
4. 如果在适当的作用域内已经存在一个ActionForm实例,而且这个实例的类型正是这个新请求所需类型,则重用这个实例
5. 否则,创建一个新实例,存储在适当的作用域(action元素的scope属性设置)
6. 调用ActionForm实例的reset()方法
7. 反复处理请求参数,如果参数名在ActionForm实例中具有对应的设置方法(setter method),则为它填上该参数的值
8. 如果validate属性为true,则调用ActionForm实例的validate()方法,并返回所出现的任何错误
简单的ActionForm例子:
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping; public class loginActionForm extends ActionForm {
private String username; public String getUserName(){
return username;
}
public void setUsername(String username){
this.username=username;
}
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
return null;
}
public void reset(ActionMapping mapping, HttpServletRequest request) {
}
}
控制器将表单数据填入ActionForm实例之前,会先调用reset()方法,可将ActionForm性质重新设置为默认状态。当输出插入完毕后,控制器会调用
validate()方法,对输入的数据进行验证,并向控制器返回任何错误。业务逻辑验证应在业务对象中完成,ActionForm中进行的验证只是表示层的验
证。
2) Struts标记库
包括HTML标记库、Bean标记库、Logic标记库、Nested标记库、Template标记库和Tiles标记库
要使用这些标记库,需在web.xml中注册这些标记库
例如使用HTML标记库:
<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
并在JSP页面引入taglib元素:<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>,最后加入所需JAR包
3) 使用消息资源包
Java库中有一组类允许从Java类或属性文件(properties file)中读取消息资源。Struts也提供了一组类似的类,
org.apache.struts.util.MessageResources
例如 登入应用程序的资源包:
#页面标题
title.login=Login
#图像
image.logo=image/logo.gif
如何将title.Login插入到页面中:
<title><bean:message key="title.login"/></title>
模型组件
JavaBeans或EJB
应用示例一:http://flforever1213.iteye.com/blog/941053
应用示例二 简单登陆系统:http://pan.baidu.com/s/1DAHCa
Java Web编程的主要组件技术——Struts入门的更多相关文章
- Java Web编程的主要组件技术——Struts的高级功能
参考书籍:<J2EE开源编程精要15讲> Struts对国际化的支持 "国际化"(I18N)指一个应用程序在运行时能根据客户端请求所来的国家/地区.语言的不同显示不同的 ...
- Java Web编程的主要组件技术——Struts核心组件
参考书籍:<J2EE开源编程精要15讲> Struts配置文件struts-config.xml Struts核心文件,可配置各种组件,包括Form Beans.Actions.Actio ...
- Java Web编程的主要组件技术——Hibernate入门
参考书籍:<J2EE开源编程精要15讲> Hibernate是对象/关系映射(ORM,Object/Relational Mapping)的解决方案,就是将Java对象与对象关系映射到关系 ...
- Java Web编程的主要组件技术——MVC设计模式
参考书籍:<J2EE开源编程精要15讲> MVC(Model View Controller),Model(模型)表示业务逻辑层,View(视图)代表表述层,Controller(控制)表 ...
- Java Web编程的主要组件技术——JDBC
参考书籍:<J2EE开源编程精要15讲> JDBC(Java DataBase Connectivity)是Java Web应用程序开发的最主要API之一.当向数据库查询数据时,Java应 ...
- Java Web编程的主要组件技术——Hibernate核心组件
参考书籍:<J2EE开源编程精要15讲> Hibernate配置文件 1) hibernate.cfg.xml <?xml version='1.0' encoding='UTF-8 ...
- Java Web编程的主要组件技术——Servlet
参考书籍:<J2EE开源编程精要15讲> Servlet是可以处理客户端传来的HTTP请求,并返回响应,由服务器端调用执行,有一定编写规范的Java类. 例如: package test; ...
- Java Web编程的主要组件技术——JSP
参考书籍:<J2EE开源编程精要15讲> JSP(Java Server Page)页面由HTML代码和嵌入其中的Java代码组成. 简单的JSP页面如: <html> < ...
- java基础-网络编程(Socket)技术选型入门之NIO技术
java基础-网络编程(Socket)技术选型入门之NIO技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传统的网络编程 1>.编写socket通信的MyServer ...
随机推荐
- poj 2387 Til the Cows Come Home (最短路,dijkstra模版题)
题目 #define _CRT_SECURE_NO_WARNINGS #include<string.h> #include<stdio.h> #include<math ...
- POJ 3280 Cheapest Palindrome(DP)
题目链接 题意 :给你一个字符串,让你删除或添加某些字母让这个字符串变成回文串,删除或添加某个字母要付出相应的代价,问你变成回文所需要的最小的代价是多少. 思路 :DP[i][j]代表的是 i 到 j ...
- 为什么Android 3.0如此罕见?
3.0(2011年2月)代号蜂巢,专用于android系统的平板电脑,不用于手机.4.0(2011年5月公布)的开发就是让平板电脑和手机能够共用一个版本的系统.4.0通用于平板电脑和手机.
- Oracle 6 - 锁
Oracle锁没有额外的开销?Oracle的锁是怎么实现的?因为其他数据库,锁都是一种稀有资源和开销. 答:代码级实现?? 没有锁的话,并发更新就会有丢失更新的问题. 悲观锁和乐观锁 悲观锁一般用于有 ...
- AsyncTask 与 Thread+Handler
AsyncTask是封装好的线程池,比起Thread+Handler的方式,AsyncTask在操作UI线程上更方便,因为onPreExecute().onPostExecute()及更新UI方法on ...
- Debug模式应用程序输出Debug调试信息(现成的宏定义,用于格式化打印信息)
// Debug模式,主要输出一些调试的信息. #ifdef UNICODE #define _FILE_ _STR2WSTR(__FILE__) #define _FUNCTION ...
- Android模拟器问题:No system images installed for this target
CPU/ABI选项无法选择,提示:No system images installed for this target,也就是没有适合的系统镜像 打开Android Manager SDK 下载完后重 ...
- jQuery编程基础精华01(jQuery简介,顶级对象$,jQuery对象、Dom对象,链式编程,选择器)
jQuery简介 什么是jQuery? jQuery就是一个JavaScript函数库,没什么特别的.(开源)联想SQLHelper类 jQuery能做什么?jQuery是做什么的? jQuery本身 ...
- python 类成员函数
http://cowboy.1988.blog.163.com/blog/static/75105798201091141521583/ 这篇文章总结的非常好 主要注意的地方是 1,在类内调用成员函数 ...
- Java API —— BigInteger类
1.BigInteger类概述 可以让超过Integer范围内的数据进行运算 2.构造方法 public BigInteger(String val) 3.BigInteger类 ...