ytech

学习JAVA, Hello World!

常用链接

统计

最新评论

2005年11月11日 #

一段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 的学习之路 阅读(388) | 评论 (0)编辑 收藏

转发: 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容器更容易校验web.xml语法。同时XML Schema提供了更好的扩充性,其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>



虽然上面显示两个版本的开头几行有差别,Servlet 2.4版程序web.xml中Web构件的设置方法和Servlet 2.3版大致相同。

2、Servlet Request监听器

Servlet 2.4版在事件监听器中加入了ServletRequest监听器,包括:ServletRequestListener,ServletRequestAttributeListener和其他相关类。这些类可以用来管理和控制与ServletRequest动作有关的事件。下面的程序显示了一个典型的ServletRequest监听器的结构。

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程序增强了filter和request dispatcher的配合功能,这样过滤器可以根据请求分发器(request dispatcher)所使用的方法有条件地对Web请求进行过滤。编程者可以通过在web.xml中使用元素设定过滤器作用的条件(下图1):




图1 设定元素的过滤器


·只有当request直接来自客户,过滤器才生效,对应为REQUEST条件。

·只有当request被一个请求分发器使用forward()方法转到一个Web构件时(采用或定义),对应称为FORWARD条件。

·类似地,只有当request被一个请求分发器使用include()方法转到一个Web构件时(采用或定义),对应称为INCLUDE条件。

·只有当request被一个请求分发器使用“错误信息页”机制方法转到一个Web构件时,对应称为ERROR条件。

·第五种过滤器作用的条件可以是上面四种条件的组合。

