<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的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_蟈蟈 閱讀(5927) 評論(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.tkk7.com/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文件,說文件已經存在。
    當然頁面顯示錯誤。  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 毛片在线免费视频| 99精品免费视品| 最近2019中文字幕mv免费看| 亚洲大片在线观看| 青柠影视在线观看免费| 亚洲中文字幕无码久久2017| 亚洲天堂免费在线视频| 中文亚洲AV片在线观看不卡| 韩日电影在线播放免费版| 国产亚洲一区二区三区在线| 老司机69精品成免费视频| 亚洲综合成人网在线观看| 亚洲美女免费视频| 亚洲熟妇成人精品一区| 日韩成人免费aa在线看| 污网站在线免费观看| 国产精品亚洲玖玖玖在线观看 | 国产成人精品亚洲精品| 成人福利在线观看免费视频| 久久精品国产亚洲一区二区三区| 久久久久久久久久免免费精品| 久久精品国产69国产精品亚洲| 日韩精品人妻系列无码专区免费 | 亚洲日韩在线观看| 国产真人无码作爱免费视频| 亚洲人成电影在线天堂| 天天摸天天操免费播放小视频| 国产精品亚洲一区二区在线观看| 久久青青草原亚洲av无码| 久久九九AV免费精品| 亚洲一区二区三区成人网站| 亚洲精品国产自在久久| 久久久久久国产精品免费免费男同 | 中文字幕乱码免费看电影| 亚洲电影在线免费观看| 日韩免费无码一区二区视频| 精品国产免费人成网站| 亚洲a级片在线观看| 在线亚洲精品福利网址导航| 永久免费视频网站在线观看| 真正全免费视频a毛片|