在创建Action的时候,从form角度去看有两种可能,一种是带form的Action,另一种是不带form的Action,所以在使用这两种Action的时候有几种情况要注意:
1.比如做一个搜索的功能,因为form里需要提交的数据只有一个字段,此种情况下也许为了简单,你并不想为这一个字段建一个form,所以你没有建form,而是想在action里通过request.getParameter("keyword")这种方式得到表单里的值,因此你建了一个不带form的action用来做Controller。在jsp页面里也许你会这样写:
<html:form action="/search">
<input type="text" name="keyword"/>
<input type="submit" value="搜索"/>
</html:form>
运行一下,发现在访问这个jsp页面的时候报错,为什么呢?我的确有path="/search"的action啊,好下面我们来分析一下,当你使用struts的<html:form>标签的时候,其实struts为你做了以下一些事情:
1.先看一下,web.xml里配置struts中有以下代码段:
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
这个struts-config.xml文件在Tomcat容器启动完毕后就已经加载了,此时struts框架就可以读取里面的内容了。
2.当你访问jsp页面,并且页面加载到<html:form>标签的时候,就会触发struts框架的部分程序运行:
(1)struts会根据form里的action路径在struts-config.xml文件里进行匹配,如果匹配不到,直接报错。
(2)如果匹配到了,继续寻找此action所对应的form。
(3)找到后将form的名字填充到普通HTML标签里的form的name属性里。
(4)与此同时,struts会按照此form的名字在指定的范围内找有没有对应的formbean存在。
(5)如果没有找到formbean,struts就会按照这个form名字利用java的反射机制创建出一个formbean实例来。
3.看完上面的第2点后,我们来想一想如果在struts-config.xml里找到了action而没有找到对应的form,会发生什么情况?在执行上面的(4)的时候会有异常出现,原因如下:
form的名字=null;
request.getAttribute(null);
此时就引发了一个空指针异常,显而易见这是struts所不能容忍的,于是乎,struts在此之前就要判断form的名字是不是null,是的话new一个自己的异常出来,大家也看的清楚些。
javax.servlet.ServletException: javax.servlet.jsp.JspException: Cannot retrieve definition for form bean null on action search.do
----------------------------------------------------------------------------------
如果把jsp里的代码改动如下:
<form action="search.do"> 《---这里换成了普通的form标签
<input type="text" name="keyword"/>
<input type="submit" value="搜索"/>
</form>
此时能够正常运行,因为此种写法不会触发struts框架执行上面的那么多的流程,自然也就能够正常运行了。
分享到:
相关推荐
本篇将深入探讨Struts中的Form验证和Action验证,以及如何通过一个简单的计算器应用来实践这些验证方法。 一、Struts Form验证 Form验证在Struts中主要负责前端用户输入的数据检查。当用户在Web表单中填写信息并...
在Web开发中,表单是用来收集用户输入数据的界面元素,而Struts Form则提供了与JavaBean对象结合的方式,使得这些数据能够被模型层处理。下面将详细介绍Struts Form表单的用法及其与HTML `<form>`标签的混合使用。 ...
在Struts中,Form Bean是用于处理用户输入的重要组件,它充当了模型层与视图层之间的桥梁。本篇文章将深入探讨Struts中的常见Form类型及其应用。 首先,我们要理解Form Bean的作用。Form Bean是用来存储用户从页面...
这本书详细讲解了如何使用Struts框架来构建领先的Java Web应用程序,涵盖了从基础到高级的主题,包括Action类、Form Beans、Tiles、国际化、异常处理、以及与其他框架如Hibernate和Spring的集成。 2. "Struts in ...
### Struts Action 跳转大全解析 #### Struts框架的工作流程 在开始具体解析之前,我们先简要回顾一下Struts框架的工作流程。当用户发起一个HTTP请求时,Struts框架中的`ActionServlet`接收该请求,并通过读取`...
1. **Struts基础知识**:首先,会介绍Struts的基本架构,包括Action、Form Beans、Actionservlet、配置文件(struts-config.xml)等核心组件的作用和用法。通过这些基础知识的学习,读者可以理解Struts如何协调前端...
### Struts2 Result 转向到 Action 的深入解析 #### 一、基本概念与应用场景 **Struts2** 是一款流行的 Java Web 开发框架,它支持多种开发模式(如 MVC),并提供了一系列用于简化 Web 应用程序开发的功能。在 ...
首先,书中的"源码"部分可能会探讨Struts框架的内部工作原理,包括Action、Form Bean、Controller Servlet、Tiles和国际化等关键组件的源代码分析。通过阅读源码,读者可以理解Struts如何处理HTTP请求,以及如何将...
2. **配置文件**:Struts框架依赖于`struts-config.xml`配置文件,其中定义了Action的映射、Form Bean、数据源以及其他配置信息,是实现MVC模式的重要桥梁。 3. **Form Bean**:用于封装用户输入的数据,通常与JSP...
在处理用户请求时,Struts2允许开发者通过Action类来接收和处理参数,包括中文参数。当我们需要通过POST方法提交包含中文字符的数据时,可能会遇到编码问题,因为HTTP请求默认使用的是ASCII编码,而中文字符需要UTF-...
开发者需要掌握ActionServlet的工作原理,以及如何编写Action类、配置`struts-config.xml`、设计Form Bean,以及如何利用Struts的标签库来创建动态的用户界面。通过深入学习和实践,可以更好地利用Struts实现高效的...
Struts2.0是Java Web开发中的一个框架,它的核心组件是Action,它负责处理用户的请求并进行业务逻辑处理。相较于Struts 1.x,Struts 2.0的Action模型有着显著的区别。 在Struts 1.x中,Action类需要继承`org.apache...
2. **配置详解**:书中详细阐述了Struts的配置文件(struts-config.xml),包括ActionMapping、FormBeans、ActionForward、PlugIn等核心元素的配置方法,以及如何使用XML来组织应用程序的结构。 3. **动作(Actions...
Struts是Java Web开发中的一个开源框架,主要负责控制应用程序的流程,而Action技术是Struts的核心组件之一,用于处理用户的请求。在这个场景中,我们讨论的是如何利用Struts的Action来实现对数据库数据的增删改查...
本篇将深入探讨Struts框架的高级部分,包括常用Action、验证框架以及动态Form,这些都是开发过程中不可或缺的重要概念。 一、常用Action Action是Struts的核心组件,它负责处理用户请求,并进行业务逻辑处理。在...
首先,"commons-scaffold.zip"包含了Struts框架中的公共模版或基础结构,它可能包含了一些常用的Action类、Form Bean、以及与业务逻辑交互的DAO(数据访问对象)和VO(值对象)。 Commons Scaffold是Struts中用于...
### JS调用Struts中的Action #### 背景与概念 在Web开发中,JavaScript(简称JS)作为客户端脚本语言,常被用来增强用户体验、处理表单验证等前端任务。而Struts框架则是Java Web开发中常用的一个MVC(Model-View-...
在《Struts In Action》一书中,作者详细介绍了Struts的核心概念和工作原理,包括Action、Form Bean、配置文件、国际化、异常处理、Tiles组件、Struts与Spring的集成、Struts与Hibernate的整合等。书中的实例丰富,...
Action类通常继承自org.apache.struts.action.Action,你可以根据业务需求重写execute方法。 **二、多业务处理** 在实际开发中,一个Action往往需要处理多个相关的业务操作。例如,一个用户管理的Action可能需要...