`
hnylj
  • 浏览: 209716 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts2的Action获取ServletConfig对象的解决方案

阅读更多

这是一个在实际项目中遇到的问题,问题描述如下:
系统整体架构是通过struts2+公司自己的框架,公司自己的框架做了很多事情,为了共用这些部分,减少开发工作量,现在要在每一个请求到达struts2的action时,在action里得到一个已经初始化的ServletConfig对象,也就是请求到达的时候,ServletConfig已经初始化了,即这个struts的Action有了两重职责,一方面要处理请求转发,另一方面要完成ServletConfig对象的初始化。

 

那么在struts2的Action中该如何初始化ServletConfig对象呢?其实在Struts的Action中根本不可能直接初始化ServletConfig,Action已经跳出了servelt的范围,ServletConfig的初始化一定是在web应用启动的时候所做的事情。那么通过分析,能在web应用启动的时候进行初始化的方式就有好几种了:
1.直接通过一个servlet实现;
2.通过监听器实现;
3.通过继承struts2的FilterDispatcher,复写init()方法实现。

 

本人是通过第一种方法实现的,我们知道Servlet里有如下的方法:

public void init(ServletConfig config) throws ServletException {
	super.init(config);
}

写一个servlet,复写上面的init方法,即可达到初始化ServletConfig对象的目的
例如:

public void init(ServletConfig config) throws ServletException {
	super.init(config);
    将config设置到ServletContext中,需要的时候去get即可
	config.getServletContext().setAttribute("servletConfig", config);
	System.out.println("初始化Config对象......" + servletConfig.toString());
}

并在web.xml中做如下配置
例如:

<servlet>
    <servlet-name>initServlet</servlet-name>
    <servlet-class>com.servlet.InitServlet</servlet-class>
	<init-param>
		<param-name>method</param-name>
		<param-value>findByPage</param-value>
	</init-param>
	<init-param>
		<param-name>pageSize</param-name>
		<param-value>15</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>

 

在web应用启动的时候,ServletConfig对象就进行了初始化,并将其初始化信息放置在了ServletContext中,在需要ServletConfig对象信息时,我们就可以在struts2的Action中通过如下的代码得到servletConfig对象信息:

ServletConfig sconfig = (ServletConfig)request.getSession().getServletContext().getAttribute("servletConfig");

 

以上是在项目开发中遇到的一个小问题,当然你可能不会遇到这个问题,(因为我在公司自己的框架中开发,会有一些限制)但我相信这个思路会对大家遇到类似问题时有一些帮助。

 

另外,我们甚至可以让自己的struts2的Action继续于一个servlet,此时的Action像这样:

public class MyAction extends MyServlet implements Action

在MyServlet中做一些初始化的工作,然后实现Action接口的public String execute() throws Exception方法,这也同样是一个struts2的Action。 只不过,struts2的初衷就是要脱离servlet容器,而如果继承一个servlet就有点违背struts2的初衷了。

 

一个Java技术交流群,一起交流,共同进步,扣扣群号:513086638

 

 

 

7
0
分享到:
评论
5 楼 寻找那一片蓝 2011-10-28  
总于找到解决办法了!
4 楼 julysohu 2011-03-30  
谢啦  呵呵 太有用啦
3 楼 mj1389541 2009-05-26  
我也遇到类似的组合,在自己的框架中获取数据库连接配置,楼主的建议正好可以用到。
2 楼 hnylj 2009-02-06  
kjj 写道

汗,那你们要action干什么,用servlet 算啦,用struts2就是浪费时间

你说得有道理,但项目组决定用struts2,我只好每天不停地改造公司自己的框架!
1 楼 kjj 2009-02-04  
汗,那你们要action干什么,用servlet 算啦,用struts2就是浪费时间

相关推荐

    javaWEB总结(3):ServletConfig对象

    ServletConfig对象的试验代码

    ServletContext与ServletConfig关系

    ServletContext与ServletConfig关系

    Servlet知识点和示例

    (2)ServletContext对象被包含在ServletConfig对象中,开发人员在编写servlet时,可以通过 this.ServletConfig.getServletContext方法获得对ServletContext对象的引用.还可以直接通过 this.getServletContext方法...

    ServletConfig的描述

    NULL 博文链接:https://shoushounihao.iteye.com/blog/1919541

    ServletConfig与ServletContext.docx

    注意:每个servlet有一个ServletConfig,每个Web应用有一个ServletContext.要把初始化参数认为是部署时常量,可用在运行时得到这些初始化参数,但不能设置初始化参数,根本没有setInitParameter().如果修改XML来改变...

    jsp有哪些内置对象?作用分别是什么?分别有什么方法?

    JSP共有以下9个内置的对象:  request 用户端请求,此请求会包含来自GET/... config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。  page表示从该页面产生的一个servlet实例

    ServletConfig

    博文链接:https://hotfisher.iteye.com/blog/92177

    servletAPI中文版(TXT格式,自己翻译)

    ServletConfig getServletConfig() 返回传递到servlet的init()方法的ServletConfig对象 void service(ServletRequest request, ServletResponse response)throws ServletException,IOException 处理request对象中...

    jsp内置对象的用法

    7 ServletConfig getServletConfig() 返回当前页的ServletConfig对象(config) 8 ServletContext getServletContext() 返回当前页的ServletContext对象(application) 9 void setAttribute(String name,Object ...

    ServletContext与ServletConfig的深度分析

    很清楚的讲解了ServletContext和ServletConfig,不光有理论上的讲解,还有例子。

    Servlet的运行机制

    1. 手动编写java代码,实现Servlet的访问 2. 使用Eclipse创建Web Project,并创建一个Servlet继承HttpServlet...6. 使用ServletConfig对象,访问web.xml中的数据库连接信息。 7. 使用ServletContext对象,实现转发操作

    超全面javaweb教程28天第9天 6 ServletConfig介绍

    超全面javaweb教程28天第9天_6_ServletConfig介绍

    JavaEE中关于ServletConfig的小结

    ServletConfig是针对特定的Servlet的参数或属性。ServletConfig是表示单独...从一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对本servlet有效,一个servlet的ServletConfig对象不能被另一个servlet访问

    超级有影响力霸气的Java面试题大全文档

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 17、...

    JavaWeb核心之Servlet-源代码

    ServletConfig : 代表的是该servlet对象的配置信息 2)service(ServletRequest request,ServletResponse response) 何时执行:每次请求都会执行 ServletRequest :代表请求 认为ServletRequest 内部封装的是 ...

    有关ServletConfig与ServletContext的访问

    下面小编就为大家带来一篇有关ServletConfig与ServletContext的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    JavaWeb新版教程Servlet-1vlet-ServletConfig类使用介绍.avi

    JavaWeb新版教程Servlet-1vlet-ServletConfig类使用介绍.avi

    史上最全Java面试大全

    14如何利用ServletContext和ServletConfig对象获得初始化参数 27 15说出Servlet的生命周期,并说出Servlet和CGI的区别 27 16.访问修饰符public,private,protected,以及不写(默认)时的区别? 27 17. Math.round...

Global site tag (gtag.js) - Google Analytics