首页技术struts2使用,servlet容器

struts2使用,servlet容器

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

大家好,关于struts2使用很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于servlet容器的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

struts2使用,servlet容器

struts2的工作流程

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

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

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

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

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

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

struts2使用,servlet容器

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

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

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

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

扩展资料:

应用流程注解

struts2使用,servlet容器

当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的心得

最近做一个应用的时候用到了Jmesa(至于Jmesa的详细介绍,请Google),但是关于Struts2和Jmesa的资料特别少,费尽周折总算让他们两个正常运行了,现在把使用他们的一些心得写下来与大家分享。

版本:

Struts2: 2.0.11

Spring: 2.5.1

Freemarker: 2.3.12

Jmesa: 2.2.9

Eclipse 3.3

对应Eclipse3.3的插件(没用MyEclipse,我依然活得不错,哈哈~)

Tomcat 6.0.*

Struts2与Freemarker的配置非常简单——根本不用配置,呵呵,关键点就在:怎么在Struts2环境下使用Jmesa?当然我只用到了Jmesa提供的Taglib,没用使用到其他高级功能。

(1)、Jmesa实现的Taglib只需要在页面给它一个 List等集合类型的变量就可以正常显示。使用分页功能需要加入下面这段脚本:<script type="text/javascript">

function onInvokeAction(id)...{

setExportToLimit(id,'');

createHiddenInputFieldsForLimitAndSubmit(id);

}

</script>

(2)、使用导出功能,此处以Excel为例。需要加入以下脚本:<script type="text/javascript">

function onInvokeExportAction(id)...{

var parameterString= createParameterStringForLimit(id);

alert(parameterString);

location.href='${request.getContextPath()}/(此处为Action的Url)?'+ parameterString;

}

</script>

还有关键的一点就是:Action要实现ServletRequestAware,ServletResponseAware这两个接口,并且加入以下代码: private HttpServletRequest request;

private HttpServletResponse response;

public void setServletRequest(HttpServletRequest request)......{

this.request= request;

}

public void setServletResponse(HttpServletResponse response)......{

this.response= response;

}

以上变量定义了实例变量request和 response,为什么要这样做呢?看一下Jmesa的Tag example就知道了,如下:

TableFacade tableFacade= new TableFacadeImpl(id, request);

tableFacade.setItems(items);

tableFacade.setColumnProperties("password","nickname");

tableFacade.setExportTypes(response, CSV, EXCEL);// Tell the tableFacade what exports to use.

Limit limit= tableFacade.getLimit();

if(limit.isExported())...{

tableFacade.getTable().setCaption("user");

tableFacade.getTable().getRow().getColumn("password").setTitle("password");

tableFacade.getTable().getRow().getColumn("nickname").setTitle("nickname");

tableFacade.render();

return null;

}

最关键的就是这两句了: TableFacade tableFacade= new TableFacadeImpl(id, request);

tableFacade.setExportTypes(response, CSV, EXCEL);// Tell the tableFacade what exports to use.

第一句中如果没有request对象的话,不能实例化TableFacade类型的对象。

第二句中如果没有response对象的话,就没有数据。

除此之外还有一点要注意的就是页面中定义的tableFacade的id一定要与Action中的id的值相同,此id起标识导出文件的文件名的作用,也唯一标识一个table。

好了只要注意以上这些Jmesa的这个Taglib就可以使用了。

至于在Freemarker中使用Jmesa的这个Taglib,有以下注意事项:

(1)、items的值(即数据集合)直接写变量名就可以

(2)、maxRows属性写为maxRows=8不用加引号

以上两处注意事项不知道是不是Freemarker版本的问题,呵呵,有待检验。

注:Jmesa的功能非常强大,可以实现复杂的表格。。。。。。好东西思想先进

如何在jsp页面中使用struts2标签

要在jsp中使用struts2.0的标签,首先要在页面使用taglib指令,将struts2的tld文件导入

<%@taglibprefix="s"uri="/struts-tags"%>

struts2的标签主要分为两大类:

UI标签这个几乎不怎么用就不介绍了

非UI标签

if,elseif和else

<s:iftest="link_type==1">//只有当test的的值为true时,才会执行if语句块里面的内容

文字

</s:if>

<s:elseiftest="link_type==2">

图片

</s:elseif>

<s:else>

-----

</s:else>

迭代标签的使用

iterator

用于遍历集合(java.util.Collection)或枚举值(java.util.Iterator)。

<ol>

<s:iteratorvalue="#request.names"status="stuts">

<s:iftest="#stuts.odd==true">//判断取出数据的奇偶性

<li>White<s:property/></li>

</s:if>

<s:else>

<listyle="background-color:gray"><s:property/></li>

</s:else>

</s:iterator>

</ol>

上述代码的显示效果就是相邻的两行颜色是区分开来的

URL地址标签,<s:url>用于生成一个URL地址,可以通过URL标签指定的<s:param>

子元素向URL地址发送请求参数

<s:urlaction="">

<s:paramname=""value=""></s:param>

</s:url>

超链接<ahref>一般和<s:url>标签一起使用,用于带多个参数。

<arel="external nofollow" href="

<s:urlaction="">

<s:paramname=""value=""></s:param>

<s:paramname=""value=""></s:param>

<s:paramname=""value=""></s:param>

</s:url>">

链接到...

</a>

set标签,用于将某个值放入指定的范围内。例如application,session等。

<s:setname="user"value="userName"scope=”request”/>

Struts2页面开发中常用标签使用规范:

2.1.通过<inputname="userName"type="text"class=""size="15">

往action中传值,action中要有相应的属性,并提供SET/GET方法。

(在数量少时可以使用request.getParameter(“userName”);)

2.2.在页面显示action传来的数据,使用property标签。需要显示的数据从action中获得。

2.3.往action中的实体对象内传值,使用textfield标签。

2.4.在页面中判断指定值使用<s:if>标签。判断数据从action中获得。

2.5.在页面中需要循环列表显示的数据使用<s:iterator>标签,列表数据从action中获得。

2.6.URL地址和超链接可以使用<ahref>和<s:url>,在传多值时建议<ahref>和<s:url>一起使用

好了,关于struts2使用和servlet容器的问题到这里结束啦,希望可以解决您的问题哈!

delete函数,删除函数select into(select into from)