ytech

          學(xué)習(xí)JAVA, Hello World!

          常用鏈接

          統(tǒng)計(jì)

          最新評(píng)論

          2005年11月24日 #

          一段JSTL Iteration 的代碼

           

           1<%@ page import="java.util.List" %>
           2<%@ page import="java.util.ArrayList" %>
           3<%@ page contentType="text/html;charset=UTF-8" language="java" %>
           4<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
           5<html>
           6<head><title>Hello</title></head>
           7
           8<body>
           9<pre>
          10    Hello world this is the JSTL Test Page
          11</pre>
          12<%!
          13    public class Person {
          14        public Person(String name, String mGender, String address) {
          15            this.name = name;
          16            this.mGenderr = mGender;
          17            this.address = address;
          18        }
          19
          20        public String getName() {
          21            return name;
          22        }
          23
          24        public void setName(String name) {
          25            this.name = name;
          26        }
          27
          28        public String getGender() {
          29            return mGenderr;
          30        }
          31
          32        public void setGender(String mGenderr) {
          33            this.mGenderr = mGenderr;
          34        }
          35
          36        public String getAddress() {
          37            return address;
          38        }
          39
          40        public void setAddress(String address) {
          41            this.address = address;
          42        }
          43
          44        private String name;
          45        private String mGenderr;
          46        private String address;
          47
          48    }
          49
          50
          %>
          51<%
          52
          53    ArrayList a = new ArrayList();
          54    List b = new ArrayList();
          55    a.add(new Person("micas""male""xian"));
          56    a.add(new Person("nancy""female""shanghai"));
          57    a.add(new Person("nancy""female""shanghai"));
          58    a.add(new Person("nancy""female""shanghai"));
          59    a.add(new Person("nancy""female""shanghai"));
          60
          61    b.add("a");
          62    b.add("b");
          63    b.add("c");
          64    b.add("d");
          65    b.add("e");
          66
          67
          68    request.setAttribute("persons", a);
          69    request.setAttribute("otherInfo", b);
          70
          %>
          71
          72<table>
          73    <c:forEach items="${persons}" var="p" varStatus="status">
          74        <tr><td>${otherInfo[status.index]}</td><td>${status.index}</td><td>${p.name}</td><td>${p.address}</td>
          75            <td>${p.gender}</td></tr>
          76    </c:forEach>
          77</table>
          78
          79
          80</body>
          81</html>

          posted @ 2005-11-30 16:17 Java 的學(xué)習(xí)之路 閱讀(396) | 評(píng)論 (0)編輯 收藏

          轉(zhuǎn)發(fā): J2EE1.4新特性之Servlet2.4新特性

          http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=125&threadID=13086 

          在J2EE1.4最新的Servlet 2.4版中,加入了一些新的功能,下面我們介紹其中主要的常用功能。

          1、XML Schema定義Web查詢部署描述文件

          Servlet 2.3之前的版本使用DTD作為部署描述文件的定義,其web.xml的格式為如下所示:

          <?xml version="1.0" encoding="IS0-8859-1"?>
          <!DOCTYPE web-app
              PUBLIC "-//sunMicrosystems,Inc.//DTD WebApplication 2.3f//EN"
              "http://java.sun.com/j2ee/dtds/web-app_2.3.dtd">
              <web-app>
               .......
              </web-app>



          Servlet 2.4版首次使用XML Schema定義作為部署描述文件,這樣Web容器更容易校驗(yàn)web.xml語法。同時(shí)XML Schema提供了更好的擴(kuò)充性,其web.xml中的格式如下所示:

          <?xml version="1.0" encoding="UTF-8"?>
              <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
                    xmlns:workflow="http://www.workflow.com"
                    xmins: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">
              .........
              </web-app>



          雖然上面顯示兩個(gè)版本的開頭幾行有差別,Servlet 2.4版程序web.xml中Web構(gòu)件的設(shè)置方法和Servlet 2.3版大致相同。

          2、Servlet Request監(jiān)聽器

          Servlet 2.4版在事件監(jiān)聽器中加入了ServletRequest監(jiān)聽器,包括:ServletRequestListener,ServletRequestAttributeListener和其他相關(guān)類。這些類可以用來管理和控制與ServletRequest動(dòng)作有關(guān)的事件。下面的程序顯示了一個(gè)典型的ServletRequest監(jiān)聽器的結(jié)構(gòu)。

          import javax.setvlet.ServletContext;
              import javax.servlet.ServletRequestListener;
              import javax.servlet.ServletRequestAttributeListener;
              import javax.servlet.http.HttpServletRequest;
              import iava.io.*;
              import java.util.Locale;
              public final class RequestListener  implements   SerVletRequestListener,
              ServletRequestAttributeListener,ServletContextListener{
                  ........
          public void requestlnitialized(javax.servlet.ServletRequestEvent event){
                  ........
                  }
          public void attributeAdded(javax.servlet.ServletRequestAttributeEvent event){
                  ........
                  }
          public void attributeRemoved(javax.servlet.ServletRequestAttributeEvent event){
                  ........
                  }
          public void attributeReplaced(javax.servlet.ServletRequestAttributeEvent event){
                  ........
                  }
          public void attributeDestroyed(javax.servlet.ServletRequestAttributeEvent event){
                 ........
                 }
              }



          3、 Request Dispatcher變化

          Servlet 2.4版的Web程序增強(qiáng)了filter和request dispatcher的配合功能,這樣過濾器可以根據(jù)請(qǐng)求分發(fā)器(request dispatcher)所使用的方法有條件地對(duì)Web請(qǐng)求進(jìn)行過濾。編程者可以通過在web.xml中使用元素設(shè)定過濾器作用的條件(下圖1):




          圖1 設(shè)定元素的過濾器


          ·只有當(dāng)request直接來自客戶,過濾器才生效,對(duì)應(yīng)為REQUEST條件。

          ·只有當(dāng)request被一個(gè)請(qǐng)求分發(fā)器使用forward()方法轉(zhuǎn)到一個(gè)Web構(gòu)件時(shí)(采用或定義),對(duì)應(yīng)稱為FORWARD條件。

          ·類似地,只有當(dāng)request被一個(gè)請(qǐng)求分發(fā)器使用include()方法轉(zhuǎn)到一個(gè)Web構(gòu)件時(shí)(采用或定義),對(duì)應(yīng)稱為INCLUDE條件。

          ·只有當(dāng)request被一個(gè)請(qǐng)求分發(fā)器使用“錯(cuò)誤信息頁”機(jī)制方法轉(zhuǎn)到一個(gè)Web構(gòu)件時(shí),對(duì)應(yīng)稱為ERROR條件。

          ·第五種過濾器作用的條件可以是上面四種條件的組合。

          下面的程序中的定義了當(dāng)客戶請(qǐng)求/icsamples/* 樣式的URL時(shí),Security Filter會(huì)被用來過濾請(qǐng)求。但是如果到達(dá)URL為/icsamples/* 的Web構(gòu)件的請(qǐng)求是從一個(gè)request dispatcher轉(zhuǎn)發(fā)過來的,這個(gè)過濾器不工作。

          <filter-mapping>
              <filter-name>Security Filter</filter-name>
              <url-pattern>/icsamples/*</url-pattern>
              </filter-mapping>



          如果使用下面的程序設(shè)置,在中加入INCLUDE,Security Filter只有在被一個(gè)request dispatcher使用include()方法包括RequestRecorderServlet時(shí)才會(huì)工作。在其他情況(如請(qǐng)求直接從客戶發(fā)來,或request dispatcher使用forward方法)下,Security Filter都不會(huì)工作。

          <filter-mapping>
              <fliter-name>Security Filter</filter-name>
              <servlet-name>RequestRecorderServlet</servlet-name>
              <dispatcher>INCLUDE</dispatcher>
              </filter-mapping>



          下面的程序設(shè)置定義了Security Filter當(dāng)request由客戶直接發(fā)出或request

          dispatcher使用forward方法時(shí)能工作。

          <filter-mapping>
              <filter-name>Security Filter</filter-name>
              <url-pattern>/icsamples/*</uri-pattern>
              <dispatcher>FORWARD</dispatcher>
              <dispatcher>REQUEST</dispatcher>
              </filter-mapping>



          程序例6顯示了一個(gè)在中使用的例子。程序7定義的ReqDispatcherServlet根據(jù)用戶請(qǐng)求的參數(shù)"type",決定如何處理請(qǐng)求。在其中使用了兩個(gè)RequestDispatcher(rd,和rd2),它們可以向URL為/admin或/control的servlet轉(zhuǎn)發(fā)請(qǐng)求。當(dāng)請(qǐng)求被轉(zhuǎn)發(fā)后,適當(dāng)?shù)倪^濾器會(huì)起作用。過濾器和Web資源的關(guān)系可以在web.xml中定義。如果用戶輸入的Web請(qǐng)求參數(shù)為“INCLUDE”,ReqDispatcherServlet的RequestDispatcher會(huì)調(diào)用include 方法,這樣DispatcherFilterIcd會(huì)被使用,因?yàn)樵诙x了INCLUDE;如果用戶輸入的 Web請(qǐng)求參數(shù)為“ERROR”ReqDispatcherServlet會(huì)調(diào)用resp.sendError()方法,這樣DispatcherFilterErr會(huì)被使用,因?yàn)樵诙x了ERROR。

          例6:

          <filter-mapping>
              <filter-name>DispatcherFilterIcd</filter-name>
              <url-pattern>/admin</url-pattern>
              <dispatcher>INCLUDE</dispatcher>
              </filter-mapping>
              <filter-mapping>
              <filter-name>DispatcherFilterErr</filter-name>
              <url-pattern>/errorpage</url-pattern>
              <dispatcher>ERROR</dispatcher>
              </filter-mapping>



          例7:

          import javax.servlet.*;
              import javax.servlet.http.*;
              import java.io.*;
              import java.util.*;

              public class ReqDispatcherServlet extends HttpServlet
              {
              String dispatchtype;
              public void init(ServletConfig config) throws ServletException
              {
              super.init(config);
              }
              public void service(HttpServletRequest req,HttpServletResponse resp)
              throws ServletException,IOException
              {
              PrintWriter out=resp.getWriter();
              String type="NONE";
              if((req.getParameter("type"))!=null)
              {
              type = req.getParameter("type");
              }
                  resp.setContentType("text/html");
                  out.println("<HTML>");
                  out.println("<BODY>");
          out.println("<HR>");
          out.println("<p>");
              out.println("ReqDispacherServelt");
              out.println("</P><p>");
              out.println("ServerName:"+req.getServerName()+"ServerPort:"+
          req.getServerPort());   
              out.println("</p>");
              RequestDispatcher rd=req.getRequestDispatcher("/admin");
              RequestDispatcher rd2=req.getRequestDispatcher("/control");
              if(type.equals("REQUEST"))
              {
              }
              if(type.equals("FORWARD"))
               {   
              rd.forward(reg,resp);
               }
              if(type.equals("INCLUDE"))
              {
              rd.include(req,resp);
                }
              if(type.equals("ERROR"))
               {
              resp.sendError(404,"Error from ReqDispacherServlet");
               }
              if(type.equals("CONTROL"))
               {
              rd2.forward(req,resp);
               }
              out.flush();
              }
              public voiddestroy()
              {
              System.out.println("ReqDispacherServlet:destroy()");
               }
              }



          4、 增強(qiáng)的國際化功能

          Servlet 2.4增加了Web程序國際化功能,在web.xml中可以定義網(wǎng)站的字符編碼方式。

          <locale-encoding-mapping-list>
              <locale-encoding-mapping>
              <locale>zh</locale>
              <encoding>gb2312</encoding>
              </locale-encoding-mapping>
              </locale-encoding-mapping-list>



          當(dāng)客戶請(qǐng)求了特定語言的Web資源時(shí),servlet程序通過ServletResponse接口的setLocale方法設(shè)置一個(gè)Web響應(yīng)的語言屬性。

          5、 Login/Logout功能

          在Servlet 2.4中增加了logout和login方法方便安全管理。大家可以參考Servlet 2.4的API查看其用法。

          posted @ 2005-11-24 04:08 Java 的學(xué)習(xí)之路 閱讀(468) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 西贡区| 盈江县| 岳阳县| 屯门区| 平凉市| 泸溪县| 平乡县| 南丹县| 视频| 饶河县| 梅州市| 尖扎县| 东台市| 濉溪县| 吕梁市| 东乌珠穆沁旗| 左云县| 临江市| 东台市| 邯郸市| 荃湾区| 泾阳县| 寻乌县| 建湖县| 玉门市| 赣州市| 吉木萨尔县| 特克斯县| 申扎县| 河曲县| 塔城市| 遂川县| 安康市| 永济市| 威远县| 玛纳斯县| 常熟市| 渭源县| 夏河县| 包头市| 怀仁县|