public void doFilter(ServletRequest Request, ServletResponse Response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
if((Request instanceof HttpServletRequest) &&(Response instanceof HttpServletResponse))
{
BufferedImage src=null;
HttpServletRequest request=(HttpServletRequest)Request;
HttpServletResponse response=(HttpServletResponse)Response;
response.setContentType("text/html");
//获得水印图片的真实路径
String waterRealPath=request.getRealPath(Water_Image);
// 获得默认图片的真实路径
String defaultRealPath=request.getRealPath(Non_Image);
// 获得传输过来的原图的servlet路径
String imagePath=request.getServletPath();
// 获得原图真实路径
String realTargetPath=request.getRealPath(imagePath);
System.out.println("imagePath="+imagePath);
realTargetPath=realTargetPath.replaceAll("\\\\", "/");
defaultRealPath=defaultRealPath.replace("\\", "/");
waterRealPath=waterRealPath.replace("\\", "/");
System.out.println("realpath="+realTargetPath);
System.out.println("defaultpath="+defaultRealPath);
System.out.println("waterpath="+waterRealPath);
//
//装载原图
File targetFile=new File(realTargetPath);
//File targetFile=new File("C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\ImageWaterMark\\images\\BookCovers\\4757");
System.out.println("file="+targetFile.exists()+"file is file="+targetFile.isFile());
//装载默认图片
File defaultFile=new File(defaultRealPath);
if(targetFile.exists()&&targetFile.isFile())
{
//如果原图存在,则将原图装入内存
src=ImageIO.read(targetFile);
}
else
{
//如果原图不存在,则将默认图片装入内存
src=ImageIO.read(defaultFile);
}
/** 获得src图的宽度和高度* */
int srcWidth=src.getWidth();
int srcHeight=src.getHeight();
// 根据原图的尺寸,预装载一个图片,默认RGB格式
BufferedImage image=new BufferedImage(srcWidth,srcHeight,BufferedImage.TYPE_INT_RGB);
Graphics2D g2d=image.createGraphics();
// 将内存内的src图绘制到指定的矩形内
g2d.drawImage(src, 0,0, srcWidth, srcHeight,null);
// 在已绘制的图片中,加入透明通道 ,0f完全透明,0.5f半透明,1f不透明
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 1f));
if(targetFile.exists()&&targetFile.isFile())
{
// 装载水印
File waterFile=new File(waterRealPath);
// 将水印图片加入内存中
BufferedImage waterImage=ImageIO.read(waterFile);
/** 获取水印图片的宽度和高度* */
int waterWidth=waterImage.getWidth();
int waterHeight=waterImage.getHeight();
// 将水印图品绘制进预装载的图中
g2d.drawImage(waterImage, srcWidth-waterWidth, srcHeight-waterHeight, waterWidth, waterHeight,null);
}
//水印图片结束
g2d.dispose();
OutputStream os=response.getOutputStream();
JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(os);
//绘制新图片
encoder.encode(image);
//out.flush();
chain.doFilter(request,response);
}
}
如果是服务器上原来存在的图片,则不会有任何异常!!
如果图片在服务器上不存在,使用服务器上的默认图片后,就会出现下面的异常,这个怎么解决??
严重: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
at org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java:662)
at org.apache.catalina.servlets.DefaultServlet.doGet(DefaultServlet.java:325)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.common.charsetFliter.ImageFilter.doFilter(ImageFilter.java:124)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.common.charsetFliter.CharsetFilter.doFilter(CharsetFilter.java:23)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Unknown Source)
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
if((Request instanceof HttpServletRequest) &&(Response instanceof HttpServletResponse))
{
BufferedImage src=null;
HttpServletRequest request=(HttpServletRequest)Request;
HttpServletResponse response=(HttpServletResponse)Response;
response.setContentType("text/html");
//获得水印图片的真实路径
String waterRealPath=request.getRealPath(Water_Image);
// 获得默认图片的真实路径
String defaultRealPath=request.getRealPath(Non_Image);
// 获得传输过来的原图的servlet路径
String imagePath=request.getServletPath();
// 获得原图真实路径
String realTargetPath=request.getRealPath(imagePath);
System.out.println("imagePath="+imagePath);
realTargetPath=realTargetPath.replaceAll("\\\\", "/");
defaultRealPath=defaultRealPath.replace("\\", "/");
waterRealPath=waterRealPath.replace("\\", "/");
System.out.println("realpath="+realTargetPath);
System.out.println("defaultpath="+defaultRealPath);
System.out.println("waterpath="+waterRealPath);
//
//装载原图
File targetFile=new File(realTargetPath);
//File targetFile=new File("C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\ImageWaterMark\\images\\BookCovers\\4757");
System.out.println("file="+targetFile.exists()+"file is file="+targetFile.isFile());
//装载默认图片
File defaultFile=new File(defaultRealPath);
if(targetFile.exists()&&targetFile.isFile())
{
//如果原图存在,则将原图装入内存
src=ImageIO.read(targetFile);
}
else
{
//如果原图不存在,则将默认图片装入内存
src=ImageIO.read(defaultFile);
}
/** 获得src图的宽度和高度* */
int srcWidth=src.getWidth();
int srcHeight=src.getHeight();
// 根据原图的尺寸,预装载一个图片,默认RGB格式
BufferedImage image=new BufferedImage(srcWidth,srcHeight,BufferedImage.TYPE_INT_RGB);
Graphics2D g2d=image.createGraphics();
// 将内存内的src图绘制到指定的矩形内
g2d.drawImage(src, 0,0, srcWidth, srcHeight,null);
// 在已绘制的图片中,加入透明通道 ,0f完全透明,0.5f半透明,1f不透明
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 1f));
if(targetFile.exists()&&targetFile.isFile())
{
// 装载水印
File waterFile=new File(waterRealPath);
// 将水印图片加入内存中
BufferedImage waterImage=ImageIO.read(waterFile);
/** 获取水印图片的宽度和高度* */
int waterWidth=waterImage.getWidth();
int waterHeight=waterImage.getHeight();
// 将水印图品绘制进预装载的图中
g2d.drawImage(waterImage, srcWidth-waterWidth, srcHeight-waterHeight, waterWidth, waterHeight,null);
}
//水印图片结束
g2d.dispose();
OutputStream os=response.getOutputStream();
JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(os);
//绘制新图片
encoder.encode(image);
//out.flush();
chain.doFilter(request,response);
}
}
如果是服务器上原来存在的图片,则不会有任何异常!!
如果图片在服务器上不存在,使用服务器上的默认图片后,就会出现下面的异常,这个怎么解决??
严重: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
at org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java:662)
at org.apache.catalina.servlets.DefaultServlet.doGet(DefaultServlet.java:325)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.common.charsetFliter.ImageFilter.doFilter(ImageFilter.java:124)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.common.charsetFliter.CharsetFilter.doFilter(CharsetFilter.java:23)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Unknown Source)
解决方案 »
- 吉联新软件这家公司怎样?
- java.lang.NoSuchMethodException: Action[/employee] does not contain specified me
- ibatis sql语句问题 看不大懂 大家解释下
- 请教:在jsp中使用后台的静态变量
- Hibernate synchronizer下不了,那里能下载?
- 讨论:hibernate的好处
- jdk配置问题
- Castor JDO 问题!高分求教!!!
- 请问在jsp或别的java程序中如何调用Delphi做的com组件?问了很久,没人知道吗?
- 那位用过jboss,功能如何?可以应用于多大项目?EJB比普通javabeans要好再哪些地方?
- 过滤评论中是否有连接 http href < > 等等
- 怎么在以个普通的类里面拿到session或request,不可以传参数!
结贴算了!!