一般的文章都有 文本内容 和图片的。我想实现一个图片服务(或服务器)来单独处理图片逻辑,和文章处理逻辑分离。于是我想到一个办法,来尝试。

背景:

1. 假如文章的处理在web App,就叫web1 吧。那个图片理应存放在这个app的某个文件夹下,比如路径应该为: http://localhost:8080/web1/img/1.jpg,理应在这个网站的img文件夹下有某个图片,实际是没有的。

2. 我们实现图片逻辑的分离,新建一个web app,就叫web2吧,web2里处理所有的图片服务。某个图片的路径为:http://localhost:8080/web2/1.jpg。 图片存放在这里。

注意其中的差别和功能: web1是我们的处理文章的逻辑(可能是你的主网站),web2是图片服务。

思路:

1. 写一过滤器。实现转发,当一个路径,比如 http://localhost:8080/web1/img/1.jpg 这样的URL。理应在这个网站的img文件夹下有某个图片,实际是没有的。将来自 img/*下的所有图片请求,转发到 图片服务 下。

代码:

package zyf.demo;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.jasper.tagplugins.jstl.core.Out;

/**
 * Servlet Filter implementation class ImageFilter
 */
@WebFilter(filterName="ImageFilter",urlPatterns="/img/*")
public class ImageFilter implements Filter {

    /**
     * Default constructor.
     */
    public ImageFilter() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @see Filter#destroy()
     */
    public void destroy() {
        // TODO Auto-generated method stub
    }

    /**
     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
     */
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        // place your code here

        // pass the request along the filter chain
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse resp = (HttpServletResponse) response;
        String contextPath = req.getContextPath()+"/img/";
        String requestURI = req.getRequestURI();
        String imageName = requestURI.substring(requestURI.indexOf(contextPath)+contextPath.length());

        System.out.println("str1: "+imageName);
        System.out.println("getContextPath: "+req.getContextPath());
        System.out.println("getRequestURI: "+req.getRequestURI());
        System.out.println("getRequestURL: "+ req.getRequestURL());
        System.out.println("getPathInfo: "+ req.getPathInfo());
        
        if (imageName != null && !"".equals(imageName)) {
            ServletContext context2 = request.getServletContext().getContext("/web2");
            
            String newPath = "/xxx.jpg";
            RequestDispatcher requestDispatcher;
            requestDispatcher = context2.getRequestDispatcher(newPath);
            requestDispatcher.forward(req, resp);
            return;
        }
        chain.doFilter(request, response);
    }

    /**
     * @see Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
    }

}
View Code

相关文章:

  • 2021-11-26
  • 2022-12-23
  • 2021-06-24
  • 2021-11-23
  • 2022-02-17
猜你喜欢
  • 2022-12-23
  • 2021-12-25
  • 2022-12-23
  • 2021-05-18
  • 2021-09-08
  • 2021-10-10
  • 2021-12-15
相关资源
相似解决方案