我的Blog我做主^_^

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

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

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

                   利用Filter的過(guò)濾功能把*.jsp過(guò)濾出來(lái),判斷是否存在對(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("");

                      //----注意這里,不能直接訪問(wèn)請(qǐng)求的URL,如果直接訪問(wèn)的話,會(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頁(yè)

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

                      } catch (Exception e) {

           

                          e.printStackTrace();

                      }

                  }else{

                      //----------如果存在指定的HTML,直接跳轉(zhuǎn)到指定的HTML頁(yè)

                      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_蟈蟈 閱讀(5929) 評(píng)論(23)  編輯  收藏

          評(píng)論

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

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

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

          # re: 動(dòng)態(tài)JSP頁(yè)生成靜態(tài)HTML[未登錄](méi) 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頁(yè)生成靜態(tài)HTML[未登錄](méi) 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頁(yè)生成靜態(tài)HTML[未登錄](méi) 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è)重要的東西了,再就是一些開(kāi)源的東西,當(dāng)然是能用到這里的東西了,呵呵,希望能與大家共同探討,共同學(xué)習(xí)......  回復(fù)  更多評(píng)論
            

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          # re: 動(dòng)態(tài)JSP頁(yè)生成靜態(tài)HTML[未登錄](méi) 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文件,說(shuō)文件已經(jīng)存在。
          當(dāng)然頁(yè)面顯示錯(cuò)誤。  回復(fù)  更多評(píng)論
            


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 洮南市| 阜新| 故城县| 天台县| 区。| 江门市| 普兰店市| 高唐县| 兴宁市| 陆河县| 延寿县| 田阳县| 华亭县| 绵竹市| 舞阳县| 南皮县| 拉孜县| 高淳县| 永清县| 眉山市| 灵寿县| 罗源县| 黔南| 正镶白旗| 若羌县| 涟水县| 娄底市| 北京市| 尉氏县| 东山县| 井研县| 凭祥市| 隆回县| 泸水县| 兴义市| 临桂县| 岑溪市| 宁德市| 江西省| 南和县| 镇雄县|