- 浏览: 78026 次
- 性别:
- 来自: 南京
最新评论
-
yingzhixing:
这种方式 如果多点几次后退的话,就不好用了。。。
禁止页面后退,禁止回退,js禁止回退,禁止页面回退 -
chenzheng8975:
wml语言好像已经过时了啊。。。。
Wap模拟器,pc端浏览器,手机wap网站,web项目 -
808_小星星:
白菜路过,表示………………
jsp页面的onclick事件
struts1开发步骤 : 版本1.3.10
1.添加jar
2.配置主控制器 ActionServlet
<servlet>
<servlet-name>struts</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>struts</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
3.添加struts配置文件struts-config.xml
4.编写子控制器及部署配置
---------------
struts1框架中核心 API
ActionForm 表单bean : 属于视图组件,用于封装客户端请求参数。
每次请求创建新的ActionForm对象。
Action 类 : 所有子控制器的父类。struts1框架默认只维护一个子控制器实例,
使用一个实例处理所有请求。因此Struts1中Action不是线程安全的。
ActionMapping 类 :与配置文件中action元素对应,存储映射信息,包括 转发信息。
ActionForward : 封装转发结果信息。
----------------------------------------------------------------------
Struts应用的完整执行顺序
1.启动容器
2.根据web.xml的配置,加载ActionServlet
注:如果配置了load-on-startup元素,则在容器启动时加载,
否则在用户发出请求时加载
3.加载ActionServlet后,根据init-param的顺序,加载参数
加载Struts框架的配置文件:struts-config.xml
加载debug
加载struts资源文件
4.ActionServlet解析strust-config.xml,并将元素封装成对象载入至内存
如果该配置文件不符合DTD格式规范,则容器会报异常
5.web服务器就绪
6.接受客户请求
7.客户发出对视图的请求,容器会根据用户请求的视图表单中的action属性值,
去查询在struts-config.xml文件中,是否存在相应的path
如果没有找到,将显示错误提示:Cannot retrieve mapping for action
(这说明,容器会在实例化ActionForm之前,分析视图的JSP语法,
然后对其进行两次编译,再根据视图编译后产生的servlet代码,去
和struts-config.xml中的action元素的path值比对,并返回给容器相应的信息)
如果找到,容器会实例化ActionForm(自定义的ActionForm)类,
然后执行reset方法,将所有的表单Bean属性初始化,接着调用其get方法,
用属性值去更新视图的控件值
(要注意的是:表单Bean的加载是在视图加载后完成的,
而且只要视图正确显示,该视图就已经和一个action元素绑定了,换句话说,
就是该视图已经和一个action元素对应的ActionMapping对象关联了)
8.客户请求一般是以表单的形式,提交的url以.do为后缀, web.xml中已经指定,
ActionServlet会拦截所有.do的请求串,因此,用户的请求会首先被ActionServlet拦截
9.客户提交表单,容器会根据该视图对应的action元素,
或者说是ActionMapping对象,去决定后续操作
10.表单提交,如果是action元素中的scope属性值为request,
则证明该表单Bean的生命周期仅在两个web资源的交互之间,
那么每次表单提交都会重新实例化表单Bean,而如果scope为session,
则其生命周期为一次完整会话,只要不关闭浏览器,容器不会每次都实例化表单Bean。
换个角度来思考,如果scope为request,那么表单Bean中的reset方法对我们来说是没有意义的,
因为每次我们使用的都是一个新的表单Bean对象,所以不需要重新对其值做初始化,
然后调用ActionForm中的set(重置)方法,将上一次的数据还原为初始值,
接着调用表单Bean中的get方法,使用表单Bean中的模型值,更新视图的控件值,
(因为视图的控件和表单Bean中的属性是绑定的)
接着调用了属性相应的set方法,保证将表单数据填充值表单Bean对象,
是该对象成为一个数据传输的DTO
下面根据action元素中的validate方法中的值,决定是否进行表单验证,
该属性的默认值为true
11.执行表单验证后,ActionServlet会根据validate方法返回的ActionErrors对象,
判断表单验证是否成功,如果返回的ActionErrors实例不为空,则代表表单验证没有通过,
将根据action元素中的input属性指定的页面,显示错误消息,如果返回的ActionErrors实例为空,
则证明表单验证通过,这时,ActionServlet会将表单对象,传递给Action类中的execute方法参数
12.ActionServlet实例化Action类
13.ActionServlet执行execute方法,将通过表单验证的数据,进行业务逻辑验证,
并返回相应的ActionForward实例给ActionServlet,
由ActionServlet决定调用哪个视图显示结果
----------------------------------------------------------------------
Struts常见错误汇总
1、“No bean found under attribute key XXX”
在struts-config.xml里定义了一个ActionForm,但type属性指定的类不存在,
type属性的值应该是Form类的全名。或者是,在Action的定义中,
name或attribute属性指定的ActionForm不存在。
2、“Cannot find bean XXX in any scope”
在Action里一般会request.setAttribute()一些对象,
然后在转向的jsp文件里(用tag或request.getAttribute()方法)得到
这些对象并显示出来。这个异常是说jsp要得到一个对象,但前面的Action里
并没有将对象设置到request(也可以是session、servletContext)里。
可能是名字错了,请检查jsp里的tag的一般是name属性,
或getAttribute()方法的参数值;或者是Action逻辑有问题没有
执行setAttribute()方法就先转向了。
还有另外一个可能,纯粹是jsp文件的问题,例如会指定一个id值,
然后在循环里使用这个值作为name的值,如果这两个值不同,也会出现此异常。
(都是一个道理,request里没有对应的对象。)
3、“Missing message for key "XXX"”
缺少所需的资源,检查ApplicationResources.properties文件里是否有jsp文件里
需要的资源,例如:
这行代码会找msg.name.prompt资源,如果AppliationResources.properties里没有
这个资源就会出现本异常。在使用多模块时,要注意在模块的struts-config-xxx.xml里
指定要使用的资源文件名称,否则当然什么资源也找不到,这也是一个很容易犯的错误。
4、“No getter method for property XXX of bean teacher”
这条异常信息说得很明白,jsp里要取一个bean的属性出来,但这个bean并没有这个属性。
你应该检查jsp中某个标签的property属性的值。例如下面代码中的cade应该改为code才对:
5、“Cannot retrieve mapping for action XXX”
在.jsp的 标签里指定action=''/XXX'',但这个Action并未在struts-config.xml里设置过。
6、HTTP Status 404 - /xxx/xxx.jsp
Forward的path属性指向的jsp页面不存在,请检查路径和模块,对于同一模块中的Action转向,
path中不应包含模块名;模块间转向,记住使用contextRelative="true"。
7、没有任何异常信息,显示空白页面
可能是Action里使用的forward与struts-config.xml里定义的forward名称不匹配。
8、“The element type "XXX" must be terminated by the matching end-tag "XXX".”
这个是struts-config.xml文件的格式错误,仔细检查它是否是良构的xml文件,
关于xml文件的格式这里就不赘述了。
9、“Servlet.init() for servlet action threw exception”
一般出现这种异常在后面会显示一个关于ActionServlet的异常堆栈信息,
其中指出了异常具体出现在代码的哪一行。我曾经遇到的一次提示如下:
java.lang.NullPointerException
at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:1003)
at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:955)
为解决问题,先下载struts的源码包,然后在ActionServlet.java的第1003行插入断点,
并对各变量进行监视。很丢人,把struts-config.xml文件弄丢了,
因此出现了上面的异常,应该是和CVS同步时不小心删除的。
10、“Resources not defined for Validator”
这个是利用Validator插件做验证时可能出现的异常,这时你要检查validation.xml文件,
看里面使用的资源是否确实有定义,form的名称是否正确,等等。
如果有误,请大家联系我,谢谢大家的支持.
1.添加jar
2.配置主控制器 ActionServlet
<servlet>
<servlet-name>struts</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>struts</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
3.添加struts配置文件struts-config.xml
4.编写子控制器及部署配置
---------------
struts1框架中核心 API
ActionForm 表单bean : 属于视图组件,用于封装客户端请求参数。
每次请求创建新的ActionForm对象。
Action 类 : 所有子控制器的父类。struts1框架默认只维护一个子控制器实例,
使用一个实例处理所有请求。因此Struts1中Action不是线程安全的。
ActionMapping 类 :与配置文件中action元素对应,存储映射信息,包括 转发信息。
ActionForward : 封装转发结果信息。
----------------------------------------------------------------------
Struts应用的完整执行顺序
1.启动容器
2.根据web.xml的配置,加载ActionServlet
注:如果配置了load-on-startup元素,则在容器启动时加载,
否则在用户发出请求时加载
3.加载ActionServlet后,根据init-param的顺序,加载参数
加载Struts框架的配置文件:struts-config.xml
加载debug
加载struts资源文件
4.ActionServlet解析strust-config.xml,并将元素封装成对象载入至内存
如果该配置文件不符合DTD格式规范,则容器会报异常
5.web服务器就绪
6.接受客户请求
7.客户发出对视图的请求,容器会根据用户请求的视图表单中的action属性值,
去查询在struts-config.xml文件中,是否存在相应的path
如果没有找到,将显示错误提示:Cannot retrieve mapping for action
(这说明,容器会在实例化ActionForm之前,分析视图的JSP语法,
然后对其进行两次编译,再根据视图编译后产生的servlet代码,去
和struts-config.xml中的action元素的path值比对,并返回给容器相应的信息)
如果找到,容器会实例化ActionForm(自定义的ActionForm)类,
然后执行reset方法,将所有的表单Bean属性初始化,接着调用其get方法,
用属性值去更新视图的控件值
(要注意的是:表单Bean的加载是在视图加载后完成的,
而且只要视图正确显示,该视图就已经和一个action元素绑定了,换句话说,
就是该视图已经和一个action元素对应的ActionMapping对象关联了)
8.客户请求一般是以表单的形式,提交的url以.do为后缀, web.xml中已经指定,
ActionServlet会拦截所有.do的请求串,因此,用户的请求会首先被ActionServlet拦截
9.客户提交表单,容器会根据该视图对应的action元素,
或者说是ActionMapping对象,去决定后续操作
10.表单提交,如果是action元素中的scope属性值为request,
则证明该表单Bean的生命周期仅在两个web资源的交互之间,
那么每次表单提交都会重新实例化表单Bean,而如果scope为session,
则其生命周期为一次完整会话,只要不关闭浏览器,容器不会每次都实例化表单Bean。
换个角度来思考,如果scope为request,那么表单Bean中的reset方法对我们来说是没有意义的,
因为每次我们使用的都是一个新的表单Bean对象,所以不需要重新对其值做初始化,
然后调用ActionForm中的set(重置)方法,将上一次的数据还原为初始值,
接着调用表单Bean中的get方法,使用表单Bean中的模型值,更新视图的控件值,
(因为视图的控件和表单Bean中的属性是绑定的)
接着调用了属性相应的set方法,保证将表单数据填充值表单Bean对象,
是该对象成为一个数据传输的DTO
下面根据action元素中的validate方法中的值,决定是否进行表单验证,
该属性的默认值为true
11.执行表单验证后,ActionServlet会根据validate方法返回的ActionErrors对象,
判断表单验证是否成功,如果返回的ActionErrors实例不为空,则代表表单验证没有通过,
将根据action元素中的input属性指定的页面,显示错误消息,如果返回的ActionErrors实例为空,
则证明表单验证通过,这时,ActionServlet会将表单对象,传递给Action类中的execute方法参数
12.ActionServlet实例化Action类
13.ActionServlet执行execute方法,将通过表单验证的数据,进行业务逻辑验证,
并返回相应的ActionForward实例给ActionServlet,
由ActionServlet决定调用哪个视图显示结果
----------------------------------------------------------------------
Struts常见错误汇总
1、“No bean found under attribute key XXX”
在struts-config.xml里定义了一个ActionForm,但type属性指定的类不存在,
type属性的值应该是Form类的全名。或者是,在Action的定义中,
name或attribute属性指定的ActionForm不存在。
2、“Cannot find bean XXX in any scope”
在Action里一般会request.setAttribute()一些对象,
然后在转向的jsp文件里(用tag或request.getAttribute()方法)得到
这些对象并显示出来。这个异常是说jsp要得到一个对象,但前面的Action里
并没有将对象设置到request(也可以是session、servletContext)里。
可能是名字错了,请检查jsp里的tag的一般是name属性,
或getAttribute()方法的参数值;或者是Action逻辑有问题没有
执行setAttribute()方法就先转向了。
还有另外一个可能,纯粹是jsp文件的问题,例如会指定一个id值,
然后在循环里使用这个值作为name的值,如果这两个值不同,也会出现此异常。
(都是一个道理,request里没有对应的对象。)
3、“Missing message for key "XXX"”
缺少所需的资源,检查ApplicationResources.properties文件里是否有jsp文件里
需要的资源,例如:
这行代码会找msg.name.prompt资源,如果AppliationResources.properties里没有
这个资源就会出现本异常。在使用多模块时,要注意在模块的struts-config-xxx.xml里
指定要使用的资源文件名称,否则当然什么资源也找不到,这也是一个很容易犯的错误。
4、“No getter method for property XXX of bean teacher”
这条异常信息说得很明白,jsp里要取一个bean的属性出来,但这个bean并没有这个属性。
你应该检查jsp中某个标签的property属性的值。例如下面代码中的cade应该改为code才对:
5、“Cannot retrieve mapping for action XXX”
在.jsp的 标签里指定action=''/XXX'',但这个Action并未在struts-config.xml里设置过。
6、HTTP Status 404 - /xxx/xxx.jsp
Forward的path属性指向的jsp页面不存在,请检查路径和模块,对于同一模块中的Action转向,
path中不应包含模块名;模块间转向,记住使用contextRelative="true"。
7、没有任何异常信息,显示空白页面
可能是Action里使用的forward与struts-config.xml里定义的forward名称不匹配。
8、“The element type "XXX" must be terminated by the matching end-tag "XXX".”
这个是struts-config.xml文件的格式错误,仔细检查它是否是良构的xml文件,
关于xml文件的格式这里就不赘述了。
9、“Servlet.init() for servlet action threw exception”
一般出现这种异常在后面会显示一个关于ActionServlet的异常堆栈信息,
其中指出了异常具体出现在代码的哪一行。我曾经遇到的一次提示如下:
java.lang.NullPointerException
at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:1003)
at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:955)
为解决问题,先下载struts的源码包,然后在ActionServlet.java的第1003行插入断点,
并对各变量进行监视。很丢人,把struts-config.xml文件弄丢了,
因此出现了上面的异常,应该是和CVS同步时不小心删除的。
10、“Resources not defined for Validator”
这个是利用Validator插件做验证时可能出现的异常,这时你要检查validation.xml文件,
看里面使用的资源是否确实有定义,form的名称是否正确,等等。
如果有误,请大家联系我,谢谢大家的支持.
发表评论
-
struts配置下载信息,处理InputStream
2013-04-24 12:23 844<action name="exportExc ... -
Js获取当前日期时间及其它操作
2013-04-17 11:49 1417Js获取当前日期时间及其它操作 var myDate = n ... -
Axis2开发创建WebService
2013-04-15 15:10 1067一、Axis2的下载和安装 1.可从http: ... -
myeclipse xifre
2013-04-09 17:33 10451. 首先新建一个web工程CxfService,倒入cxf所 ... -
全选,点击链接全选,选中多选框全选以及反选,全不选
2012-08-30 13:49 1199<html> <head> & ... -
全选/全不选
2012-08-29 17:38 1266<!DOCTYPE html PUBLIC " ... -
动感导航菜单
2012-08-29 16:28 945<html> <head> <t ... -
菜单栏
2012-08-29 16:23 1123<!DOCTYPE html PUBLIC " ... -
jquery
2012-08-29 14:42 736<html> <head> <s ... -
java遍历map
2012-08-28 17:30 889//最常规的一种遍历方法,最常规就是最常用的,虽然不复杂,但很 ... -
下拉列表,下列列表选中,下列列表删除,js判断下拉列表选中或删除
2012-08-28 14:47 1152下拉列表选中: var selObj = document.g ... -
spring 下配置 dbcp,c3p0,proxool 等数据源连接池
2012-08-16 11:39 1186spring 下如何配置 dbcp,c3p0,proxool ... -
鼠标移动到上面显示小手
2012-08-15 15:29 856<img id="<%=chan.tri ... -
dwr的web.xml配置及注意事项
2012-08-15 11:08 775<servlet> <servlet-n ... -
判断多选选中的数量大于2,选中多个值进行判断,提交action
2012-08-15 11:10 795function ValidateUsr(){ var ... -
判断多选选中的数量大于2,选中多个值
2012-08-09 15:54 815function ValidateUsr(){ var ... -
判断密码必须有大小写字母和数字组成
2012-08-09 15:52 5851<script language="JavaS ... -
判断访问的客户端
2012-08-09 09:41 772<SCRIPT LANGUAGE="JavaS ... -
js判断访问的是手机端,还是pc端
2012-08-09 09:38 1925<SCRIPT LANGUAGE="JavaS ... -
js验证密码必须为大小写字母和数字组成
2012-08-01 19:37 4709<script language="JavaS ...
相关推荐
这篇博客“Struts2 拦截器的执行顺序(二十九)”可能探讨了Struts2拦截器链的工作原理和它们的执行顺序,这对于理解Struts2的内部机制至关重要。 首先,让我们深入理解Struts2的拦截器。拦截器是在Action调用前后...
struts2执行顺序,清楚描述从处理请求到返回response的整个流程
以下是对Struts开发步骤的详细说明,适合初学者逐步学习: 1. **添加Struts支持**: 开发前首先需要在项目中引入Struts框架的相关依赖,这通常通过Maven或Gradle等构建工具来完成。然后在`web.xml`文件中配置...
Struts2远程命令执行漏洞解析 漏洞解析 远程命令 Struts2
然而,如同任何复杂的框架一样,Struts2在开发和部署过程中可能会遇到一些常见错误。以下是一些典型的问题及相应的解决方案: 1. **异常启动过滤器Struts2:No mapping found for dependency** 这个错误通常是因为...
综上所述,这些jar包构成了一个完整的Struts 1.3.5开发环境,开发者可以通过它们实现从前端到后端的完整功能,包括处理用户请求、执行业务逻辑、展示用户界面以及数据库交互。尽管现在有更新的版本和其他框架可供...
Struts2是一个流行的Java web开发框架,它提供了一种优雅的方式来组织和控制应用程序的行为。配置文件在Struts2中起着...例如,当一个Action没有按照预期执行时,我们可以检查是否因为配置冲突或者加载顺序错误导致的。
这个实例“struts开发实例一个”旨在帮助初学者理解和掌握Struts框架的基本应用,包括前端验证和后端Action的实现。 在Struts框架中,前端验证通常指的是在用户提交表单数据之前在客户端进行的验证。这可以防止无效...
Struts2 项目开发流程包括以下几个步骤: 1. 需求分析:确定项目的需求和功能。 2. 设计:根据需求设计项目的架构和数据库。 3. 实现:使用 Struts2 框架实现项目的功能。 4. 测试:对项目进行测试和调试。 5. 部署...
从用户请求到响应,包括请求解析、ActionForm绑定、Action执行、视图渲染等步骤,理解这个生命周期有助于调试和优化应用程序。 以上是对Struts开发模式的经验总结,涵盖了从环境配置到实际开发的关键点。在实际...
这个压缩包包含了核心库(core)的jar文件和一个实现Struts2工程的步骤文档,这对于初学者或者开发者来说是极其有价值的资源。 1. **Struts2核心库(Core Jars)**: - Struts2的核心库提供了框架的基本功能,包括...
拦截器是Struts2的另一大特色,它允许开发者在Action调用前后执行自定义逻辑。常见的拦截器有Params(处理参数绑定)、Validation(进行数据校验)、Chain(维持请求链)等。开发者可以通过自定义拦截器来扩展框架...
这个"Struts2 开发包"包含了用于开发基于Struts2的应用所需的核心组件和配置文件。以下是对这些关键元素的详细解释: 1. **Struts2核心库(jar包)**:Struts2框架的jar文件是开发的基础,它们提供了框架的运行时...
在使用Struts进行开发时,这个开发包是必不可少的,因为不导入它,你的代码将无法正常运行并可能抛出错误。 在描述中提到的"导入就可用于struts的开发,不然会报错",这强调了Struts库的重要性。在Java项目中,你...
在本压缩包"struts2 开发jar包汇总"中,包含了Struts2开发所需要的核心库和其他相关依赖,使得开发者可以轻松地进行Struts2应用的开发。 首先,我们要理解Struts2框架的运行机制。它主要由以下几个部分组成: 1. *...
搭建Struts2的开发环境,我们需要以下步骤: 1. **安装Java环境**:确保系统已安装Java JDK,并设置好环境变量。 2. **集成开发环境(IDE)**:可以选择Eclipse、IntelliJ IDEA等主流的Java IDE,它们都有很好的对...
这个"struts2开发基础包"包含了运行Struts2框架所必需的基础JAR文件,这些文件在开发过程中通常会被放入项目的`lib`目录下,以便于类加载器能够找到并使用它们。 1. **Struts2框架结构**:Struts2框架的核心组件...