我的Blog我做主^_^

          走向一條通往JAVA的不歸路...

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            64 隨筆 :: 68 文章 :: 77 評(píng)論 :: 0 Trackbacks

          具體實(shí)現(xiàn):

                   利用Filter的過濾功能把*.jsp過濾出來,判斷是否存在對(duì)應(yīng)的.html文件,如果不存在對(duì)應(yīng)的.html文件,則將其內(nèi)容讀出寫入指定的.html文件,再跳轉(zhuǎn)到對(duì)應(yīng)的.html即可。如果存在對(duì)應(yīng)的.html文件,則直接跳轉(zhuǎn)到對(duì)應(yīng)的.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 自動(dòng)生成方法存根

              }

           

              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 自動(dòng)生成方法存根

              }

          }

           

          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();

                  //----獲取請(qǐng)求的URL

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

                  //----指定對(duì)應(yīng)JSPHTML名稱

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

                          reqTarget.lastIndexOf("."));

                  //---判斷是否存在對(duì)應(yīng)的HTML文件

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

                 

                  if (!file.exists()) {   //--------如果不存在對(duì)應(yīng)的HTML文件

                      try {

                         

                          file.createNewFile();   //--------創(chuàng)建HTML文件

                          //-------JSP的內(nèi)容寫入對(duì)應(yīng)的HTML文件內(nèi)

                          InputStream in;

                          StringBuffer sb = new StringBuffer("");

                      //----注意這里,不能直接訪問請(qǐng)求的URL,如果直接訪問的話,會(huì)陷入死循環(huán)

                          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();

                          //---------------轉(zhuǎn)到與JSP對(duì)應(yīng)的HTML

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

                      } catch (Exception e) {

           

                          e.printStackTrace();

                      }

                  }else{

                      //----------如果存在指定的HTML,直接跳轉(zhuǎn)到指定的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_蟈蟈 閱讀(5930) 評(píng)論(23)  編輯  收藏

          評(píng)論

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML 2007-05-31 22:50 求個(gè)明白
          testservlet?name
          其中的testservlet是什么,從哪里來???????????????????????????????????????????????  回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML 2007-05-31 23:09 求個(gè)明白
          在一個(gè)文件中有一個(gè)index.jsp如果在另一個(gè)文件下有一個(gè)同名的.jsp文件。那根本就不會(huì)訪問到這個(gè).jsp文件,也就是說你訪問上面的兩個(gè).jsp文件,最后都只重定向到第一次生成的index.htm,對(duì)另一個(gè)文件下有一個(gè)同名的.jsp文件根本就訪問不成功,也生成不了靜態(tài)的.html  回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML 2007-05-31 23:29 求個(gè)明白
          呵呵,不知道說清楚沒有!!!
          還有就是我的.jsp文件更新了以后,當(dāng)我再訪問這個(gè).jsp文件的時(shí)候根本就沒有顯示出我更新后的內(nèi)容。
            回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML[未登錄] 2007-06-02 21:05 蟈蟈
          @求個(gè)明白
          這里的servlet是一個(gè)工具類,主要功能是把JSP文件生成對(duì)應(yīng)的HTML文件,當(dāng)然是你自己生成的了,有什么不明白的,可是MI我,我的QQ:49023500  回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML[未登錄] 2007-06-02 21:07 蟈蟈
          @求個(gè)明白
          這個(gè)時(shí)候你在判斷條件里加上路徑就成了,例:對(duì)于view/index.jsp你可以先判斷是否徑里是否存在view,然后再判斷是否存在index,這樣不就可以了,希望與你共同探討
          我的QQ:49023500   回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML[未登錄] 2007-06-02 21:28 蟈蟈
          @求個(gè)明白
          我現(xiàn)在想整一個(gè)新聞發(fā)布系統(tǒng),呵呵,里面大概含有如下東西,1、權(quán)限,主要也就是為了整權(quán)限,呵呵,2、動(dòng)態(tài)生成靜態(tài),JSP生成HTML,也就是這兩個(gè)重要的東西了,再就是一些開源的東西,當(dāng)然是能用到這里的東西了,呵呵,希望能與大家共同探討,共同學(xué)習(xí)......  回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML 2007-06-03 18:40 求個(gè)明白
          加你Q了,一起研究..................................  回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML 2008-04-17 14:31 我是新手
          大哥 testservlet?name
          是什么啊? 里面怎么寫啊?  回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML 2008-04-17 23:48 java_蟈蟈
          @我是新手
          不好意思,我寫錯(cuò)了,應(yīng)該是conversion,你細(xì)看一下,應(yīng)該能看的出來  回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML[未登錄] 2008-05-19 08:41 zs7456
          你這個(gè)太復(fù)雜了,還不如直接用URL重寫呢  回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML 2008-05-21 16:00 jdlsfl
          學(xué)習(xí)  回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML 2008-05-21 23:34 java_蟈蟈
          @zs7456
          謝謝你的到來,學(xué)習(xí)了
          URL重寫是重寫了頁面的url。通俗的說就是雖然地址欄里的是html結(jié)尾的url,但實(shí)際上訪問的是后臺(tái)動(dòng)態(tài)jsp(php、asp)頁面;從這一點(diǎn)來講,我上面的是訪問的HTML,后者是訪問的動(dòng)態(tài)內(nèi)容

          置于URL重寫的信息,請(qǐng)參考:http://www.aygfsteel.com/sunbreak/archive/2007/03/22/105549.html 這里說的很細(xì)了,我就不再寫了

          上面的只是個(gè)測試,具體的運(yùn)用,還看實(shí)際情況
            回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML[未登錄] 2008-06-25 12:23 kk
          如果更新JSP了怎么辦 會(huì)覆蓋原有的HTML嗎  回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML[未登錄] 2008-06-25 12:25 fef
          我用了你上面的代碼 怎么生成的HTML里沒有數(shù)據(jù)  回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML[未登錄] 2008-06-25 12:51 java_蟈蟈
          @kk
          謝謝你的到來,如果不想覆蓋它,可在后臺(tái)生成HTML頁,然后,把名稱記錄下來,即可  回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML 2008-06-25 12:53 java_蟈蟈
          你還需要仔細(xì)對(duì)照一下,我這里是沒有問題的  回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML 2008-09-18 10:06 毛毛蟲
          @fef
          這個(gè)我也試過了!
          原因并不難找,因?yàn)楫?dāng)你進(jìn)入的時(shí)候可能是默認(rèn)進(jìn)入到index.jsp頁面的,所以u(píng)rl就會(huì)變成 http://127.0.0.1:8080/project/ ,那樣的話這個(gè)路徑里面根本就沒有了index.jsp,他找不到 .jsp 了,并又沒有index.html,所以需要從新寫一個(gè)index.html,但是根本不存在index.jsp,所以往 index.html里寫入的就是空了
            回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML 2008-09-18 12:58 java_蟈蟈
          @毛毛蟲
          謝謝你的到來^_^  回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML 2008-12-25 16:11 fei
          這個(gè)我用了 沒有問題..謝謝分享...還有就是有漢字亂碼問題...  回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML 2009-03-25 12:28 hoohoney
          通過過濾器轉(zhuǎn)發(fā)所有的請(qǐng)求的jsp頁,思路很好.有的時(shí)候需要這種功能,但有時(shí)也是沒有必要的  回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML 2009-04-30 16:24 type
          怎么解析 .do形式的啊  回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML 2012-08-22 09:37 zzy1225
          1:url后邊的參數(shù)不能繼續(xù)傳遞
          2:比如新聞?dòng)胠ist.jsp?id=001和list.jsp?id=002來區(qū)別不同的新聞,如果第一次訪問的是001那將永遠(yuǎn)是001了。002過來沒法處理  回復(fù)  更多評(píng)論
            

          # re: 動(dòng)態(tài)JSP頁生成靜態(tài)HTML[未登錄] 2013-04-28 15:12 小祝
          我把生成html的邏輯直接寫到filter里面行得通嗎?
          另外我是針對(duì).do轉(zhuǎn)換成html

          我的情況是執(zhí)行到
          in = connection.getInputStream();時(shí),就又調(diào)用filter了。
          而且因?yàn)橐呀?jīng)生成了空的html文件,說文件已經(jīng)存在。
          當(dāng)然頁面顯示錯(cuò)誤。  回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 忻城县| 大宁县| 根河市| 鸡西市| 舞阳县| 宜兴市| 望城县| 田阳县| 固安县| 皮山县| 黄陵县| 垫江县| 长泰县| 湖州市| 于田县| 日照市| 大洼县| 措勤县| 辽中县| 益阳市| 金平| 淄博市| 城固县| 图片| 海安县| 沁阳市| 富民县| 舟曲县| 左云县| 湖口县| 洪湖市| 华蓥市| 师宗县| 大竹县| 巴南区| 祁阳县| 苍南县| 潞城市| 金昌市| 浦北县| 图们市|