/** * Http与Servlet工具类. * */ public abstract class ServletUtils { //-- Content Type 定义 --// public static final String EXCEL_TYPE = "application/vnd.ms-excel"; public static final String HTML_TYPE = "text/html"; public static final String JS_TYPE = "text/javascript"; public static final String JSON_TYPE = "application/json"; public static final String XML_TYPE = "text/xml"; public static final String TEXT_TYPE = "text/plain"; //-- Header 定义 --// public static final String AUTHENTICATION_HEADER = "Authorization"; //-- 常用数值定义 --// public static final long ONE_YEAR_SECONDS = 60 * 60 * 24 * 365; /** * 设置客户端缓存过期时间 的Header. */ public static void setExpiresHeader(HttpServletResponse response, long expiresSeconds) { //Http 1.0 header response.setDateHeader("Expires", System.currentTimeMillis() + expiresSeconds * 1000); //Http 1.1 header response.setHeader("Cache-Control", "private, max-age=" + expiresSeconds); } /** * 设置禁止客户端缓存的Header. */ public static void setDisableCacheHeader(HttpServletResponse response) { //Http 1.0 header response.setDateHeader("Expires", 1L); response.addHeader("Pragma", "no-cache"); //Http 1.1 header response.setHeader("Cache-Control", "no-cache, no-store, max-age=0"); } /** * 设置LastModified Header. */ public static void setLastModifiedHeader(HttpServletResponse response, long lastModifiedDate) { response.setDateHeader("Last-Modified", lastModifiedDate); } /** * 设置Etag Header. */ public static void setEtag(HttpServletResponse response, String etag) { response.setHeader("ETag", etag); } /** * 根据浏览器If-Modified-Since Header, 计算文件是否已被修改. * * 如果无修改, checkIfModify返回false ,设置304 not modify status. * * @param lastModified 内容的最后修改时间. */ public static boolean checkIfModifiedSince(HttpServletRequest request, HttpServletResponse response, long lastModified) { long ifModifiedSince = request.getDateHeader("If-Modified-Since"); if ((ifModifiedSince != -1) && (lastModified < ifModifiedSince + 1000)) { response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); return false; } return true; } /** * 根据浏览器 If-None-Match Header, 计算Etag是否已无效. * * 如果Etag有效, checkIfNoneMatch返回false, 设置304 not modify status. * * @param etag 内容的ETag. */ public static boolean checkIfNoneMatchEtag(HttpServletRequest request, HttpServletResponse response, String etag) { String headerValue = request.getHeader("If-None-Match"); if (headerValue != null) { boolean conditionSatisfied = false; if (!"*".equals(headerValue)) { StringTokenizer commaTokenizer = new StringTokenizer(headerValue, ","); while (!conditionSatisfied && commaTokenizer.hasMoreTokens()) { String currentToken = commaTokenizer.nextToken(); if (currentToken.trim().equals(etag)) { conditionSatisfied = true; } } } else { conditionSatisfied = true; } if (conditionSatisfied) { response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); response.setHeader("ETag", etag); return false; } } return true; } /** * 设置让浏览器弹出下载对话框的Header. * * @param fileName 下载后的文件名. */ public static void setFileDownloadHeader(HttpServletResponse response, String fileName) { try { //中文文件名支持 String encodedfileName = new String(fileName.getBytes(), "ISO8859-1"); response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedfileName + "\""); } catch (UnsupportedEncodingException e) { } } /** * 取得带相同前缀的Request Parameters. * * 返回的结果的Parameter名已去除前缀. */ public static Map<String, Object> getParametersStartingWith(ServletRequest request, String prefix) { AssertUtils.notNull(request, "Request must not be null"); Enumeration paramNames = request.getParameterNames(); Map<String, Object> params = new TreeMap<String, Object>(); if (prefix == null) { prefix = ""; } while (paramNames != null && paramNames.hasMoreElements()) { String paramName = (String) paramNames.nextElement(); if ("".equals(prefix) || paramName.startsWith(prefix)) { String unprefixed = paramName.substring(prefix.length()); String[] values = request.getParameterValues(paramName); if (values == null || values.length == 0) { // Do nothing, no values found at all. } else if (values.length > 1) { params.put(unprefixed, values); } else { params.put(unprefixed, values[0]); } } } return params; } /** * 客户端对Http Basic验证的 Header进行编码. */ public static String encodeHttpBasic(String userName, String password) { String encode = userName + ":" + password; return "Basic " + EncodeUtils.encodeBase64(encode.getBytes()); } }
相关推荐
在深入探讨这个工具类之前,我们首先需要理解Servlet的基本概念。Servlet是Java编程语言中用于扩展服务器功能的接口,主要用于Web应用程序。它是由Java Servlet API定义的,允许开发者创建动态响应HTTP请求的服务。 ...
ServletAPI定义了一组接口和类,使得开发者可以编写与Web服务器无关的代码,这些代码在容器(如Tomcat)中运行。 二、Servlet生命周期 1. 加载:当服务器启动或者第一次收到对Servlet的请求时,服务器会加载Servlet...
在本场景中,"java servlet上传下载工具类"是指利用Servlet技术实现的、专门用于文件上传和下载的代码模块。这个工具类是基于"孤傲苍狼"的实现进行封装的,通常这样的封装是为了提高代码的复用性,简化开发流程,...
1、Utils工具类有String工具类、XmlNode节点工具类、BeanFactory相关、Common工具类、Cookie工具类、Date工具类、Http工具类、JDBC工具类、日志Log工具类、Servlet相关等。2、工具类省了重复造轮子的工作,可以直接...
本文将深入探讨BeanUtil工具类的工作原理以及如何在Servlet中使用它。 首先,让我们理解一下JavaBean的概念。JavaBean是一种遵循特定规范的Java类,主要用于封装数据。它通常具有公有构造器、公有getter和setter...
这些接口和类提供了处理HTTP请求和响应的方法,以及管理Servlet生命周期的工具。Servlet API的主要组件包括: 1. `javax.servlet.Servlet`:这是所有Servlet类的基类,定义了Servlet的基本行为,如初始化、服务和...
1. **通过HTTP请求**:Applet可以使用URLConnection或HttpClient类向Servlet发送HTTP GET或POST请求。Servlet接收请求后处理数据,并通过HTTP响应将结果返回给Applet。这种方法简单直观,但可能会暴露敏感信息。 2....
3. **文件上传工具类**:文件上传是Web应用中的常见功能,Java提供了Servlet API来处理文件上传请求。Apache的Commons FileUpload库提供了一套方便的工具类,可以解析多部分请求,将文件保存到服务器。这类工具类...
- `javax.servlet.jsp.tagext.TagSupport`: 标签库中的自定义标签的基础类,提供了与JSP页面交互的方法。 - `javax.servlet.jsp.HttpJspPage`: 扩展了JspPage接口,添加了对HTTP特性的支持。 4. **如何引入javax....
本资源提供了两种实现方式:基于Servlet和Struts2(Action)的验证码工具类。以下是对这两个版本的验证码工具类的详细解释。 ### Servlet版验证码工具类 1. **验证码生成**: Servlet版本的验证码工具类通常会...
Servlet API提供了许多工具类,如`RequestDispatcher`用于请求转发和重定向,`Cookie`用于管理客户端的持久性数据,`Session`用于跟踪用户会话。 七、Servlet与JSP的配合 Servlet通常用于处理业务逻辑,而JSP则专注...
在这个场景下,我们主要关注两个关键知识点:servlet的配置与解析,以及XML解析。 首先,让我们深入了解servlet。Servlet是一个Java类,它扩展了Java平台对HTTP协议的支持,允许开发者编写运行在Web服务器上的Java...
Flex与Servlet之间的数据交互是JavaWeb开发中的一个重要环节,它涉及到客户端富互联网应用程序(RIA)与服务器端数据处理的协同工作。Flex作为一个基于Adobe Flash Player的前端开发框架,主要用于创建具有丰富用户...
它是一个Java类,遵循Java Servlet API,可以接收并响应HTTP请求。Servlet在服务器端运行,接收来自客户端的HTTP请求,处理这些请求,并返回响应。 在Web开发中,Servlet常被用于处理动态内容,如用户登录、数据...
2. **方便**:Servlet提供了一系列实用的工具方法,简化了HTML表单数据处理、HTTP头操作、Cookie管理和会话跟踪等复杂任务。 3. **可移植性**:因为Servlet是用Java编写的,并且Servlet API有严格的标准化,所以...
总结来说,`servlet.jar.zip`是用于开发基于Java Servlet的web应用的重要工具,其中的`servlet.jar`提供了Servlet API,使得开发者能够编写与HTTP服务器交互的Java代码,而`license.txt`则需仔细阅读,遵循其中的...
这里我们关注的是一个自定义的Util工具类,它特别针对Excel2007格式进行了优化,同时也兼容其他版本的Excel处理。这个工具类结合了文件上传、JSON解析以及Form表单提交等技术,提供了强大的文件处理能力。 首先,让...
总结起来,"java文件上传下载工具类"是Java Web开发中不可或缺的部分,它封装了与文件操作相关的复杂逻辑,使开发者能够更专注于业务逻辑。通过创建这样的工具类,可以提高代码的可复用性和可维护性,同时降低出错的...
与之前的版本相比,Servlet 3.0简化了Web应用的部署和配置,开发者可以不再依赖web.xml进行部署描述,而是直接在类上使用注解。 创建Servlet 3.0的Maven Web项目步骤如下: 1. 打开IntelliJ IDEA,选择“新建项目...
总结,Java Servlet是构建web应用程序的强大工具,与JSP结合使用可以实现灵活且高效的后端逻辑。学习和熟练掌握Servlet,是成为Java EE开发者的关键步骤。通过不断的实践和项目经验积累,你将在web开发领域更加...