Loading...

          java .net

          用Url Rewrite Filter重寫url

          今天發(fā)現(xiàn)一個好東西

          Url Rewrite Filter

          它可以實現(xiàn)url重寫,從而隱藏實際的url,同時使url看起來更美觀,簡單

          最令人興奮的是它一下解決了一值在尋找的blog用戶訪問自己的空間的問題

          比如http://hi.baidu.com/liuspring 就顯示我的空間

          1、下載Url Rewrite Filter

          2、在項目的web.xml配置過濾器

          XML語言:
          <filter>
          <filter-name>UrlRewriteFilter</filter-name>
          <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
          <init-param>
          <param-name>logLevel</param-name>
          <param-value>debug</param-value>
          </init-param>
          </filter>
          <filter-mapping>
          <filter-name>UrlRewriteFilter</filter-name>
          <url-pattern>/*</url-pattern>
          </filter-mapping>


          3、將urlrewrite-2.6.0.jar放入lib文件夾
          4、新建urlrewrite.xml文件置于WEB-INF目錄
          5、配置urlrewrite.xml

          XML語言: 臨時自用代碼@代碼發(fā)芽網(wǎng)
          <?xml version="1.0" encoding="utf-8"?>
          <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"
          "http://tuckey.org/res/dtds/urlrewrite2.6.dtd">

          <!--

          Configuration file for UrlRewriteFilter
          http://tuckey.org/urlrewrite/

          -->
          <urlrewrite>
          <rule>
          <from>^/([a-z]+)/?$</from>
          <to type= "forward" >/blogView.do?go=$1</to>
          </rule>

          <rule>
          <note> 這是一個通用請求url rewrite</note>
          <from>^/([a-z0-9A-Z_]+)/([a-z0-9A-Z_]+)/?$</from>
          <to type= "forward" >/$2.do?go=$1</to>
          </rule>


          <outbound-rule>
          <note>
          The outbound-rule specifies that when response.encodeURL is called (if you are using JSTL c:url)
          the url /rewrite-status will be rewritten to /test/status/.

          The above rule and this outbound-rule means that end users should never see the
          url /rewrite-status only /test/status/ both in thier location bar and in hyperlinks
          in your pages.
          </note>
          <from>/rewrite-status</from>
          <to>/test/status/</to>
          </outbound-rule>

          </urlrewrite>




          url匹配使用正則表達(dá)式的規(guī)則,
          實驗中發(fā)現(xiàn)一個問題,就是必須把里面的正則表達(dá)式用小括號括起來,在正則表達(dá)式中叫分組
          不然會報異常:
          java.lang.IndexOutOfBoundsException: No group 2
          哈哈,前幾日還費勁的自己寫Servlet重寫url呢,原來這有現(xiàn)成的,更加覺得自己現(xiàn)在的水平遇到的問題網(wǎng)上的前輩們早都遇到過了,一定要站在巨人的肩膀上,少走彎路啊。


          把我的servlet貼在這,呵呵,參考自blojsom

          Java語言: 臨時自用代碼@代碼發(fā)芽網(wǎng)
          package com.capinfo.servlet;

          import org.apache.commons.logging.Log;
          import org.apache.commons.logging.LogFactory;

          import com.capinfo.util.PageConstraint;
          import com.capinfo.util.PigBlogUtil;


          import javax.servlet.ServletConfig;
          import javax.servlet.ServletException;
          import javax.servlet.ServletRequest;
          import javax.servlet.ServletResponse;
          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          import java.io.IOException;


          /**
          *
          * @author Administrator
          *
          */
          public class PigBlogServlet extends HttpServlet {

          protected Log _logger = LogFactory.getLog(PigBlogServlet.class);



          /**
          * Initialize
          *
          * @param servletConfig {@link ServletConfig}
          * @throws ServletException If there is an error initializing
          */
          public void init(ServletConfig servletConfig) throws ServletException {
          super.init(servletConfig);
          }

          /**
          * Handle requests made to
          *
          * @param httpServletRequest {@link HttpServletRequest} request
          * @param httpServletResponse {@link HttpServletResponse} response
          * @throws ServletException If there is an error serving the request
          * @throws IOException If there is an error serving the request
          */
          protected void service(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {


          // Make sure that we have a request URI ending with a / otherwise we need to
          // redirect so that the browser can handle relative link generation
          // if (!httpServletRequest.getRequestURI().endsWith("/")) {
          // StringBuffer redirectURL = new StringBuffer();
          // redirectURL.append(httpServletRequest.getRequestURI());
          // redirectURL.append("/");
          // if (httpServletRequest.getParameterMap().size() > 0) {
          // redirectURL.append("?");
          // redirectURL.append(PigBlogUtil.convertRequestParams(httpServletRequest));
          // }
          //
          // if (_logger.isDebugEnabled()) {
          // _logger.debug("Redirecting the user to: " + redirectURL.toString());
          // }
          //
          // httpServletResponse.sendRedirect(redirectURL.toString());
          //
          // return;
          // }



          // Check for an overriding id
          String blogId = httpServletRequest.getParameter(PageConstraint.GO);
          if (PigBlogUtil.checkNullOrBlank(blogId)) {
          String blogIdFromPath = PigBlogUtil.getBlogFromPath(httpServletRequest.getPathInfo());
          if (blogIdFromPath == null) {
          blogId = PageConstraint.GO1;
          } else {
          blogId = blogIdFromPath;
          }
          }

          if (PigBlogUtil.checkNullOrBlank(blogId)) {
          httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND, "Blog ID not specified");

          return;
          }
          StringBuffer redirectURL = new StringBuffer();

          //redirectURL.append(httpServletRequest.getContextPath());
          System.out.println(httpServletRequest.getRequestURI());
          if(httpServletRequest.getRequestURI().indexOf("/blog/") > -1 && httpServletRequest.getRequestURI().indexOf(".jsp") == -1 ){
          if(!httpServletRequest.getRequestURI().endsWith("/") && httpServletRequest.getRequestURI().indexOf(".do") > -1){
          redirectURL.append(httpServletRequest.getRequestURI().substring(httpServletRequest.getRequestURI().lastIndexOf("/"), httpServletRequest.getRequestURI().length()));

          }else if(httpServletRequest.getRequestURI().indexOf("/blog/") == -1){

          }else{
          redirectURL.append("/blogView.do");

          }
          redirectURL.append("?go=");
          redirectURL.append(blogId);

          httpServletRequest.getRequestDispatcher(redirectURL.toString())
          .forward((ServletRequest)httpServletRequest, (ServletResponse)httpServletResponse);
          //httpServletResponse.sendRedirect(redirectURL.toString());
          }else{
          httpServletRequest.getRequestDispatcher(httpServletRequest.getRequestURI())
          .forward((ServletRequest)httpServletRequest, (ServletResponse)httpServletResponse);
          //httpServletResponse.sendRedirect(httpServletRequest.getRequestURI());
          }
          System.out.println(redirectURL.toString());
          return;


          }

          /**
          * Take out of service
          */
          public void destroy() {
          super.destroy();

          if (_logger.isDebugEnabled()) {
          _logger.debug(" destroyed");
          }
          }
          }






           

          posted on 2008-09-24 18:04 閱讀(4761) 評論(4)  編輯  收藏 所屬分類: 學(xué)習(xí)java

          評論

          # re: 用Url Rewrite Filter重寫url 2008-09-25 08:37 淘聲依舊

          恩  回復(fù)  更多評論   

          # re: 用Url Rewrite Filter重寫url 2008-09-25 09:18 rubyol

          這幾天也看了看UrlRewrite,很不錯的。  回復(fù)  更多評論   

          # 為什么我的用不成啊 2008-10-06 21:38 zhjdenis

          <rule>
          <from>^/([a-z0-9A-Z_]+)/([a-z0-9A-Z_]+)/?$</from>
          <to type="forward">>/$2.jsp?go=$1</to>
          </rule>

          index.jsp頁面放了一個鏈接
          <a href="result.jsp?go=3">turn to </a><br>

          但是鏈接過去還是失敗了,沒有重寫啊。

          我部署后的log是
          信息: org.tuckey.web.filters.urlrewrite.UrlRewriteFilter INFO: destroy called
          2008-10-6 21:37:10 org.apache.catalina.core.ApplicationContext log
          信息: org.tuckey.web.filters.urlrewrite.UrlRewriteFilter INFO: loaded (conf ok)

          應(yīng)該是部署成功了啊  回復(fù)  更多評論   

          # re: 用Url Rewrite Filter重寫url 2008-10-07 09:11

          看看是不是寫反了?

          <a href="result.jsp?go=3">turn to </a><br>
          改成
          <a href="/3/result">turn to </a><br>   回復(fù)  更多評論   

          公告

          希望有一天

          我能用鼠標(biāo)雙擊我的錢包

          然后選中一張100元

          按住“ctrl+c”

          接著不停的“ctrl+v”

          嘻嘻~~~笑醒~~~



          導(dǎo)航

          <2008年10月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          統(tǒng)計

          常用鏈接

          留言簿(6)

          隨筆分類(102)

          隨筆檔案(398)

          文章分類

          文章檔案(10)

          有趣網(wǎng)絡(luò)

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 罗甸县| 文安县| 克东县| 满城县| 汝南县| 隆昌县| 万盛区| 和平区| 新竹市| 扎囊县| 南召县| 青浦区| 明星| 武穴市| 青冈县| 崇信县| 荔浦县| 锡林郭勒盟| 萝北县| 丹棱县| 肥乡县| 冕宁县| 嘉义县| 通许县| 阳东县| 大同市| 通州市| 金阳县| 玉田县| 通榆县| 江阴市| 赣州市| 新干县| 宜州市| 荔浦县| 宝丰县| 永吉县| 黔西| 广安市| 福州市| 凉城县|