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

重写jspInit()对ServletContext进行方法时,注意配置servlet-mapping

 
阅读更多

 

做了个小实验,对email.jsp的jspInit()方法进行重写,首先通过ServletConfig获取email,并请其存储在ServletContext中,最后对存储的attribute进行输出。具体配置如下。

 

 

web.xml配置:

 

 

<servlet>

<servlet-name>email</servlet-name>

<jsp-file>/email.jsp</jsp-file>

<init-param>

<param-name>email</param-name>

<param-value>test@hotmail.com</param-value>

</init-param>

</servlet>

 

 

 

email.jsp:

 

<%!

 

public void jspInit() {

ServletConfig config = getServletConfig();

String email = config.getInitParameter("email");

System.out.println("jspInit : "email);

ServletContext ctx = getServletContext();

ctx.setAttribute("email", email);

}

%>

 

<%= application.getAttribute("email") %>

 

 

 

启动tomcat 结果为:

 

 

 写道
2012-7-9 16:54:44 org.apache.catalina.core.StandardEngine startInternal
信息: Starting Servlet Engine: Apache Tomcat/7.0.27
jspInit : test@hotmail.com
2012-7-9 16:54:44 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory D:\tomcat\webapps\docs
2012-7-9 16:54:44 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory D:\tomcat\webapps\examples
2012-7-9 16:54:44 org.apache.catalina.core.ApplicationContext log
信息: ContextListener: contextInitialized()
2012-7-9 16:54:44 org.apache.catalina.core.ApplicationContext log
信息: SessionListener: contextInitialized()
2012-7-9 16:54:44 org.apache.catalina.core.ApplicationContext log
信息: ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', 'org.apache.jasper.compiler.TldLocationsCache@22ce00')
2012-7-9 16:54:44 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory D:\tomcat\webapps\host-manager
2012-7-9 16:54:44 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory D:\tomcat\webapps\manager
2012-7-9 16:54:44 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory D:\tomcat\webapps\ROOT
2012-7-9 16:54:44 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-bio-8080"]
2012-7-9 16:54:44 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-bio-8009"]
2012-7-9 16:54:44 org.apache.catalina.startup.Catalina start
信息: Server startup in 571 ms
jspInit :null

 

 

注意其中2行红字部分:

 

第1行:在容器启动时会对jsp进行转换操作,并调用其jspInit(),因此输出的为test@hotmail.com。此时并没有对email.jsp 进行访问,因此<%= application.getAttribute("email") %>还没有执行。

第2行:对页面(email.jsp) 进行访问,输出的结果为jspInit : null。这里非常奇怪,为什么jspInit会执行2次?而且结果为null。我们知道jspInit()只在初始化的时候执行,而且容器中只有这么一个实例,也就是说最多只会执行一次而已。

 

通过eclipse debug一下,发现这里分别实例化了2个ServletContext对象。。。于是想到一定是某些配置不对,导致容器的实例化是出现一些问题。

 

最终发现,一定要配置相应的<servlet-mapping>,而且url-pattern必须为相应email.jsp,修改如下:

 

 

 

<servlet>

<servlet-name>email</servlet-name>

<jsp-file>/email.jsp</jsp-file>

<init-param>

<param-name>email</param-name>

<param-value>test@hotmail.com</param-value>

</init-param>

</servlet>

 

<servlet-mapping>

<servlet-name>email</servlet-name>

<url-pattern>/email.jsp</url-pattern>

</servlet-mapping>

 

 

目前还不清楚,容器具体的实现细节。

分享到:
评论

