Struts的控制器如何知道什么样的信息转发到什么样的Action类呢?

合集下载

基于Struts2 Result Type为chain 的Action之间数据传递

基于Struts2 Result Type为chain 的Action之间数据传递

chain:基本用途是构造成一条动作链。

前一个Action将控制权转交给后一个Action,而前一个Action的状态在后一个Action里仍然保持着。

我现在有一个场景,FirstAction 通过chain的方式,将控制权交给SecondAction。

FirstAction对应的页面代码为first.ftl,SecondAction对应的页面代码为second.ftl。

假设我们的FirstAction如下定义:public class SecondAction extends ActionSupport{private CustomUser user = null;public String execute() throws Exception {// 利用user做事情或显示在页面上}// getter setter}意思很明确了,通过first.ftl的输入,到DB中或其他,生成了我们的CustomUser对象,这个CustomUser对象将要在SecondAction使用。

于是我们想到了要配置FirstAction 的name为toSecond的Result type为chain,将生成的CustomUser对象传递到SecondAction中,我们也这样做了,但是经过调试,发现在SecondAction中没有得到FirstAction中的CustomUser对象。

SecondAction是这样实现的:public class SecondAction extends ActionSupport{private CustomUser user = null;public String execute() throws Exception {// 利用user做事情或显示在页面上}// getter setter}看一下ChainingInterceptor.java的实现,发现有这样的注释:An interceptor that copies all the properties of every object in the value stack to t he currently executing object.在FirstAction 中CustomUser user 并没有在value stack 中,所以没有拷贝到SecondAction中。

struts2 从一个action 跳转到另一个action的两种方法

struts2 从一个action 跳转到另一个action的两种方法

从action1直接跳转到action2,有两种方法:1. 需要保存前一个action的属性信息时使用,保存住action1的request对象:<result type= "chain " name="a2">action2</result>2. 不保存前一个action的参数可以用这种方法:<result type= "redirectAction "> action2</result>Struts.xmlJava代码1.<?xml version="1.0" encoding="UTF-8" ?>2.<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD StrutsConfiguration 2.1//EN""/dtds/struts-2.1.dtd">3.<struts>4.5.<!--一个action跳转到另一个action 跳转方式为chain 会保留request对象redirectAction 则不能保留-->6.<package name="limin"extends="struts-default">7.<action name="sa1_*"class="com.Action.StrAction1" method="{1}">8.<!--<result type="chain" name="sa2">sa2_sa2</result> -->9.<result type="redirectAction" name="sa2">sa2_sa2</result>10.</action>11.12.<action name="sa2_*"class="com.Action.StrAction2" method="{1}">13.<result>/index.jsp</result>14.</action>15.</package>16.17.</struts>[java]view plain copyprint?1.<?xml version="1.0" encoding="UTF-8" ?>2.<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://stru /dtds/struts-2.1.dtd">3.<struts>4.5.<!--一个action跳转到另一个action 跳转方式为chain 会保留request对象 redirectAction 则不能保留-->6.<package name="limin"extends="struts-default">7.<action name="sa1_*"class="com.Action.StrAction1" method="{1}">8.<!--<result type="chain" name="sa2">sa2_sa2</result> -->9.<result type="redirectAction" name="sa2">sa2_sa2</result>10.</action>11.12.<action name="sa2_*"class="com.Action.StrAction2" method="{1}">13.<result>/index.jsp</result>14.</action>15.</package>16.17.</struts>action1Java代码1.public class StrAction1 {2. String a ="liminhappygirl";3.public String getA() {4.return a;5. }6.public void setA(String a) {7.this.a = a;8. }9.public String sa1() {10. HttpServletRequest request = (HttpServletRequest)ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);11. request.setAttribute("limin", "happygirl");12. System.out.println("sal已经执行");13.return"sa2";14. }15.16.}[java]view plain copyprint?1.public class StrAction1 {2. String a ="liminhappygirl";3.public String getA() {4.return a;5. }6.public void setA(String a) {7.this.a = a;8. }9.public String sa1() {10. HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);11. request.setAttribute("limin", "happygirl");12. System.out.println("sal已经执行");13.return"sa2";14. }15.16.}action2Java代码1.public class StrAction2 {2.public String sa2() {3. HttpServletRequest request = (HttpServletRequest)ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);4.//当type="chain" 时能保存住request对象5. System.out.println(request.getAttribute("limin"));6.return Action.SUCCESS;7. }8.}[java]view plain copyprint?1.public class StrAction2 {2.public String sa2() {3. HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);4.//当type="chain" 时能保存住request对象5. System.out.println(request.getAttribute("limin"));6.return Action.SUCCESS;7. }8.}。

struts2中使用注解配置Action方法详解

struts2中使用注解配置Action方法详解

struts2中使⽤注解配置Action⽅法详解使⽤注解来配置Action可以实现零配置,零配置将从基于纯XML的配置转化为基于注解的配置。

使⽤注解,可以在⼤多数情况下避免使⽤struts.xml⽂件来进⾏配置。

struts2框架提供了四个与Action相关的注解类型,分别为ParentPackage、Namespace、Result和Action。

ParentPackage:ParentPackage注解⽤于指定Action所在的包要继承的⽗包。

该注解只有⼀个value参数。

⽤于指定要继承的⽗包。

⽰例:使⽤ParentPackage注解,其value值为mypackage,表⽰所在的Action需要继承mypackage包,@ParentPackage(value="mypackage")public class UserAction extends ActionSupport{}如果注解中只有⼀个value参数值,或者其他参数值都使⽤默认值时,则可以对value参数设置进⾏简写,⽐如上述的代码:@ParentPackage("mypackage")public class UserAction extends ActionSupport{}把struts2-convention-pligin-2.x.x.jar包导⼊到web应⽤中,才能在Action类中使⽤注解。

Namespace:Namespace注解⽤于指定Action所在的包的命名空间。

该注解只有⼀个value参数,⽤于指定ACtion所属于的命名空间。

当使⽤Namespace注解时,在为命名空间取名需要使⽤斜杠(/)开头。

使⽤Namespace注解,指定其Action所在的包的命名空间为/user:@Namespace("/user")public class UserAction extends ActionSupport{}Result:Result注解⽤于定义⼀个Result映射,该注解包含四个参数,1)name:可选参数,⽤于指定Result的逻辑名,默认值为success2)location:必选参数,⽤于指定Result对应资源的URL3)type:可选参数,⽤于指定Result的类型,默认值为NullResult.class4)params:可选参数,⽤于为Result指定要传递的参数,格式为:{key1,value1,key2,value2,...}如果type参数的值为NullResult.class,那么struts2框架在解析Result配置时,会使⽤默认的结果类型(即ServletDispatcherResult)来替换NullResult。

struts2核心工作流程与原理

struts2核心工作流程与原理

struts2核心工作流程与原理做为一名技术人员,听到太多关于.net和java的比较的话题。

我想对那些技术人员说,请先了解一下什么是java(或者.net)吧,其实你根本不了解。

这是Struts2官方站点提供的Struts 2 的整体结构。

一个请求在Struts2框架中的处理大概分为以下几个步骤1.客户端提起一个(HttpServletRequest)请求,如上文在浏览器中输入”http://localhost:8080/TestMvc/add.action”就是提起一个(HttpServletRequest)请求。

2.请求被提交到一系列(主要是三层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、 FilterDispatcher)。

注意这里是有顺序的,先ActionContextCleanUp,再其他过滤器(SiteMesh等)、最后到 FilterDispatcher。

3.FilterDispatcher是控制器的核心,就是mvc中c控制层的核心。

下面粗略的分析下我理解的FilterDispatcher工作流程和原理:FilterDispatcher进行初始化并启用核心doFilter其代码如下:public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain ) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) req;HttpServletResponse response = (HttpServletResponse) res;ServletContext servletContext = filterConfig.getServletContext();// 在这里处理了HttpServletRequest和HttpServletResponse。

Struts2中 struts.xml的Action配置详解

Struts2中 struts.xml的Action配置详解

Struts2中struts.xml的Action配置详解使用package可以将逻辑上相关的一组Action,Result,Interceptor等组件分为一组,Package 有些像对象,可以继承其他的Package,也可以被其他package继承,甚至可以定义抽象的Package。

由于struts.xml文件是自上而下解析的,所以被继承的package要放在继承package的前边。

Namespace将action分成逻辑上的不同模块,每一个模块有自己独立的前缀。

使用name space可以有效的避免action重名的冲突,例如每一个package都可以有自己独立的Men u和Help action,但是事项方式各有不同。

Struts2标签带有namespace选项,可以根据namespace的不同向服务器提交不同的package的action的请求。

“/”表示根namespace,所有直接在应用程序上下文环境下的请求(Context)都在这个pa ckage中查找。

“”表示默认namespace,当所有的namespace中都找不到的时候就在这个namespace中寻找。

例如,有如下配置:CODE:<package name="default"><action name="foo" class="mypackage.simpleAction><result name="success" type="dispatcher">greeting.jsp</result></action><action name="bar" class="mypackage.simpleAction"><result name="success" type="dispatcher">bar1.jsp</result></action></package><package name="mypackage1" namespace="/"><action name="moo" class="mypackage.simpleAction"><result name="success" type="dispatcher">moo.jsp</result></action></package><package name="mypackage2" namespace="/barspace"><action name="bar" class="mypackage.simpleAction"><result name="success" type="dispatcher">bar2.jsp</result></action></package>1 如果请求为/barspace/bar.action查找namespace:/barspace,如果找到bar则执行对应的action,否则将会查找默认的n amespace,在上面的例子中,在barspace中存在名字为bar的action,所以这个action 将会被执行,如果返回结果为success,则画面将定为到bar2.jsp2 如果请求为/moo.action根namespace('/')被查找,如果moo action存在则执行,否则查询默认的namespace,上面的例子中,根namespace中存在moo action,所以该action被调用,返回success 的情况下画面将定位到moo.jsp、Action配置在struts2框架中每一个Action是一个工作单元。

Struts2配置详解2 配置Action

Struts2配置详解2 配置Action

配置ActionStruts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实现该接口中的execute()方法。

该方法如下:public String execute() throws ExceptionStruts2并不是要求所有编写的action类都要实现Action接口,也可以直接编写一个普通的Java类作为action,只要实现一个返回类型为String的无参的public方法即可:public String xxx()在实际开发中,action类很少直接实现Action接口,通常都是从com.opensymphony.xwork2.ActionSupport类继承,ActionSupport实现了Action接口和其他一些可选的接口,提供了输入验证,错误信息存取,以及国际化的支持,选择从ActionSupport继承,可以简化action的定义。

开发好action之后,好需要对action进行配置,以告诉Struts2框架,针对某个URL的请求应该交由哪个action进行处理。

1.Action映射:action映射是Struts2框架中的基本”工作单元”,action映射就是将一个请求URL(即action的名字)映射到一个action类,当一个请求匹配某个action的名字时,框架就使用这个映射来确定如何处理请求。

action元素的完整属性表例如:<action name="user" class="erAction"><result name="success">/user.jsp</result></action>2. 使用method属性在配置action时,我们可以通过action元素的method属性来指定action调用的方法,所指定的方法,必须遵循与execute方法相同的格式。

Action类详解

Action类详解

Action类详解1、Action类功能(1)Action类在MVC模式中充当的Controller角色。

(2)页面的action请求动作对应于Action,通过setter和getter负责处理和存储数据或状态,执行业务逻辑处理,将处理结果响应给用户。

2、Action类基本内容(1)提供基本属性及属性的getter和setter方法。

基本属性包括:请求参数(Form表单中标签name)和响应信息(提示信息<s:property />)。

(2)提供一个Action默认的处理方法,即public String execute(),用来执行业务逻辑的处理(调用数据库操作内容,比如hibernate或spring和hibernate整合内容),及根据处理结果的返回字符串。

(3)提供Action其他的处理方法,要求:无参;返回值类型为String,方法中处理的内容与execute ()方法内容基本一致。

实现时只需在配置<action>元素,指定action的method属性,这样就可以不使用execute方法处理用户请求。

struts.xml截图访问Action时。

在Action名后加上“ActionName!methodName.action”3、Action类扩展(1)Action接口com.opensysphony.xwork2.Action(2)ActionSupport类,提供了很多基本功能,比如错误信息处理4、实现session和servlet操作(1)非IoC方式利用了ActionContext类以及ServletActionContext 类实现,具体的方法如下所示:获取session对象:在Struts2中底层的session都被封装成了Map类型,我们称之为SessionMap,而jsp 和servlet中的session则是指HttpSession对象。

