关于<param-value>中的classpath和classpath*的零碎总结

测试环境:Tomcat8.0.45、eclipse4.6.2、JDK1.8、win10

之前查找classpath到底代表什么,网上的回答基本上都是互抄,说classpath是classes文件夹和lib文件夹。

经过测试后如果<param-value>里填写的是classpath:spring.xml则会在build的项目的classes目录里面找spring.xml文件,

但是不会在lib目录里找该文件;即如果spring.xml在classes目录中没有在lib目录中有是会报错的。

如果发现自己src下有该文件却仍然报错可能是在classes目录里没有生成,可以先检查一下这个原因。

而如果spring.xml放在的是lib里classes里没有,再将classpath换成classpath*则不会报错,但是这个文件似乎也没有加载,

有谁知道的能否告知下。

本关任务:使用ServletContext获取Web应用程序的初始化参数 相关知识 当Servlet容器启动时,会为每个Web应用创建一个唯一的ServletContext对象代表当前Web应用。 ServletContext对象不仅封装了当前Web应用的所有信息,而且实现了多个Servlet之间数据的共享。 在web.xml文件中,可以配置Servlet的初始化信息,还可以配置整个Web应用的初始化信息。Web应用初始化参数的配置方式具体如下所示。 <context-param> <param-name>参数名</param-name> <param-value>参数值</param-value> </context-param> <context-param> <param-name>参数名</param-name> <param-value>参数值</param-value> </context-param> <context-param>元素位于根元素<web-app>中,它的子元素<param-name><param-value>分别用来指定参数的名字参数值。可以通过调用 ServletContext 接口中定义的 getInitParameterNames() getInitParameter(String name)方法,分别获取参数名参数值。 操作步骤 在项目的web.xml文件中,配置初始化参数信息Servlet信息。 <context-param> <param-name>companyName</param-name> <param-value>itcast</param-value> </context-param> <context-param> <param-name>address</param-name> <param-value>beijing</param-value> </context-param> 在项目中创建Servlet类,该类中使用ServletContext接口来获取web.xml中的配置信息。 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter out = resp.getWriter(); ServletContext context = this.getServletContext(); Enumeration<String> names = context.getInitParameterNames(); while (names.hasMoreElements()){ String name = names.nextElement(); String value = context.getInitParameter(name); out.println(name+"="+value); } } 编程要求 根据提示,在右侧编辑器补充代码,在项目发布运行后能成功访问/TestServlet04,能够显示配置在web.xml中的参数信息。 编写步骤: 编辑com.servlet.TestServlet04文件 使用 ServletContext 获取 Web应用程序的初始化参数, 使用 PrintWriter 的 println 方法按照 name=value 的格式循环输出 package com.servlet; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; @Web
最新发布
03-26
<think>好的,我现在需要帮助用户了解如何通过ServletContext在TestServlet04中获取web.xml中的应用程序初始化参数并正确输出。首先,我得回顾一下ServletContext的相关知识。 根据引用[3],ServletContext代表整个Web应用,可以获取web.xml中的初始化参数。用户提到web.xml中的配置,比如context-param。这些参数是在整个应用范围内有效的,所以应该通过ServletContext来获取,而不是Servlet的init参数,后者是servlet范围内的,如引用[1]引用[2]所述。 接下来,用户需要具体的代码实现TestServlet04。根据引用[4],步骤包括获取ServletContext对象,然后使用getInitParameterNamesgetInitParameter方法遍历参数。我需要确认在web.xml中如何配置context-param,然后在Servlet中如何读取它们。 可能的步骤是:在web.xml中添加context-param标签,定义参数名值。然后在TestServlet04的doGet或doPost方法中,通过getServletContext()获取ServletContext实例,调用getInitParameterNames()得到所有参数名,逐个取出对应的值。 需要注意是否正确处理了Enumeration,以及是否正确输出到响应中。此外,确保在浏览器中访问正确的URL,如引用[4]中的例子所示。 用户可能遇到的问题包括:参数未正确配置在web.xml中,或者使用了错误的ServletContext方法。需要提醒用户检查配置代码中的方法调用是否正确。 现在需要将这些步骤整理成清晰的回答,包括配置示例、代码实现注意事项。同时生成相关问题,帮助用户深入理解。</think>### 通过 ServletContext 获取 Web 应用程序初始化参数的实现步骤 #### 1. 配置 web.xml 中的应用程序初始化参数 在 `web.xml` 文件中添加 `<context-param>` 标签,定义全局参数: ```xml <!-- 应用程序级初始化参数 --> <context-param> <param-name>appName</param-name> <param-value>MyWebApp</param-value> </context-param> <context-param> <param-name>author</param-name> <param-value>John Doe</param-value> </context-param> ``` #### 2. 编写 TestServlet04 的代码实现 在 Servlet 中通过 `ServletContext` 对象读取参数: ```java import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; public class TestServlet04 extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取 ServletContext 对象 ServletContext context = getServletContext(); // 设置响应内容类型 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); // 输出参数信息 out.println("<html><body>"); out.println("<h3>应用程序初始化参数:</h3>"); // 获取所有参数名 Enumeration<String> paramNames = context.getInitParameterNames(); // 遍历并输出参数 while (paramNames.hasMoreElements()) { String paramName = paramNames.nextElement(); String paramValue = context.getInitParameter(paramName); out.println("<p>" + paramName + ": " + paramValue + "</p>"); } out.println("</body></html>"); } } ``` #### 3. 配置 Servlet 的映射(web.xml) 添加 Servlet 声明映射: ```xml <servlet> <servlet-name>TestServlet04</servlet-name> <servlet-class>TestServlet04</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestServlet04</servlet-name> <url-pattern>/TestServlet04</url-pattern> </servlet-mapping> ``` #### 4. 访问测试 启动 Tomcat 后,通过浏览器访问: ``` http://localhost:8080/你的应用名/TestServlet04 ``` 输出结果示例: ``` 应用程序初始化参数: appName: MyWebApp author: John Doe ``` ### 关键点说明 1. **作用域差异**:`<context-param>` 是应用程序级参数(通过 `ServletContext` 获取),而 `<init-param>` 是 Servlet 级参数(通过 `ServletConfig` 获取)[^3][^1]。 2. **生命周期**:`ServletContext` 对象随 Web 应用启动而创建,销毁而释放,所有 Servlet 共享同一实例[^3]。 3. **参数遍历**:使用 `getInitParameterNames()` 获取所有参数名的枚举,再通过 `getInitParameter()` 逐个取值[^4]。 ### 注意事项 - 若参数未显示,检查 `web.xml` 中 `<context-param>` 是否配置在 `<web-app>` 根节点下。 - 确保 Servlet 类路径配置正确,避免 `ClassNotFoundException`。 - 中文乱码问题可通过 `response.setCharacterEncoding("UTF-8")` 解决。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值