下面的程序中的定义了当客户请求/icsamples/* 样式的URL时,Security Filter会被用来过滤请求。但是如果到达URL为/icsamples/* 的Web构件的请求是从一个request dispatcher转发过来的,这个过滤器不工作。

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



如果使用下面的程序设置,在中加入INCLUDE,Security Filter只有在被一个request dispatcher使用include()方法包括RequestRecorderServlet时才会工作。在其他情况(如请求直接从客户发来,或request dispatcher使用forward方法)下,Security Filter都不会工作。

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



下面的程序设置定义了Security Filter当request由客户直接发出或request

dispatcher使用forward方法时能工作。

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



程序例6显示了一个在中使用的例子。程序7定义的ReqDispatcherServlet根据用户请求的参数"type",决定如何处理请求。在其中使用了两个RequestDispatcher(rd,和rd2),它们可以向URL为/admin或/control的servlet转发请求。当请求被转发后,适当的过滤器会起作用。过滤器和Web资源的关系可以在web.xml中定义。如果用户输入的Web请求参数为“INCLUDE”,ReqDispatcherServlet的RequestDispatcher会调用include 方法,这样DispatcherFilterIcd会被使用,因为在定义了INCLUDE;如果用户输入的 Web请求参数为“ERROR”ReqDispatcherServlet会调用resp.sendError()方法,这样DispatcherFilterErr会被使用,因为在定义了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、 增强的国际化功能

Servlet 2.4增加了Web程序国际化功能,在web.xml中可以定义网站的字符编码方式。

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



当客户请求了特定语言的Web资源时,servlet程序通过ServletResponse接口的setLocale方法设置一个Web响应的语言属性。

5、 Login/Logout功能

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

posted @ 2005-11-24 04:08 Java 的学习之路 阅读(457) | 评论 (0)编辑 收藏

J2EE Filter 的几种用法

1。 利用Struts 进行账户权限管理


这里只有一个com.micas.utils.test.MyFilter定义,但是在web app启动实例化了2个instance,分别读入2个参数。并且,指定了触发着两个instance的uri 的mapping.

 1 <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
 2          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
 4          version="2.4">
 5 
 6     <servlet>
 7         <servlet-name>action</servlet-name>
 8         <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
 9         <init-param>
10             <param-name>config</param-name>
11             <param-value>/WEB-INF/struts-config.xml
12             </param-value>
13         </init-param>
14     </servlet>
15 
16     <!-- Action Servlet Mapping -->
17     <servlet-mapping>
18         <servlet-name>action</servlet-name>
19         <url-pattern>*.do</url-pattern>
20     </servlet-mapping>
21 
22 
23     <display-name>pogo</display-name>
24 
25     <filter>
26         <filter-name>patGeneral</filter-name>
27         <filter-class>com.micas.utils.test.MyFilter</filter-class>
28         <init-param>
29             <param-name>role</param-name>
30             <param-value>general</param-value>
31         </init-param>
32     </filter>
33 
34     <filter>
35         <filter-name>patManager</filter-name>
36         <filter-class>com.micas.utils.test.MyFilter</filter-class>
37         <init-param>
38             <param-name>role</param-name>
39             <param-value>manager</param-value>
40         </init-param>
41     </filter>
42 
43     <filter-mapping>
44         <filter-name>patManager</filter-name>
45         <url-pattern>/view/pat/manager/*</url-pattern>
46     </filter-mapping>
47 
48     <filter-mapping>
49         <filter-name>patGeneral</filter-name>
50         <url-pattern>/view/pat/general/*</url-pattern>
51     </filter-mapping>
52 
53 
54 </web-app>

MyFilter 代码如下:
 1 package com.micas.utils.test;
 2 
 3 
 4 import javax.servlet.Filter;
 5 import javax.servlet.FilterChain;
 6 import javax.servlet.FilterConfig;
 7 import javax.servlet.ServletException;
 8 import javax.servlet.ServletRequest;
 9 import javax.servlet.ServletResponse;
10 import javax.servlet.http.HttpServletRequest;
11 import java.io.IOException;
12 
13 
23 public class MyFilter implements Filter
24 {
25     private String role;
26 
27     public void init(FilterConfig config) throws ServletException
28     {
29          role = config.getInitParameter("role");
30         System.out.println("role is "+role);
31         config.getServletContext().setAttribute("test",role);
32 
33     }
34 
35     public void doFilter(ServletRequest request, ServletResponse response,
36             FilterChain chain)
37             throws IOException, ServletException
38     {
39 
40         if("manager".equalsIgnoreCase(role)){
41             System.out.println("you are in as a manager");
42         }
43         else if("general".equalsIgnoreCase(role)){
44             System.out.println("you are in as general");
45         }
46         else{
47             System.out.println("something not right");
48         }
49         HttpServletRequest hRequest = (HttpServletRequest)request;
50         System.out.println("the file sends the request is "+hRequest.getRequestURI());
51         chain.doFilter(request, response);
52     }
53 
54     public void destroy()
55     {
56     }
57 }
58 

posted @ 2005-11-22 06:30 Java 的学习之路 阅读(3899) | 评论 (0)编辑 收藏

Struts 的几种Action

  1. 直接转发
 1<?xml version="1.0" encoding="ISO-8859-1"?>
 2
 3<!DOCTYPE struts-config PUBLIC
 4          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
 5          "http://struts.apache.org/dtds/struts-config_1_2.dtd">
 6
 7<struts-config>
 8
 9
10    <action-mappings>
11        <action path="/view/pat/general/test2" forward="/view/pat/test2.jsp" />
12        <action path="/view/pat/manager/test1" forward="/view/pat/test1.jsp" />
13        <action path="/view/pat/general/test3" parameter="/view/pat/test2.jsp" type="org.apache.struts.actions.ForwardAction">
14        </action>        
15    </action-mappings>
16
17</struts-config>
18

11,12 行,简单的写法,直接将请求/view/pat/manager/test1.do 转发至/view/pat/test1.jsp
13, 也是一种标准写法。


===未完待续

posted @ 2005-11-22 06:20 Java 的学习之路 阅读(492) | 评论 (0)编辑 收藏

使用IntelliJ调试JSP

 

 
今天终于成功地使用了IntelliJ 5.0的调试jsp的功能,以后再也不用在jsp页面写输出语句来看结果了。
 
步骤如下:打开远程的tomcat以调试模式打开:catalina.bat jpda start 注意已经设置好环境变量:
     JPDA_ADDRESS=5050
                JPDA_TRANSPORT=dt_socket
然后使用IntelliJ的Run->Config->tomcat server 设置好tomcat 以及调试的端口。
 
不要使用remote,这个不能调试jsp.
 
庆祝。

posted @ 2005-11-11 14:41 Java 的学习之路 阅读(1135) | 评论 (0)编辑 收藏