我的Blog我做主^_^

走向一条通往JAVA的不归路...

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  64 随笔 :: 68 文章 :: 77 评论 :: 0 Trackbacks

具体实现:

         利用Filter的过滤功能把*.jsp过滤出来,判断是否存在对应的.html文件,如果不存在对应的.html文件,则将其内容读出写入指定的.html文件,再跳转到对应的.html即可。如果存在对应的.html文件,则直接跳转到对应的.html即可。

 

代码:

JspFilter.java

 

import java.io.BufferedReader;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;

 

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

public class JspFilter implements Filter {

 

    public void destroy() {

        // TODO 自动生成方法存根

    }

 

    public void doFilter(ServletRequest request, ServletResponse response,

            FilterChain chain) throws IOException, ServletException {

 

        HttpServletRequest hreq = (HttpServletRequest) request;

        HttpServletResponse hresp = (HttpServletResponse) response;

 

        String name = hreq.getRequestURL().substring(

                    hreq.getRequestURL().lastIndexOf("/") + 1,

                    hreq.getRequestURL().lastIndexOf("."));

        if (hreq.getRequestURL().indexOf(".jsp") != -1 && (null == hreq.getParameter("type") || hreq.getParameter("type").equals(""))) {           

                hresp.sendRedirect(hreq.getContextPath()+"/conversion?name="+hreq.getRequestURL());

                return ;

        }

        chain.doFilter(request, response);

    }

 

    public void init(FilterConfig arg0) throws ServletException {

        // TODO 自动生成方法存根

    }

}

 

ConversionServlet.java

 

import java.io.BufferedReader;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.HttpURLConnection;

import java.net.URL;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

public class ConversionServlet extends HttpServlet {

 

    public ConversionServlet () {

        super();

    }

 

    public void destroy() {

        super.destroy(); // Just puts "destroy" string in log

        // Put your code here

    }

 

    public void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

 

        response.setContentType("text/html");

        PrintWriter out = response.getWriter();

        //----获取请求的URL

        String reqTarget = request.getParameter("name");

        //----指定对应JSPHTML名称

        String name = reqTarget.substring(reqTarget.lastIndexOf("/") + 1,

                reqTarget.lastIndexOf("."));

        //---判断是否存在对应的HTML文件

        File file = new File(request.getRealPath("/") + name + ".html");

       

        if (!file.exists()) {   //--------如果不存在对应的HTML文件

            try {

               

                file.createNewFile();   //--------创建HTML文件

                //-------JSP的内容写入对应的HTML文件内

                InputStream in;

                StringBuffer sb = new StringBuffer("");

            //----注意这里,不能直接访问请求的URL,如果直接访问的话,会陷入死循环

                URL url = new java.net.URL(reqTarget.toString()+"?type=11");

                HttpURLConnection connection = (HttpURLConnection) url

                        .openConnection();

                connection.setRequestProperty("User-Agent", "Mozilla/4.0");

                connection.connect();

                in = connection.getInputStream();

                java.io.BufferedReader breader = new BufferedReader(

                        new InputStreamReader(in, "GBK"));

                String currentLine;

 

                FileOutputStream fos = new FileOutputStream(file);

                while ((currentLine = breader.readLine()) != null) {

                    sb.append(currentLine);

                    fos.write(currentLine.getBytes());

                }

                if (null != breader)

                    breader.close();

                if (null != fos)

                    fos.close();

                //---------------转到与JSP对应的HTML

                response.sendRedirect(request.getContextPath()+"/"+name + ".html");

            } catch (Exception e) {

 

                e.printStackTrace();

            }

        }else{

            //----------如果存在指定的HTML,直接跳转到指定的HTML

            response.sendRedirect(request.getContextPath()+"/"+name + ".html");

        }

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

 

        doGet(request, response);

    }

    public void init() throws ServletException {

        // Put your code here

    }

}

 

WEB.XML配置:

 

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4"

    xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

  <filter>

    <filter-name>jspfilter</filter-name>

    <filter-class>com.beanutil.JspFilter</filter-class>

  </filter>

  <filter-mapping>

    <filter-name>jspfilter</filter-name>

    <url-pattern>*.jsp</url-pattern>

  </filter-mapping>

  <servlet>

    <servlet-name>conversion</servlet-name>

    <servlet-class>com.beanutil.ConversionServlet </servlet-class>

  </servlet>

 

  <servlet-mapping>

    <servlet-name>conversion</servlet-name>

    <url-pattern>/conversion</url-pattern>

  </servlet-mapping>

</web-app>

 

 



posted on 2007-05-30 16:26 java_蝈蝈 阅读(5914) 评论(23)  编辑  收藏

评论

# re: 动态JSP页生成静态HTML 2007-05-31 22:50 求个明白
testservlet?name
其中的testservlet是什么,从哪里来???????????????????????????????????????????????  回复  更多评论
  

# re: 动态JSP页生成静态HTML 2007-05-31 23:09 求个明白
在一个文件中有一个index.jsp如果在另一个文件下有一个同名的.jsp文件。那根本就不会访问到这个.jsp文件,也就是说你访问上面的两个.jsp文件,最后都只重定向到第一次生成的index.htm,对另一个文件下有一个同名的.jsp文件根本就访问不成功,也生成不了静态的.html  回复  更多评论
  