Map session=ActionContext.getSession();●获取request对象:HttpServletRequest request = ServletActionContext.getRequest ();(2)IoC方式●获取session对象:Action类实现SessionA ware接口,并创建一个MAP对象session。

struts2_超链接与action使用

struts2_超链接与action使用

Struts2 超链接和 action 使用Struts2.0 链接标签Web 应用区别于普通的站点之处在于Web 应用可以创建一个动态的响应。

为了使从一个页面中链接一个动态数据变得简单,Struts2 框架提供了一系列的标签。

Struts 标签的一种用法是创建链接到其他 Web 资源,特别是针对那些在本地应用中的资源。

1.普通链接Web 程序中最普通的应用是链接到其他页面,下面看 Welcome.jsp。

<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %><html><head><title>Welcome</title><link href="<s:url value="/css/tutorial.css"/>" rel="stylesheet"type="text/css"/></head><body><h3>Commands</h3><ul><li><a href="<s:url action="Login_input"/>">Sign On</a></li><li><a href="<s:url action="Register"/>">Register</a></li></ul></body></html>1.1 说明1.<%@ taglib prefix="s" uri="/struts -tags" %>此句表示导入 struts 标签,并以 s 为前缀。

STRUTS常见面试题_java常见面试题

STRUTS常见面试题_java常见面试题

STRUTS常见面试题_java常见面试题struts常见面试题篇11.简述struts框架的初始化流程。

答案:对于使用struts框架的web应用领域,在web应用领域启动时就可以读取并初始化控制器actionservletactionservlet从struts-config.xml文件中读取配置信息,把它们存放到actionmappings对象中。

在strutsframework中,controller主要就是actionservlet,但是对于业务逻辑的操作方式则主要由action、actionmapping、actionforward这几个组件协同顺利完成(也许这几个组件,必须分割至模型中的业务逻辑一块)。

其中,action扮演了真正的控制逻辑的实现者,而actionmapping和actionforward 则指定了不同业务逻辑或流程的运行方向。

2.详述struts框架积极响应客户命令的工作流程1.检索和用户请求匹配的actionmapping实例,如果不存在,就返回用户请求路径无效的信息。

2.如果actionform实例不存有,就建立一个actionform对象,把客户递交的表单数据留存至actionform对象中。

3.根据配置信息决定是否需要表单验证。

如果需要验证,就调用actionform的validate()方法。

4.如果actionform的validate()方法回到null或回到一个不涵盖actionmessge的actionerrors对象,就则表示表单检验顺利。

5.actionservlet根据ationmapping实例包含的映射信息决定将请求转发给哪个action。

如果应的action实例不存在,就先创建这个实例,然后调用action的execute()方法。

6.action的execute()方法回到一个actionforward对象,actionservlet再把客户命令发送到actionforward对象指向的jsp组件。

Struts2知识点详解

Struts2知识点详解

Struts 2的基本流程Struts 2框架由3个部分组成:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。

在这3个部分里,Struts 2框架提供了核心控制器FilterDispatcher,而用户需要实现业务控制器和业务逻辑组件。

2.核心控制器:FilterDispatcherFilterDispatcher是Struts 2框架的核心控制器,该控制器作为一个Filter运行在Web应用中,它负责拦截所有的用户请求,当用户请求到达时,该Filter会过滤用户请求。

如果用户请求以action结尾,该请求将被转入Struts 2框架处理。

Struts 2框架获得了*.action请求后,将根据*.action请求的前面部分决定调用哪个业务逻辑组件,例如,对于login.action请求,Struts 2调用名为login的Action来处理该请求。

Struts 2应用中的Action都被定义在struts.xml文件中,在该文件中定义Action时,定义了该Action的name属性和class属性,其中name属性决定了该Action处理哪个用户请求,而class属性决定了该Action的实现类。

Struts 2用于处理用户请求的Action实例,并不是用户实现的业务控制器,而是Action代理——因为用户实现的业务控制器并没有与Servlet API耦合,显然无法处理用户请求。

而Struts 2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并回调Action 的execute方法来处理用户请求。

显然,上面的处理过程是典型的AOP(面向切面编程)处理方式。

图3.19显示了这种处理模型。

图3.19 Struts 2的拦截器和Action从图3.19中可以看出,用户实现的Action类仅仅是Struts 2的Action代理的代理目标。

struts框架详细介绍

struts框架详细介绍

