2013-11-28 14:19:47

ServletRequest中的getInputStream流处理

ServletInputStream getInputStream(),返回请求主题当中的二进制流ServletInputStream对象,需要注意的是这个 ServletInputStream只能够读取一次,就会关闭了。如果在Filter里处理了这个ServletInputStream流,那么在应用层再次去取:request.getInputStream()拿到的必然是个空对象。 为了避免这样的问题可以想办法复制这个流并处理然后交给HttpServletRequestWrapper(请求包装类)的子类一个处理后的流对象这样在应用层去request.getInputStream()拿到的流肯定就是包装后的流对象了。         /** * clone a InputStream * @param inputStream * @return * @throws IOException */ public static InputStream validateInputStream(InputStream inputStream,Properties properties) throws IOException{ if(inputStream==null){ return null; } byte[] b = new byte[1024];

2013-11-28 14:07:26

XXInputStream转ServletInputStream问题

ServletInputStream 是InputStream的子类,ServletInputStream和父类InputStream都是一个抽象方法。在请求当中:request.getInputStream();(request.getInputStream() 方法 源于ServletRequest。)获取到的是个ServletInputStream流对象,所以在处理完ServletInputStream之后需要把InputStram给转换成ServletInputStream对象。 protected ServletInputStream() { // NOOP } public int readLine(byte[] b, int off, int len) throws IOException { if (len <= 0) { return 0; } int count = 0, c; while ((c = read()) != -1) { b[off++] = (byte)c; count++; if (c == '\n' || count == len) { break; } } return count > 0 ? count : -1; }

2013-11-28 16:01:25

Java Servlet3.0动态注册Filter

Servlet3.0 API允许用户在代码里面动态注册Servlet和Filter,Tomcat7默认支持3.0。 配置: <listener> <listener-class>org.javaweb.filter.TestListener</listener-class> </listener> TestListener内容: package org.javaweb.filter; import java.util.EnumSet; import java.util.logging.Logger; import javax.servlet.DispatcherType; import javax.servlet.FilterRegistration; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class TestListener implements ServletContextListener{ private Logger logger = Logger.getLogger("javaweb&quo

2013-11-28 16:00:19

Java获取系统属性、环境变量和反射获取当前请求内容

获取环境变量: System.getenv() 获取系统属性: System.getProperties() 反射调用ServletRequest和HttpServletRequest的get方法获取请求数据: ServletRequest sr= (ServletRequest)request; Method[] cm = request.getClass().getDeclaredMethods(); Method[] rm = sr.getClass().getDeclaredMethods(); Invoke的时候应该用当前的request而不是newInstance(): m.invoke(request, new Object[]{}) 代码: /** * Server info * @param request * @return */ public Map<String,Object> getServerInfo(HttpServletRequest request){ Map<String,Object> map = new HashMap<String, Object>(), sp = new HashMap<String, Object>(), req =

2013-11-28 16:00:41

Java 加载资源文件问题

From:http://blog.csdn.net/funi16/article/details/8137708 JAVA里面对于类进行调用配置资源的文件数据,以this.getClass().getResourceAsStream()来读取比较合适。 路径采用相对路径直接可以从工程的path路径去找。 主要问题是如果类中采用的是静态块的话,则该this.getClass()报错,因为读静态块时,可能该对象并为构造,所以用this来指向当前对象不行。 ClassLoader提供了两个方法用于从装载的类路径中取得资源: public URL getResource(String name); public InputStream getResourceAsStream(String name); 这里name是资源的类路径,它是相对与“/”根路径下的位置。getResource得到的是一个URL对象来定位资源,而getResourceAsStream取得该资源输入流的引用保证程序可以从正确的位置抽取数据。 然而,程序中调用的通常并不是ClassLoader的这两个方法,而是Class的getResource和getResourceAsStream方法,因为Class对象可以从你的类得到(如YourClass.class或YourClass.getClass()),而ClassLoad

2013-11-28 16:02:19

Java URLClassLoader动态加载jar包

Jdk1.2开始有一个URLClassLoader类加载器。该类加载器用于从指向 JAR 文件和目录的 URL 的搜索路径加载类和资源。这里假定任何以 ‘/’ 结束的 URL 都是指向目录的。如果不是以该字符结束,则认为该 URL 指向一个将根据需要打开的 JAR 文件 package com.javaweb.user.test; import java.io.File; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; public class UrlTest { public static void main(String[] args) { try { URL url = new File("c:/Url.jar").toURI().toURL(); URLClassLoader ucl = new URLClassLoader(new URL[]{url});