`
jsx112
  • 浏览: 307250 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

在struts2中应用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里有如下的方法:

Java代码
public void init(ServletConfig config) throws ServletException {  
    super.init(config);  


public void init(ServletConfig config) throws ServletException {
super.init(config);
}写一个servlet,复写上面的init方法,即可达到初始化ServletConfig对象的目的
例如:

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


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中做如下配置
例如:

Java代码
<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> 

<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对象信息:

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

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



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



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

Java代码
public class MyAction extends MyServlet implements Action 

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



分享到:
评论

相关推荐

    javaWEB总结(3):ServletConfig对象

    ServletConfig对象的试验代码

    ServletContext与ServletConfig关系

    ServletContext与ServletConfig关系

    ServletConfig与ServletContext.docx

    注意:每个servlet有一个ServletConfig,...如果修改XML来改变一个初始化参数的值,只有当Web应用重新部署时Web应用其他部分才会看到,因为servlet只会初始化一次,在初始化时会为它提供ServletConfig和ServletContext。

    Servlet知识点和示例

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

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

    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 20、abstract class和interface有什么区别? ...

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

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

    jsp内置对象的用法

    exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象 序号 方 法...

    ServletConfig的描述

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

    JavaEE中关于ServletConfig的小结

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

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

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

    ServletConfig

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

    Servlet的运行机制

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

    ServletContext与ServletConfig的深度分析

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

    JavaWeb核心之Servlet-源代码

    但在实际开发中,我们不会直接去实现Servlet接口,因为那样需要覆盖的方法太多, 我们一般创建类继承HttpServlet 实现步骤: 1)创建类继承HttpServlet类 2)覆盖doGet和doPost 3)在web.xml中进行servlet的配置。 ...

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

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

    java 面试题 总结

    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 17、abstract class和interface有什么区别? 声明方法...

    java-servlet-api.doc

    如果有助于你处理应用的数据需求,你也许需要绑定对象到Session中,你可以通过一个唯一的名字绑定任何的对象到Session中,这时,你需要使用HttpSession对象。任何绑定到Session上的对象都可以被处理同一会话的...

    How Tomcat Works: A Guide to Developing Your Own Java Servlet Container

    11.3.3 ServletConfig对象 90 11.3.3.1 getServletContext方法 90 11.3.3.2 getServletName方法 91 11.3.3.3 getInitParameter方法 91 11.3.3.4 getInitParameterNames方法 92 11.3.4 container的父子关系 92 11.4 ...

Global site tag (gtag.js) - Google Analytics