# re: 动态JSP页生成静态HTML 2007-05-31 23:29 求个明白
呵呵,不知道说清楚没有!!!
还有就是我的.jsp文件更新了以后,当我再访问这个.jsp文件的时候根本就没有显示出我更新后的内容。
  回复  更多评论
  

# re: 动态JSP页生成静态HTML[未登录] 2007-06-02 21:05 蝈蝈
@求个明白
这里的servlet是一个工具类,主要功能是把JSP文件生成对应的HTML文件,当然是你自己生成的了,有什么不明白的,可是MI我,我的QQ:49023500  回复  更多评论
  

# re: 动态JSP页生成静态HTML[未登录] 2007-06-02 21:07 蝈蝈
@求个明白
这个时候你在判断条件里加上路径就成了,例:对于view/index.jsp你可以先判断是否径里是否存在view,然后再判断是否存在index,这样不就可以了,希望与你共同探讨
我的QQ:49023500   回复  更多评论
  

# re: 动态JSP页生成静态HTML[未登录] 2007-06-02 21:28 蝈蝈
@求个明白
我现在想整一个新闻发布系统,呵呵,里面大概含有如下东西,1、权限,主要也就是为了整权限,呵呵,2、动态生成静态,JSP生成HTML,也就是这两个重要的东西了,再就是一些开源的东西,当然是能用到这里的东西了,呵呵,希望能与大家共同探讨,共同学习......  回复  更多评论
  

# re: 动态JSP页生成静态HTML 2007-06-03 18:40 求个明白
加你Q了,一起研究..................................  回复  更多评论
  

# re: 动态JSP页生成静态HTML 2008-04-17 14:31 我是新手
大哥 testservlet?name
是什么啊? 里面怎么写啊?  回复  更多评论
  

# re: 动态JSP页生成静态HTML 2008-04-17 23:48 java_蝈蝈
@我是新手
不好意思,我写错了,应该是conversion,你细看一下,应该能看的出来  回复  更多评论
  

# re: 动态JSP页生成静态HTML[未登录] 2008-05-19 08:41 zs7456
你这个太复杂了,还不如直接用URL重写呢  回复  更多评论
  

# re: 动态JSP页生成静态HTML 2008-05-21 16:00 jdlsfl
学习  回复  更多评论
  

# re: 动态JSP页生成静态HTML 2008-05-21 23:34 java_蝈蝈
@zs7456
谢谢你的到来,学习了
URL重写是重写了页面的url。通俗的说就是虽然地址栏里的是html结尾的url,但实际上访问的是后台动态jsp(php、asp)页面;从这一点来讲,我上面的是访问的HTML,后者是访问的动态内容

置于URL重写的信息,请参考:http://www.blogjava.net/sunbreak/archive/2007/03/22/105549.html 这里说的很细了,我就不再写了

上面的只是个测试,具体的运用,还看实际情况
  回复  更多评论
  

# re: 动态JSP页生成静态HTML[未登录] 2008-06-25 12:23 kk
如果更新JSP了怎么办 会覆盖原有的HTML吗  回复  更多评论
  

# re: 动态JSP页生成静态HTML[未登录] 2008-06-25 12:25 fef
我用了你上面的代码 怎么生成的HTML里没有数据  回复  更多评论
  

# re: 动态JSP页生成静态HTML[未登录] 2008-06-25 12:51 java_蝈蝈
@kk
谢谢你的到来,如果不想覆盖它,可在后台生成HTML页,然后,把名称记录下来,即可  回复  更多评论
  

# re: 动态JSP页生成静态HTML 2008-06-25 12:53 java_蝈蝈
你还需要仔细对照一下,我这里是没有问题的  回复  更多评论
  

# re: 动态JSP页生成静态HTML 2008-09-18 10:06 毛毛虫
@fef
这个我也试过了!
原因并不难找,因为当你进入的时候可能是默认进入到index.jsp页面的,所以url就会变成 http://127.0.0.1:8080/project/ ,那样的话这个路径里面根本就没有了index.jsp,他找不到 .jsp 了,并又没有index.html,所以需要从新写一个index.html,但是根本不存在index.jsp,所以往 index.html里写入的就是空了
  回复  更多评论
  

# re: 动态JSP页生成静态HTML 2008-09-18 12:58 java_蝈蝈
@毛毛虫
谢谢你的到来^_^  回复  更多评论
  

# re: 动态JSP页生成静态HTML 2008-12-25 16:11 fei
这个我用了 没有问题..谢谢分享...还有就是有汉字乱码问题...  回复  更多评论
  

# re: 动态JSP页生成静态HTML 2009-03-25 12:28 hoohoney
通过过滤器转发所有的请求的jsp页,思路很好.有的时候需要这种功能,但有时也是没有必要的  回复  更多评论
  

# re: 动态JSP页生成静态HTML 2009-04-30 16:24 type
怎么解析 .do形式的啊  回复  更多评论
  

# re: 动态JSP页生成静态HTML 2012-08-22 09:37 zzy1225
1:url后边的参数不能继续传递
2:比如新闻用list.jsp?id=001和list.jsp?id=002来区别不同的新闻,如果第一次访问的是001那将永远是001了。002过来没法处理  回复  更多评论
  

# re: 动态JSP页生成静态HTML[未登录] 2013-04-28 15:12 小祝
我把生成html的逻辑直接写到filter里面行得通吗?
另外我是针对.do转换成html

我的情况是执行到
in = connection.getInputStream();时,就又调用filter了。
而且因为已经生成了空的html文件,说文件已经存在。
当然页面显示错误。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: