posts - 431,  comments - 344,  trackbacks - 0
          肖菁
          軟件工程師

          [文章摘要] Struts tiles中提供了基于模版的頁面組裝框架,然而模版中需要包含.do文件的內(nèi)容時(shí),我們遇到了麻煩,本文中作者給出了一種簡單的方式來解決這個(gè)問題。

          [關(guān)鍵詞] Struts Tiles

          1  問題描述

          我們在Web應(yīng)用中使用Struts Tiles時(shí),如果被組裝的內(nèi)容是.do的內(nèi)容,比如下面的例子,將會出現(xiàn)錯(cuò)誤信息。

          實(shí)際例子:<insert:put attribute=" /companyView.do?action=before_new">

          錯(cuò)誤信息:ServletException in '/companyView.do?action=before_new': 應(yīng)答已經(jīng)提交。

          2  問題原因分析

          tiles 使用了 JSP 的 jsp:include 技術(shù)實(shí)現(xiàn)頁面組裝,只能適用于 jsp 頁面,無法用于 .do 這樣的情況。

          找到出錯(cuò)的地方:

          TilesUtilImpl.java 的 doInclude(String uri, PageContext pageContext)

          2.1  doInclude 方法源代碼

          public void doInclude(String uri, PageContext pageContext)

          throws IOException, ServletException {

          pageContext.include(uri);

          }

          3  問題解決

          3.1  修改 doInclude 方法

          public void doInclude(String uri, PageContext pageContext)

          throws IOException, ServletException {

          if (uri.indexOf(".jsp") > 0)

          pageContext.include(uri);

          else if (uri.indexOf(".do") > 0)

          pageContext.getOut().write(getPageContent(uri, pageContext));

          }

          3.2 給 TilesUtilImpl 增加一個(gè)新的方法getPageContent,獲取 .do 文件的內(nèi)容用于顯示

          private String getPageContent(String uri, PageContext pageContext) {

          String result = "";

          HttpServletRequest request = (HttpServletRequest) pageContext .getRequest();

          String contextPath = request.getContextPath();

          String serverIP = request.getServerName();

          String serverPort = String.valueOf(request.getServerPort());

          String uriTmp = "http://";

          if (serverPort.equals("80"))

          uriTmp = uriTmp + serverIP;

          else

          uriTmp = uriTmp + serverIP + ":" + serverPort;

          uriTmp = uriTmp + contextPath;

          if (uri.startsWith("/"))

          uriTmp += uri;

          else

          uriTmp += "/" + uri;

          try {

          URL url = new URL(uriTmp);

          HttpURLConnection conn = (HttpURLConnection) url.openConnection();

          BufferedReader reader = new BufferedReader(new InputStreamReader(

          conn.getInputStream()));

          String line = null;

          while ((line = reader.readLine()) != null) {

          result += line;

          }

          conn.disconnect();

          reader.close();

          } catch (Exception e) {

          e.printStackTrace();

          }

          return result;

          }
          posted on 2007-01-26 15:04 周銳 閱讀(871) 評論(3)  編輯  收藏 所屬分類: Struts
          主站蜘蛛池模板: 固始县| 通辽市| 渭南市| 安顺市| 阜新市| 龙井市| 肃南| 平度市| 无锡市| 丰台区| 扶沟县| 高邑县| 秦皇岛市| 得荣县| 阿拉尔市| 汾西县| 藁城市| 皮山县| 通辽市| 太谷县| 赤水市| 安顺市| 乐陵市| 怀来县| 保定市| 正定县| 剑川县| 洪江市| 焦作市| 临汾市| 南部县| 民县| 板桥市| 龙山县| 阜新| 包头市| 龙川县| 喀喇沁旗| 金寨县| 红安县| 阳江市|