struts框架详细介绍Struts是一个开源的Java Web应用程序开发框架,可以帮助开发者构建可扩展的、高性能的Web应用程序。

它遵循了Model-View-Controller(MVC)设计模式,通过将业务逻辑、表示逻辑和用户交互进行分离,使得应用程序更易于开发、测试和维护。

下面是关于Struts框架的详细介绍。

1.MVC设计模式:Struts采用了MVC设计模式,将应用程序的不同组成部分进行分离。

- Model层负责处理数据和业务逻辑。

在Struts中,开发者可以使用JavaBean、EJB、Hibernate等技术作为Model层的实现。

- View层负责展示数据和用户界面。

Struts提供了JSP(JavaServer Pages)作为主要的View技术,也可以使用Velocity、Freemarker等模板引擎。

- Controller层负责接收用户请求、处理业务逻辑以及将结果返回给View层。

Struts的Controller层使用ActionServlet来处理请求,它根据配置文件中的映射规则将请求转发给合适的Action类进行处理。

2.核心组件:Struts由以下几个核心组件组成:- ActionServlet:负责接收和处理来自客户端的请求,并根据配置文件中的映射规则将请求转发给合适的Action类进行处理。

- Action类:实现了业务逻辑的处理,接收请求和返回结果。

开发者需要继承Action类,并覆写其中的execute(方法来实现自定义的业务逻辑。

- ActionForm:用于封装请求参数并传递给Action类进行处理。

ActionForm可以与表单元素进行绑定,从而方便地获取和验证用户输入。

- ActionMapping:配置文件中的一项规则,用于将请求URL映射到具体的Action类和方法。

- ActionForward:配置文件中的一项规则,用于指定请求处理完成后需要跳转到的页面。

Struts常用action作用和用法

Struts常用action作用和用法

Struts常用action作用和用法Struts中提供了几种比较通用的action,这些action使用方便灵活,配置简单。

它们的继承关系如下图所示。

我们完全可以使用这些现成的action,没有必要重复制造轮子。

下面主要介绍我整理的这些action的作用和使用方法,适合于对struts有一定了解人员,欢迎批评指正。

1、ForwardAction(1)作用用于转发请求,相当于JSP中的<jsp:forward>。

MVC设计原则是控制器负责处理所有请求,然后选择适当的视图组件返回给用户。

在Struts应用中,应尽量避免直接链接JSP资源,否则将脱离控制器的控制,比如:<jsp:forward page=”../xx.jsp”>、<a href=”../xx.jsp”>、<html:link page=”../xx.jsp”>。

Struts控制器具有预处理请求功能,它能够选择正确的子应用模块来处理请求,把子应用模块的ModuleConfig和MessageResourc es对象存放在request范围内。

使用ForwardAction,请求转发的目标Web组件就可以正常地访问ModuleConfig和MessageResources对象。

(2)使用方法ActionServlet把请求转发给ForwardAction,ForwardAction再把请求转发给<action>元素中parameter属性指定的Web组件。

在struts-config.xml中配置相应的action就可以了,parameter是要转向到的url地址,如下所示。

<action path="/forwardIndex"type="org.apache.struts.actions.ForwardAction"parameter="/index.jsp"/>当请求“/forwardIndex”它就把控制跳转到parameter所指的“/index.jsp”2、IncludeAction(1)作用用于包含其他Web组件,相当于JSP中的<jsp:include>。

struts2 jsp页面遍历List集合,修改后将集合传到action中

struts2 jsp页面遍历List集合,修改后将集合传到action中
)Y(W~v^巓
N6e0RNQBlRstruts2 jspubMSListT eT\ListT
N Oaction-N
[s`
1._eQstruts2ubh~{^<%@ taglib prefix="s" uri="/struts-tags"%>
2.h~{MSst<Ps:iterator
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>eMRHeg</title>
</head>
public String getName() {
return ;
}
public void setName(String name) {
= name;
}
}
a$action{|
import java.util.List;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>始weTvHeg</title>

struts2中的jsp值传到后台action接收的三种方法

struts2中的jsp值传到后台action接收的三种方法

1. Action中的属性与表单中的属性一致就可以JSP中的表单<formaction="login.action"method="post">用户名:<inputtype="text"name="username"/> <br/> 密码: <inputtype="password"name="password"/><br/> <inputtype="submit"value="登陆"/></form>Action中的属性publicclassLoginActionextends ActionSupport { private String username;private String password;public String getUsername() {returnusername;}publicvoid setUsername(String username) {ername = username;}public String getPassword() {returnpassword;}publicvoid setPassword(String password) {this.password = password;}public String execute(){if( username.equalsIgnoreCase("aaa")&&password.equals("aaaaaa")){ returnSUCCESS;}else{returnERROR;}}}2. 使用一个VO类在表单中提交的属性名改为ername<formaction="login.action"method="post">用户名:<inputtype="text"name="ername"/> <br/>密码: <inputtype="password"name="user.password"/><br/><inputtype="submit"value="登陆"/></form>LoginAction中的属性改为userpublicclassLoginActionextends ActionSupport{private User user;public User getUser() {returnuser;}publicvoid setUser(User user) {er = user;}public String execute(){if( user.getUsername().equalsIgnoreCase("aaa")&&user.getPassword().equals(" aaaaaa")){returnSUCCESS;}else{returnERROR;}}}3. 使用Struts2中的ModelDriven数据模式Action类要实现一个泛型接口,前台表单与1相同publicclassLoginActionextends ActionSupport implements ModelDriven<User> { private User user = new User();public String execute(){if( user.getUsername().equalsIgnoreCase("aaa")&&user.getPassword().equals(" aaaaaa")){returnSUCCESS;}else{returnERROR;}}public User getModel() {returnuser;}}。

Struts入门(Struts 框架响应客户请求的流程 国际化 异常)

Struts入门(Struts 框架响应客户请求的流程 国际化 异常)

Struts入门(Struts 框架响应客户请求的流程+国际化+异常)Struts入门(Struts 框架响应客户请求的流程+国际化+异常)Struts实际上是在JSPModel2上实现的一个MVC的框架。

模型:如JavaBean EJB控制器:ActionServlet Action视图:JSP Struts客户化标签前端控制器:ActionServlet控制器:Action模型:ActionFormBean控制器与模型之间的映射:ActionMapping转发:ActionForward错误与信息处理:ActionErrorActionForm Bean它也是一种JavaBean,除了一些JavaBean的常规方法,另外它还包含一些特殊的方法用于验证其中数据的完整性。

Struts利用ActionFormBean来进行View组件与Controller 组件之间表单数据的传递。

Struts框架把View组件接受的用户输入的表单数据保存在ActionForm bean之中,把它传递给Controller组件,Controller组件可以对ActionForm Bean中的数据进行修改。

Jsp文件使用Struts标签读取修改后的ActionForm Bean的信息,重新设置HTML表单。

对于采用Struts的Web应用,在Web应用启动时会加载并初始化控制器ActionServlet。

ActionServlet从struts-config.xml配置文件中读取配置信息,再把它们存放到ActionMappings对象中。

ActionServlet在接收到用户请求时会检查对应的ActionMapping的实例是否存在,如果不存在则会创建一个ActionMapping的实例,其中包含了把请求转发至那个Action的信息。

ActionServlet会根据配置文件检查Action对应的ActionForm的实例,如果ActionForm的实例不存在,则会创建一个ActionForm的对象,并将客户提交的表单数据保存到ActionForm中。

struts1之ActionServlet详解

struts1之ActionServlet详解

struts1之ActionServlet详解在web.xml中我们除了配置ActionServlet还配置了一些初始化参数信息,首先我们看第一个config参数,这里配置的是/WEB-INF/struts-config.xml,因为要下面传递一个这样一个配置信息,这个xml文件名是struts1标准的名字,所以这里这个初始化信息完全可以删除,如果不用这个标准名称这里就必须要在这里配置。

现在我们配置的是标准名字,所以我们可以删除,这是为什么呢?这里要看ActionServlet源代码才可以。

从图片上我们能看到ActionServlet中已经写好了默认的config信息了,就是标准名字。

所以这里删除也是可以的。

在看下面的debug和detail参数,这两个参数信息是有关日志信息级别的设置,主要关于解析配置文件/WEB-INF/struts-config.xml级别的初始化参数。

这里这两个参数可以完全去掉也不影响。

最后还有一个load-on-startup配置,这个是初始化servlet级别的初始化信息,这个参数如果大于等于0就是说明在服务器一启动就把servlet初始化,也就是调用ActionServlet的init方法,这个也可以到ActionServlet的源代码中去查找。

当ActionServlet初始化的时候就会读取/WEB-INF/struts-config.xml信息到内存中,读到内存是以什么样的形式展现的呢?我们现在可以看一下以前博客的那个mvc实例,那里面读取配置文件中的信息是以Actionmapping的形式展现的。

另外servlet-mapping的配置就不讲解了,这个都知道就是匹配url路径的,当遇到url-pattern的路径时候就会实例化Actionservlet。

通过这篇文章我们知道了当我们请求的时候ActionServlet是怎样实例化的,也知道为什么我们要配置web.xml信息了。

struts2的Action参数详细说明

struts2的Action参数详细说明

Struts2 Action参数详细说明1,Action的配置格式基本为:<package name="包名字" extends="继承的包" namespace="空间名" > <action name="访问的名称" class="处理请求的类"><result name="处理类返回的结果名称">该结果名称所对应的JSP页面</result> </action></package>如:<package name="aa" extends="struts-default" ><action name="myaa" class="com.test.MyAction"><result name="success">/test/msg.jsp</result></action></package>访问时:<a href="myaa.action" >访问myaaAction</a>2,method属性,该属性可以把一个类的多个方法映射为多个Action,如:类文件public class MethodAction extends ActionSupport{public String add(){return SUCCESS;}public String delete(){return SUCCESS;}public String modify(){return SUCCESS;}public String query(){return SUCCESS;}}struts.xml配置文件:<action name="访问的方法名" class="处理的类" method="处理的方法名"> <result name="结果页名">结果页面</result></action><action name="add" class="com.struts2.chen.MethodAction" method="add"> <result name="success">/method/addRes.jsp</result></action><action name="delete" class="com.struts2.chen.MethodAction" method="delete"> <result name="success">/method/deleteRes.jsp</result></action><action name="modify" class="com.struts2.chen.MethodAction" method="modify"> <result name="success">/method/modifyRes.jsp</result></action><action name="query" class="com.struts2.chen.MethodAction" method="query"> <result name="success">/method/queryRes.jsp</result></action>页面:<a href="add.action">增加</a><br /><a href="delete.action">删除</a><br /><a href="modify.action">修改</a><br /><a href="query.action">查询</a><br />3。

struts2反序列化原理

struts2反序列化原理

struts2反序列化原理Struts2 反序列化原理Struts2 是一个流行的 Java Web 应用程序框架,它使用 Java 反射和对象序列化来实现面向对象的开发模式。

在 Struts2 中,用户提交的数据将通过 HTTP 请求发送到服务器,并在服务器端进行处理。

其中一个重要的安全问题就是反序列化漏洞,攻击者可以利用这个漏洞执行恶意代码,从而导致严重的安全问题。

反序列化是将对象从字节流转换为内存对象的过程。

在 Struts2 中,用户提交的数据可以通过 HTTP 请求的参数传递给服务器端的Action 类。

这些参数将被解析并将其值设置到 Action 类的属性中,然后在服务器端进行处理。

由于 Struts2 使用了 Java 的反射机制,可以动态地创建对象并设置其属性值。

这就意味着,一个恶意用户可以通过构造特定的序列化对象来触发反序列化漏洞。

在 Struts2 中,反序列化漏洞主要是由于服务器端未正确验证和过滤用户提交的数据导致的。

攻击者可以构造一个特定的序列化对象,并将其作为参数传递给服务器端的 Action 类。

当服务器端尝试将该参数的值反序列化为对象时,恶意代码将被执行。

为了防止反序列化漏洞,开发者需要注意以下几点:1. 验证和过滤用户提交的数据:开发者应该对用户提交的数据进行验证和过滤,确保只有合法的数据才能被反序列化。

可以使用正则表达式、白名单等方式来验证和过滤数据。

2. 使用安全的序列化方式:在 Struts2 中,默认使用的是 Java 的序列化方式,这是一种不安全的方式。

开发者可以考虑使用其他安全的序列化方式,如 JSON、XML 等。

这些方式可以提供更好的安全性和灵活性。

3. 更新框架和依赖库:Struts2 框架和其依赖库经常会发布安全更新,开发者应及时更新框架和依赖库,以修复已知的安全漏洞。

4. 使用安全的配置:开发者应该确保 Struts2 的配置文件中没有暴露敏感信息,如数据库连接字符串、密码等。

struts的工作流程

struts的工作流程

struts的工作流程Struts的工作流程Struts是一个开源的Java Web应用程序框架,它的工作流程是一个基于MVC设计模式的过程。

本文将详细介绍Struts的工作流程,以帮助读者更好地理解和使用该框架。

1. 控制器层Struts的工作流程始于控制器层,它负责接收用户的请求并进行处理。

控制器层主要由ActionServlet组成,它是Struts框架的核心控制器。

当用户发起请求时,ActionServlet首先接收到请求,并根据配置文件中的映射规则将请求分发给相应的Action处理。

2. Action层Action层是Struts框架中的核心处理逻辑层。

当ActionServlet将请求分发给相应的Action后,Action会根据请求的类型和参数进行相应的处理。

Action可以从请求中获取用户提交的数据,并进行验证、处理和转换。

在处理完请求后,Action会将处理结果封装成一个ActionForm对象,并将控制权交给视图层。

3. 视图层视图层是Struts框架中负责展示数据的部分。

在Struts中,视图层通常由JSP页面来实现。

当Action将处理结果封装成ActionForm 对象后,它会将该对象传递给相应的JSP页面进行展示。

JSP页面可以通过EL表达式或JSTL标签库来访问ActionForm对象中的数据,并将其展示给用户。

4. 数据模型层数据模型层是Struts框架中负责处理业务逻辑的部分。

在Struts中,数据模型层通常由业务逻辑组件和数据访问组件组成。

业务逻辑组件负责处理业务逻辑,如验证用户输入、计算数据等;数据访问组件负责与数据库交互,如查询、插入、更新等操作。

在Struts的工作流程中,数据模型层主要由Action调用和协调。

以上就是Struts的基本工作流程。

当用户发起请求时,控制器层的ActionServlet接收到请求并将其分发给相应的Action处理。

Action负责处理请求并将处理结果封装成ActionForm对象。

struts2 工作原理

struts2 工作原理

struts2 工作原理
Struts2是一个用于构建Java web应用程序的开源框架。

它的
工作原理可以简单概括为以下几个步骤:
1. 客户端发送请求:当用户在浏览器中访问一个Struts2应用
程序的URL时,客户端会发送一个HTTP请求到服务器。

2. DispatcherServlet接收请求:服务器上运行的Servlet容器
(如Tomcat)接收到HTTP请求后,会通过web.xml配置文
件将请求发送给Struts2的核心组件DispatcherServlet。

3. 动作(Action)处理:DispatcherServlet根据配置文件中的信息,确定请求对应的Action类,并创建该类的实例。

Action是一
个POJO(Plain Old Java Object)类,用于处理具体的业务逻辑。

4. 结果视图(View)解析:Action类中的方法执行完业务逻辑后,会返回一个结果视图。

Struts2的结果视图可以是JSP页面、HTML、JSON等格式。

DispatcherServlet根据配置文件中指定
的结果视图解析器,将结果视图转化为最终的响应内容。

5. 结果响应:DispatcherServlet将最终的响应内容发送给客户端,客户端浏览器会将响应内容渲染并呈现给用户。

在这个过程中,Struts2框架提供了一系列的核心组件来协助
处理请求和响应,包括拦截器(Interceptor)、值栈(ValueStack)、类型转换器(Type Converter)等。

这些组件
能够帮助开发者处理表单提交、数据验证、数据转换等常见的web开发任务,从而简化开发过程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Struts的控制器如何知道什么样的信息转发到什么样的Action类呢?
问题:Struts的控制器如何知道什么样的信息转发到什么样的Action类呢?回答:
在struts 中,控制器信息转发的配置映射信息是存储在特定的XML文件(比如struts-config.xml)中的。

这些配置信息在系统启动的时候被读入内存,供struts framework在运行期间使用。

在内存中,每一个元素都与org.apache.struts.action.ActionMapping 类的一个实例对应。

当可以通过/logonAction.do(此处假设配置的控制器映射为*.do)提交请求信息的时候,控制器将信息委托com.test.LogonAction处理。

调用LogonAction实例的execute()方法。

同时将Mapping实例和所对应的LogonForm Bean信息传入。

其中name=LogonForm,使用的form-bean元素所声明的ActionForm Bean。

1。

相关文档
最新文档