相关推荐

    servlet-2-3.jar.zip

    8. **生命周期方法**:Servlet 2.3扩展了Servlet的生命周期方法,如`init()`、`service()`、`destroy()`,以及`jspInit()`和`jspDestroy()`,让开发者能更好地控制Servlet的初始化和销毁过程。 9. **静态资源服务...

    java JSP Servlet试题 带答案

    `&lt;servlet-mapping&gt;` 和 `&lt;url-pattern&gt;` 通常在 `&lt;servlet-mapping&gt;` 元素内部使用,用于指定 Servlet 的映射路径。 #### 3. 假设 web 应用的文档根目录为 MyApp,那么可以从哪里找到 database.jar 文件。(选择1 ...

    关于jsp语法和练习

    - 在页面转换阶段,JSP会经历几个关键步骤:编译JSP页面成对应的Servlet类,然后创建该Servlet的实例,最后调用Servlet的`jspInit()`方法。在这些步骤中,对JSP语法的合法性检查和相关标记文件的语法检查是在转换前...

    javascript习题.doc

    在Web应用的部署描述文件(web.xml)中,通过`&lt;servlet-mapping&gt;`元素可以将Servlet映射到特定URL,如`&lt;servlet-mapping&gt;&lt;servlet-name&gt;LoginServlet&lt;/servlet-name&gt;&lt;url-pattern&gt;/utils/LoginServlet&lt;/url-pattern...

    javaEE/servlet/jsp api;参考文档

    在初始化阶段,Servlet会调用`init()`方法进行一次性配置。服务阶段,Servlet通过`service()`方法处理HTTP请求。当Web应用不再需要Servlet时,会调用`destroy()`方法释放资源。 JSP的生命周期则分为翻译、编译、...

    JSP-Servlet学习笔记第2版.pdf

    6. Servlet API:熟悉Servlet API中提供的各种接口和类,如HttpServletRequest、HttpServletResponse、ServletConfig、ServletContext等,它们是进行Servlet开发的基础。 7. 数据共享和数据持久化:了解如何在JSP和...

    jsp servlet struts hibernate spring

    - **缓冲区**:JSP的输出默认先写入缓冲区,只有在页面完成、缓冲区满或调用flush方法时,内容才会发送到客户端。 2. **Servlet** - **生命周期**:Servlet的生命周期包括加载、初始化(jspInit)、服务(jsp...

    servlet /jsp

    - **初始化**:在实例化后,服务器调用Servlet的`init()`方法,用于初始化Servlet,例如设置配置参数。 - **服务**:对于每个来自客户端的请求,服务器都会调用Servlet的`service()`方法,该方法会根据请求类型...

    JSP笔记

    - `jspInit()`: 在Servlet初始化时调用。 2. **服务处理**: - `_jspService()`: 处理用户请求的主要方法。 3. **销毁**: - `jspDestroy()`: 当Servlet容器卸载Servlet时调用。 综上所述,JSP是一种强大的Web开发...

    servlet的原理

    2. **初始化**:Servlet容器调用`init()`方法进行初始化工作,通常在此方法中设置配置参数等。 3. **服务请求**:当客户端发送请求时,Servlet容器调用`service()`方法来处理请求。根据请求类型(GET或POST),可能...

    采用jsp+javabean+servlet+mysql(界面美观)

    A. 本留言本采用jsp+javabean+servlet+mysql B. 本系统运行环境: ...6、 此留言本实现了MVC模式,完全是通过servlet控制数据,而且使用了连接池,一些基本的类也是完全提供,对学习jsp的MVC模式有很大的帮助。

    javaweb技术原理文档

    需要注意的是,`jspInit()`方法在整个Servlet的生命周期中仅执行一次。 - **服务阶段**:对于每次请求,JSP引擎都会创建一个新的线程来调用Servlet实例的`jspService()`方法。若多个客户端同时请求该JSP文件,JSP...

    根据一个JSP文件实例看下九个隐藏对象.pdf

    4. **`config`**:`javax.servlet.ServletConfig`,提供了对Servlet配置信息的访问。 5. **`application`**:`javax.servlet.ServletContext`,提供了对整个Web应用上下文的访问。 6. **`page`**:`javax.servlet....

    eclipse常见报错

    可以重装 JDK 到 1.6 版本,然后将项目的 Java Compiler 改为 1.6 版本,对项目进行重新编译。 6. Mysql 的错误:Data source rejected establishment of connection message from server: "Too many connections...

    Jsp学习笔记

    5. **呼叫jspInit()方法**:在Servlet生命周期中,jspInit()方法用于初始化Servlet,可以在XML配置文件中设置JSP的初始化参数。 6. **呼叫_jspService()方法**:这是Servlet的核心方法,处理客户端的请求,并生成...

    JSP学习经验小结分享

    之后,servlet的实例被创建,执行jspInit()方法进行初始化工作,此方法仅在servlet生命周期中执行一次。然后,对每个请求,JSP引擎都会创建一个新的线程进行处理,从而达到以多线程方式执行的目的,这大幅降低了系统...

    SCWCD Mock Exams

    其中,`jspInit()`在Servlet初始化时调用;`jspService()`用于处理请求;`jspDestroy()`在Servlet被卸载前调用。而 `_jspService()` 不是标准方法,通常是由JSP容器内部使用的方法。 #### 四、覆盖JSP文件的初始化...

    Java开发工程师试卷三(~).doc

    - B选项:`jspInit()`方法在JSP首次加载时执行一次。 - C选项:每当用户请求JSP时,`_jspService()`方法都会执行一次。 - D选项:`jspDestroy()`方法在JSP实例不再需要时执行,而不是每次请求。 5. 代码输出: ...

    jsp工作原理

    3. **Servlet实例的创建与初始化**:接下来,JSP引擎会创建一个对应的Servlet实例,并调用该实例的`jspInit()`方法进行初始化操作。`jspInit()`方法在Servlet的整个生命周期中只会被执行一次,通常用于执行一些一次...

    JSP基础知识的课件

    - `jspService()`: 由容器自动生成,不应重写,它是处理请求的核心方法。 **JSP元素** - **JSP脚本元素**:包括注释、表达式、声明和脚本let,它们都用`&lt;%...%&gt;`包裹。 - **指令元素**:以`&lt;%@...%&gt;`开始,用于...

Global site tag (gtag.js) - Google Analytics