首页技术struts2请求处理流程 以下哪些是技术服务请求处理流程

struts2请求处理流程 以下哪些是技术服务请求处理流程

编程之家2026-06-301082次浏览

本篇文章给大家谈谈struts2请求处理流程,以及以下哪些是技术服务请求处理流程对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

struts2请求处理流程 以下哪些是技术服务请求处理流程

struts2的主要工作流程,处理方式

给LZ说一下struts2的主要工作流程吧,你可以下载一下他的流程图,首先我们有个请求request进入,会首先走ActionContextClearup清空值栈等,但是会留下我们的session和setgetAttribute等,然后会走一下OtherFilter,其他的一些过滤器什么的,然后就会走到我们的filterDispathcer总控,会询问ActionMapping是否此请求需要struts2处理,如果需要,走到ActionProxy代理类,其次,根据ConfigurationManger配置管理找到struts配置文件,然后才是走到真正需要做事的地方,ActionInvocation会依次走我们的拦截器,拦截器走的时候回去值栈中取值,就是通过taglib放到页面上去,走action再走对应result,最后生成相应返回回去。

给LZ两个图吧,第一个图是具体的点击新增按钮后的一系列处理,第二个图是详细的struts2的流程

struts2的工作流程

在Struts2框架中的处理大概分为以下几个步骤:

1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求

2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)

3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action

struts2请求处理流程 以下哪些是技术服务请求处理流程

4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy

5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类

6、ActionProxy创建一个ActionInvocation的实例。

7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。

在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及ActionMapper。

struts2请求处理流程 以下哪些是技术服务请求处理流程

扩展资料:

应用流程注解

当Web容器收到请求(HttpServletRequest)它将请求传递给一个标准的的过滤链包括(ActionContextCleanUp)过滤器。

经过Other filters(SiteMesh,etc),需要调用FilterDispatcher核心控制器,然后它调用ActionMapper确定请求哪个Action,ActionMapper返回一个收集Action详细信息的ActionMaping对象。

FilterDispatcher将控制权委派给ActionProxy,ActionProxy调用配置管理器(ConfigurationManager)从配置文件中读取配置信息(struts.xml),然后创建ActionInvocation对象。

ActionInvocation在调用Action之前会依次的调用所用配置拦截器(Interceptor N)一旦执行结果返回结果字符串ActionInvocation负责查找结果字符串对应的(Result)然后执行这个Result Result会调用一些模版(JSP)来呈现页面。

拦截器(Interceptor N)会再被执行(顺序和Action执行之前相反)最后响应(HttpServletResponse)被返回在web.xml中配置的那些过滤器和核心控制器(FilterDispatcher)。

参考资料:百度百科-Struts 2

struts2怎么处理ajax请求

Ajax本质上和普通的HTTP请求是一样的,只不过普通的HTTP请求是给人看的,而Ajax请求是给JS代码去用的。

所以Ajax请求的页面一般比普通的HTTP请求的响应内容还要简单,可能是一个页面的一部分,也可能是xml、json等结构化的数据,还可能是一个简单的字符串。

所以,在Struts 2中使用Ajax,Action一般就不会调用一个jsp视图来显示了(如果Ajax请求内容是页面的一部分也可能调用jsp视图),而是通过一些其他的方式。

下面介绍了三种方法,用于Action实现Ajax请求。

方法1:依赖Servlet API

[java]view plaincopy

publicclassHelloActionextendsActionSupport{

publicStringexecute()throwsException{

HttpServletResponseresponse=ServletActionContext.getResponse();

response.setCharacterEncoding("UTF-8");

response.setContentType("text/html;charset=utf-8");

PrintWriterout=response.getWriter();

out.print("HelloWorld");

out.flush();

out.close();

returnNONE;//或returnnull

}

}

[html]view plaincopy

<packagename="main"namespace="/"extends="struts-default">

<actionname="hello"class="com.xxg.HelloAction"method="execute">

</action>

</package>

在Action的方法中return NONE或return null表示直接用Action来处理,而不需要调用result,所以在配置文件的action标签中也没有result标签。

这里直接获取到Servlet中的HttpServletResponse对象,通过response的输出流写一个字符串,和不使用Struts 2直接用Servlet类似。

方法2:使用result type="stream"

在Struts 2的文档中推荐了一个比上一个方法更简单的方式,使用type为stream的result。通过这种方法,可以不依赖于Servlet API,所以单元测试会更方便。

[java]view plaincopy

publicclassHelloActionextendsActionSupport{

privateInputStreaminputStream;

publicInputStreamgetInputStream(){

returninputStream;

}

publicStringexecute()throwsException{

Stringstr="HelloWorld";

inputStream=newByteArrayInputStream(str.getBytes("UTF-8"));

returnSUCCESS;

}

}

[html]view plaincopy

<packagename="main"namespace="/"extends="struts-default">

<actionname="hello"class="com.xxg.HelloAction"method="execute">

<resultname="success"type="stream">

<paramname="contentType">text/html;charset=utf-8</param>

<paramname="inputName">inputStream</param>

</result>

</action>

</package>

在struts配置文件中,result的type设为stream。其中包含两个参数,第一个是contentType,表示响应的类型,如果有中文的话最好设置一下编码,第二个参数是用来指定Action中的对应的输入流,它的默认值就是inputStream,所以可以省略。

方法3:struts 2 json插件

上面两种方法可以返回的内容很随意,可以是任何字符串。

在很多Ajax请求会用到json字符串,因为它可以很方便的转换成JavaScript对象。

使用struts2-json-plugin可以很方便的生成json(用上面的两种方法调用json工具生成json也是不错的选择,这样可以不用使用这个插件)。

此时需要添加一个jar文件:struts2-json-plugin-x.x.x.x.jar。

[java]view plaincopy

publicclassHelloActionextendsActionSupport{

privateStringname;

privateintage;

privateList<String>friends;

publicStringgetName(){

returnname;

}

publicintgetAge(){

returnage;

}

publicList<String>getFriends(){

returnfriends;

}

publicStringexecute()throwsException{

this.name="xxg";

this.age=22;

this.friends=newArrayList<String>();

this.friends.add("姚明");

this.friends.add("林丹");

returnSUCCESS;

}

}

[html]view plaincopy

<packagename="main"namespace="/"extends="json-default">

<actionname="hello"class="com.xxg.HelloAction"method="execute">

<resultname="success"type="json"></result>

</action>

</package>

在package中extends应该改为json-default而不是struts-default,result的type设为json。

通过浏览器打开这个页面可以看到这个json:

{"age":22,"friends":["姚明","林丹"],"name":"xxg"}

OK,本文到此结束,希望对大家有所帮助。

js数组里面放对象(exceljs数组里面放对象)button属性大全 button怎么用