我们要养成一个重要的编程习惯和经验就是要将程序中要用到的某些参数值设置在一个文件中,而不是以硬编码的形式写在程序代码中,以便不用修改原程序就可以对参数进行调整。如,TCP服务器程序监听的端口号,链接数据库时,数据库名称、用户名及密码等一系列信息。那么怎么有效地读取这些在外部文件中的信息呢?servlet程序中可以使用FileInputStream类来直接访问文件,但由于以后两个原因,无法在实际中应用:(1)一个web应用程序在本地文件系统中的安装位置是可以变化的,所以servlet不应使用绝对路径的形式来访问web应用程序中的某个文件。(2)在某个java类中使用的相对路径是相对于当前的工作目录而言的,这个工作目录通常是执行Java命令的目录,而不是当前正在执行的Java类所在的目录。
解决方法:
(1)jdk中ClassLoader类专门提供了getResource等方法去装载资源文件,他们使用与查找Java类文件同样的方式去查找原文件,即在类装载器所搜索的目录中查找。为了防止外部使用浏览器访问到资源文件,web应用程序中的资源文件通常应放到Web-INF目录或其子目录中。由于web应用程序的类装载器会搜索web-inf/classes目录,所有ClassLoader.
getResourceAsStream方法也可以访问该目录中的资源文件,但是,该方法不能访问web应用程序内的其他目录中的资源。
(2)ServletContext类中也有访问资源的方法,他是通过Servlet容器来获得资源文件的,它使得Servlet程序可以访问web应用程序内部的任意位置的文件。
例子:在package org.yan下新建ResourceServlet类,同时在web-inf/classes/org/yan/下新建一个文件yanconfig.properties,内容为:
database=mysql
username=yan
password=123456
ResourceServlet类内容如下,
public class ResourceServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter out=resp.getWriter();
URL urlyan=this.getServletContext().getResource("/WEB-INF/classes/org/yan/yanconfig.properties");
out.println(urlyan.toString()+"<br>");
//InputStream ips=this.getServletContext().getResourceAsStream("/WEB-INF/classes/org/yan/yanconfig.properties");
InputStream ips=this.getClass().getResourceAsStream("/org/yan/yanconfig.properties");
/*
* 以上两句作用是相同的
*/
Properties pros=new Properties();
pros.load(ips);
out.println("database="+pros.getProperty("database")+"<br>");
out.println("username="+pros.getProperty("username")+"<br>");
out.println("password="+pros.getProperty("password")+"<br>");
}
}
配置web.xml文件
<servlet>
<servlet-name>resourceservlet</servlet-name>
<servlet-class>org.yan.ResourceServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>resourceservlet</servlet-name>
<url-pattern>/Resourceservlet</url-pattern>
</servlet-mapping>
然后运行访问http://localhost:8080/mywebproject/Resourceservlet,则显示
- 大小: 48.4 KB
分享到:
相关推荐
当你遇到“找不到javax.servlet.*”这样的错误时,通常是因为你的项目缺少了这个库,所以需要引入`javax.servlet.jar`来解决问题。 1. **Java Servlet简介** Java Servlet是Java平台上的一个标准,用于扩展服务器...
2. **获取文件**:根据解析出的文件路径,Servlet需要访问服务器上的文件系统,找到对应的文件。这可能涉及到文件安全性和权限检查。 3. **设置响应头**:在发送文件之前,Servlet需要设置HTTP响应头,如`Content-...
这样,当两个或多个线程同时访问同一个 Servlet 时,可能会发生多个线程同时访问同一资源的情况,数据可能会变得不一致。 Servlet 的线程安全问题主要是由于实例变量使用不当而引起的。例如,在一个 Servlet 中定义...
- **安全问题**:在实际应用中,需要对用户提交的文件路径进行严格的校验,防止恶意访问或路径遍历攻击。 - **编码问题**:注意处理文件名的编码问题,避免在不同操作系统或浏览器中出现乱码。 - **资源管理**:确保...
文件操作过程中可能会遇到各种异常,例如文件不存在、读写权限问题等,因此需要适当的异常处理机制,确保即使出现问题也能优雅地响应客户端。 6. **性能优化**: 当处理大量文件或大文件时,可能需要考虑缓冲区的...
在完成所有文件的打包和写入后,别忘了关闭ZipOutputStream和相关的输入流,以释放资源。 在JSP页面上,你可以创建一个表单让用户选择要下载的文件,或者通过JavaScript、AJAX等方式异步提交文件列表到Servlet。...
这里,`servlet-class`是你的Servlet类全名,`url-pattern`定义了访问此Servlet的URL。 客户端(例如App)可以通过发送带有文件数据的POST请求到`http://yourserver.com/upload`来调用这个接口。在请求体中,文件...
2. **其他资源文件**: - **`js`**:存放JavaScript文件。 - **`css`**:存放CSS文件。 - **`jsp`**:存放JSP页面。 - **`index.html` 或 `index.jsp`**:一般作为欢迎页面。 3. **`web.xml`**: - **描述**:...
在本文中,我们将深入探讨Servlet的访问流程、生命周期以及doGet和doPost方法的工作原理。 首先,让我们了解Servlet的访问流程。当用户在浏览器中输入URL并提交请求时,这个请求会被发送到服务器。Tomcat这样的Web...
然而,在使用拦截器时,可能会遇到拦截器误拦截静态资源文件(如js、css、图片等)的问题。这不仅会影响网页的加载速度,还可能导致页面呈现异常。 在本文中,我们讨论了三种解决SpringMVC拦截器拦截静态资源文件的...
Servlet配置文件,通常被称为`web.xml`,是Java Web应用程序的核心配置文件,它定义了应用程序的行为和组件。在这个文件中,你可以配置Servlet、过滤器、监听器以及其他关键元素,以控制应用程序的运行方式。 1. **...
- **文件大小限制**:设置上传文件的最大大小,防止恶意大文件上传导致服务器资源耗尽。 - **文件类型检查**:只允许特定类型的文件上传,例如只接受图片文件,防止恶意文件上传。 - **文件名处理**:避免使用原始...
Servlet API提供了`HttpServletRequest`接口,用于访问和解析这些请求信息。 当用户通过表单提交文件时,HTML表单需要设置`enctype="multipart/form-data"`属性,这告诉浏览器以多部分格式发送数据。每个部分代表...
JavaWeb项目Servlet无法访问问题解决 Servlet简介 在JavaWeb项目中,Servlet是Java Servlet API的实现,负责处理客户端的请求并返回响应。Servlet可以处理各种类型的请求,包括GET、POST、PUT、DELETE等。 ...
5. **ServletContext接口**:表示整个Web应用的共享环境,所有Servlet都可以通过ServletContext访问应用级的资源,如全局初始化参数、读取Web应用的静态资源等。 6. **Servlet生命周期**: - **加载与实例化**:当...
- 在生产环境中,应考虑对`web.xml`进行安全配置,比如限制对某些资源的访问,或者设置过滤器来拦截恶意请求。 10. **性能优化**: - 可以调整Tomcat的配置参数,例如最大线程数、连接超时时间等,以优化服务器...
当用户访问该URL时,Servlet读取文件内容并设置响应头,指示浏览器以下载方式处理数据流,而不是直接在浏览器中显示。 7. **安全性与优化**: - 防止文件名注入:在保存文件时,应过滤掉特殊字符,避免用户通过...
Servlet是Java Web开发中的核心组件,它用于扩展服务器的功能,处理来自客户端(通常是Web浏览器)的...JSP技术大全(PDG)这本书可能深入讲解了JSP如何与Servlet协同工作,以及JSP的相关特性,是进一步学习的好资源。
在处理请求的过程中,Servlet可能会使用到各种资源,如数据库连接、文件流等。使用完这些资源后,应及时关闭或释放,以避免资源泄露和性能问题。合理管理资源对于保持服务器稳定运行至关重要。 #### 十、结论 ...
当我们在类路径下存储文件时,这些文件可能包括配置文件、静态资源或临时数据。要通过ServletContext获取这些文件的路径,我们需要使用以下方法: 1. `getRealPath()`:这个方法返回一个字符串,表示相对于Web应用...