Jsp笔记

来源:互联网 发布:bgp是什么网络类型 编辑:程序博客网 时间:2024/04/20 03:05

[学习笔记]马士兵 Servlet & JSP(1.Servlet)
www.diybl.com 时间 : 2010-05-22 作者:匿名 编辑:Mr.阿布 点击: 131 [ 评论 ]

1.HTTP协议基础测试(获取页面源代码)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* HTTP协议基础测试
* 本程序将Tomcat首页的页面源代码拿下来
* 用此方法,我们可以将我们访问到的页面的内容都拿下来
* @author ykn
*
*/
public class HttpTest {
public static void main(String[] args) {

    Socket s = null;    PrintWriter pw = null;    BufferedReader br = null;    try {        // 建立连接端口,s指向本地机器tomcat服务器端口上        s = new Socket("127.0.0.1",8888);        // 对于本程序而言是输出,则相当于是准备向tomcat服务器端口写请求        pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));        // 请求访问页面(此处等同于访问http://localhost:8888/)           pw.println("GET / HTTP/1.1");        pw.println("Host: www.bjsxt.com");        pw.println("Content-Type:text/html");        pw.println("");        // 上一句表示请求内容结束        pw.flush();        // 上面这一段用于本程序向Tomcat服务器发出访问请求(get)        // 服务器端作出响应,对于本程序而言是输入        br = new BufferedReader(new InputStreamReader(s.getInputStream()));        String str = "";        // 将服务器端的响应信息打印输出(即将http://localhost:8888/页面代码源文件中的内容输出)        // 用此方法,我们可以将我们访问到的页面的内容都拿下来        while((str = br.readLine()) != null) {            System.out.println(str);        }    } catch (UnknownHostException e) {        System.out.println("未知的主机异常。。。");        e.printStackTrace();    } catch (IOException e) {        System.out.println("IO异常。。。");        e.printStackTrace();    } finally {        try {            if (br != null) {                br.close();                br = null;            }            if (pw != null) {                pw.close();                pw = null;            }            if (s != null) {                s.close();                s = null;            }        } catch (IOException e) {            System.out.println("IO异常。。。");            e.printStackTrace();        }               }}

}


2.最简单的servlet示例
说明:
①将HelloWorldServlet .class拷贝到test\WEB-INF\classes目录下(test是项目名)
②在web.xml中添加对应的servlet处理语句:

HW
HelloWorldServlet


HW
/abc

③在URL地址栏中以http://localhost:8888/test/abc形式访问
④页面上显示结果:Hello World!
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 简单的servlet示例
* @author jukey
*
*/
public class HelloWorldServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    response.setContentType("text/html;charset=gb2312");    PrintWriter out = response.getWriter();    out.println("Hello World!");}

}


3.Servlet的生命周期测试
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet的生命周期
* @author jukey
*
*/
public class TestLifeCycleServlet extends HttpServlet {
// 处理请求
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(“doGet”);
}
// 实例化
// 注意:构造方法不能有返回值类型,连void也不行(否则就变成普通方法了)
public TestLifeCycleServlet() {
System.out.println(“constructed”);
}

// 退出服务public void destroy() {    System.out.println("destory");}// 初始化public void init() throws ServletException {    System.out.println("init");}

}
/*
测试结果(在tomcat服务器控制台窗口):
constructed
init
doGet
*/


4.读取指定的参数
①Threeparams.htm

param1 param2 param3  

②ThreeParams.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 读取指定的参数
* @author jukey
*
*/
public class ThreeParams extends HttpServlet {
// 参数在传递过程中,在URL地址栏中显示出来
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(“text/html;charset=gb2312”);
PrintWriter pw = response.getWriter();
pw.println(request.getParameter(“param1”));
pw.println(“
”);
pw.println(request.getParameter(“param2”));
pw.println(“
”);
pw.println(request.getParameter(“param3”));
pw.println(“
”);
}
// 参数在传递过程中,在URL地址栏中隐藏了
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(“doPost”);
// 调用doGet方法
doGet(request,response);
}

}

5.读取所有的参数
①Showparameters.htm


A sample show parameters

A sample show parameters

    <form method="post" action="servlet/ShowParameters">        Item Number:<input type="text" name="itemNum"><br>        Quantity:<input type="text" name="quantity"><br>        Price each:<input type="text" name="price" value="$"><br>        First Name:<input type="text" name="firstName"><br>        Last Name:<input type="text" name="lastName"><br>        Middle Initial:<input type="text" name="initial"><br>        Shipping Address:<textarea name="address" row="3" cols="40"></textarea><br>        Credit Card:<br>        <!--单选框示例-->        &nbsp;&nbsp;<input type="radio" name="cardType" value="Visa">Visa<br>        &nbsp;&nbsp;<input type="radio" name="cardType" value="Master Card">Master Card<br>        &nbsp;&nbsp;<input type="radio" name="cardType" value="Amex">Amex<br>        &nbsp;&nbsp;<input type="radio" name="cardType" value="Discover">Discover<br>        &nbsp;&nbsp;<input type="radio" name="cardType" value="Java SmartCard">Java SmartCard<br>        <!--密码输入框-->        Credit Card password:<input type="password" name="cardNum"><br>        Repeat Credit Card password:<input type="password" name="cardNum"><br><br>        <center><input type="submit" value="Submit Order"></center>    </form></body>


②ShowParameters.java
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 读取所有的参数
* @author jukey
*
*/
public class ShowParameters extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(“text/html;charset=gb2312”);
PrintWriter out = response.getWriter();

    String title = "Reading All Request Parameters";    out.println("init");    out.println("<html><head><title>读取所有参数</title></head>"            + title            + "\n" + "<table border=1 align=center>\n"            + "<TH>Parameter Name<TH>Parameter Value(s)");    // Returns an Enumeration of String objects containing the names of the parameters contained in this request.    Enumeration paramNames = request.getParameterNames();    // Tests if this enumeration contains more elements.    while(paramNames.hasMoreElements()) {        // Returns the next element of this enumeration if this enumeration object has at least one more element to provide.        String paraName = (String)paramNames.nextElement();        out.println("<tr><td>" + paraName + "\n<td>");        // Returns an array of String objects containing all of the values the given request parameter has, or null if the parameter does not exist.        // 注意参数paraName(变量)不能加双引号,否则就是找参数名叫paraName的对应值了。        String[] paramValues = request.getParameterValues(paraName);        // 这个参数只有一个值        if(paramValues.length == 1) {            String paramValue = paramValues[0];            if(paramValue.length() == 0) {                out.println("<I>no value</I>");            } else {                out.println(paramValue);            }        }else {            // 这个参数有好几条值            out.println("<UL>");            for(int i = 0; i < paramValues.length; i++) {                out.println("<LI>" + paramValues[i]);            }            out.println("</UL>");        }    }    out.println("</table>\n<body></html>");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    System.out.println("doPost");    doGet(request,response);}

}

6.Cookies的设置和读取
①设置Cookie到客户端
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 设置Cookie到客户端
* @author jukey
*
*/
public class SetCookies extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 向客户端写入Cookie,共6个
for(int i = 0; i < 3; i++) {
// 3个没有设置时间的Cookie,属于本窗口及其子窗口
Cookie cookie = new Cookie(“Session-Cookie-” + i, “Cookie-Value-S” + i);
response.addCookie(cookie);
// 以下3个Cookie设置了时间(3600秒,1小时),属于文本,别的窗口也可以访问到这些Cookie
cookie = new Cookie(“Persistent-Cookie-” + i, “Cookie-Value-P” + i);
cookie.setMaxAge(3600);
response.addCookie(cookie);
}

    response.setContentType("text/html;charset=gb2312");    PrintWriter out = response.getWriter();    String title = "Setting Cookies";    out.println("<html><head><title>设置Cookie</title></head>"            + "<body>" + title + "<br>"            + "There are six cookies associates with this page.<br>"            + "to see them,visit the <a href=\"ShowCookies\">\n"            + "<code>ShowCookies</code> servlet</a>"            + "</body></html>");}

}

②读取客户端的Cookies
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 读取客户端的Cookies
* @author jukey
*
*/
public class ShowCookies extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.setContentType("text/html;charset=gb2312");    PrintWriter pw = response.getWriter();    String title = "Active Cookies";    pw.println("init");    pw.println("<html><head><title>读取客户端</title></head>"            + title            + "\n" + "<table border=1 align=center>\n"            + "<TH>Cookie Name<TH>Cookie Value" + "<br>");    // 读取客户端的所有Cookie    Cookie[] cookies = request.getCookies();    if(cookies != null) {        Cookie cookie;        for(int i = 0; i < cookies.length; i++) {            cookie = cookies[i];            pw.println("<tr>\n" + "<td>" + cookie.getName() +"</td>\n"                    + "<td>" + cookie.getValue() +"</td></tr>\n");        }    }    pw.println("</table>\n<body><html>");}

}

7.Session的测试
①演示Servlet API中的session管理机制(常用方法)
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* 演示Servlet API中的session管理机制(常用方法)
* @author jukey
*
*/
public class SessionInfoServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    // Returns the current session associated with this request, or if the request does not have a session, creates one.    HttpSession mySession = request.getSession(true);    response.setContentType("text/html");    PrintWriter out = response.getWriter();    String title = "Session Info Servlet";    out.println("<html>");    out.println("<head>");    out.println("<title>Session Info Servlet</title>");    out.println("</head>");    out.println("<body>");    out.println("<h3>Session Infomation</h3>");    // Returns true if the client does not yet know about the session or if the client chooses not to join the session.    out.println("New Session:" + mySession.isNew() + "<br>");    // Returns a string containing the unique identifier assigned to this session.    out.println("Session Id:" + mySession.getId() + "<br>");    // Returns the time when this session was created, measured in milliseconds since midnight January 1, 1970 GMT.    out.println("Session Create Time:" + new Date(mySession.getCreationTime()) + "<br>");    out.println("Session Last Access Time:" + new Date(mySession.getLastAccessedTime()) + "<br>");    out.println("<h3>Request Infomation</h3>");    // Returns the session ID specified by the client.    out.println("Session Id From Request:" + request.getRequestedSessionId() + "<br>");    // Checks whether the requested session ID came in as a cookie.    out.println("Session Id Via Cookie:" + request.isRequestedSessionIdFromCookie() + "<br>");    // Checks whether the requested session ID came in as part of the request URL.    out.println("Session Id Via URL:" + request.isRequestedSessionIdFromURL() + "<br>");    // Checks whether the requested session ID is still valid.    out.println("Valid Session Id:" + request.isRequestedSessionIdValid() + "<br>");    out.println("<a href=" + response.encodeURL("SessionInfoServlet") + ">refresh</a>");    out.println("</body></html>");    out.close();}

}
②Session追踪
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Session追踪
* 如果浏览器支持Cookie,创建Session的时候会把SessionId保存在Cookie中
* 否则必须自己编程使用URL重写的方式实现Session:response.encodeURL()
* @author jukey
*
*/
public class ShowSession extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.setContentType("text/html;charset=gb2312");    PrintWriter out = response.getWriter();    String str = "Session Tracking Example";    String heading;    // 如果会话已经存在,则返回一个HttpSession;否则创建一个新的    HttpSession session = request.getSession(true);    // 从当前session中读取属性accessCount的值    Integer accessCount = (Integer)session.getAttribute("accessCount");    if(accessCount == null) {        accessCount = new Integer(0);        heading = "Welcome newUser";    } else {        heading = "Welcome Back";        accessCount = new Integer(accessCount.intValue() + 1);    }    // 向当前session中插入键(key,属性)值(value)对    // Binds an object to this session, using the name specified.    session.setAttribute("accessCount", accessCount);    out.println("<html><head><title>Session追踪</title></head>"            + "<body>" + heading + "<br>"            + "<h2>Information on Your Session</h2><br>"            + "\n" + "<table border=1 align=center>\n"            + "<TH>Info Type<TH>Value" + "<br>"            + "<tr>\n" + "<td>ID</td>\n"            + "<td>" + session.getId() +"</td></tr>\n"            + "<tr>\n" + "<td>CreatTime</td>\n"            + "<td>" + new Date(session.getCreationTime()) +"</td></tr>\n"            + "<tr>\n" + "<td>LastAccessTime</td>\n"            + "<td>" + new Date(session.getLastAccessedTime()) +"</td></tr>\n"            + "<tr>\n" + "<td>Number of Access</td>\n"            + "<td>" + accessCount +"</td></tr>\n"            + "</body></html>");}

}

8.Application测试
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Application测试
* 用于保存整个web应用的生命周期内都可以访问的数据
* 可供多个不同窗口访问,可作为某一页面被总共访问次数的计数器(比如网站首页的访问量)
* @author jukey
*
*/
public class TestServletContext extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.setContentType("text/html;charset=gb2312");    PrintWriter out = response.getWriter();    // Returns a reference to the ServletContext in which this servlet is running.    ServletContext application = this.getServletContext();    // 从当前application中读取属性accessCount的值    Integer accessCount = (Integer)application.getAttribute("accessCount");    if(accessCount == null) {        accessCount = new Integer(0);    } else {        accessCount = new Integer(accessCount.intValue() + 1);    }    // 向当前application中插入键(key,属性)值(value)对    application.setAttribute("accessCount", accessCount);    out.println("<html><head><title>ServletContext测试</title></head><br>"            + "<body><td>" + accessCount +"</td>\n"            + "</body></html>");}

}

9.Servlet类本身位于包中的情况
package com.bjsxt.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet类本身位于包中的情况
* classes中要class文件及其各级目录一起放置
* web中如下设置:com.bjsxt.servlet.HelloWorldServlet2
* @author jukey
*
*/
public class HelloWorldServlet2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.setContentType("text/html;charset=gb2312");    PrintWriter out = response.getWriter();    out.println("Hello World!");}

}


10.在Servlet中直接连接数据库,并查询显示信息
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 在Servlet中直接连接数据库,并查询显示信息
* 每个application都应该有自己的驱动包,放在各自项目的WEB-INF\lib\目录下
* @author jukey
*
*/
public class ShowRs extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    Connection conn = null;    Statement stmt = null;    ResultSet rs = null;    response.setContentType("text/html;charset=gb2312");    PrintWriter out = response.getWriter();    out.println("<table border=1>");    out.println("<tr><td>Content:</td></tr>");    try {        Class.forName("com.mysql.jdbc.Driver");        conn = DriverManager.getConnection("jdbc:mysql://localhost/bbs?user=root&password=mysql");        stmt = conn.createStatement();        String sql = "select * from article";        rs = stmt.executeQuery(sql);        while(rs.next()) {            out.println("<tr>");            out.println("<td>" + rs.getString("cont") + "</td>");            out.println("</tr>");        }    } catch (SQLException ex) {        ex.printStackTrace();    } catch (Exception ex) {        ex.printStackTrace();    } finally {         if (rs != null) {             try {                 rs.close();                 rs = null;             } catch (SQLException sqlEx) {                 sqlEx.printStackTrace();             }         }         if (stmt != null) {             try {                 stmt.close();                 stmt = null;             } catch (SQLException sqlEx) {                 sqlEx.printStackTrace();             }         }         if (conn != null) {             try {                 conn.close();                 conn = null;             } catch (SQLException sqlEx) {                 sqlEx.printStackTrace();             }         }    }}

}
广义javabean= 普通java类
狭义javabean=符合Sun JavaBean标准的类

cookie是服务器写到客户端的文本(key,value)来保存
分两种
1,保存,有生命周期
2,存在窗口中。
Session(对应的是一个窗口,查一下api文档)
1通过cookie实现
2通过重写URL来实现
application
用于保存整个WebApplication的生命周期内都可以访问的数据
在api中表现为Servlet的getSercletContext
通过HttpServlet的getServletcontext方法可以拿到
通过servletContext 的get/setAttribute方法取得/设置相关属性

只能拿webapps写入东西

一个servlet设置的cookies能被同一个 路径下面或者子路径下面servlet/jsp读到(路径=URL)(路径不是真实的路径)。

Session 两种实现方式:第一种cookies方式实现
第二种:通过url重写方式实现
规则:如果浏览器支持cookies,创建session的时候会把session id保存在浏览器中。
如果不支持cookies,必须自己编程使用URL重写的方式实现Session
*response.encodeURL()
*转码
*URL后面加入SessionID
Session不像Cookies拥有路径访问的问题

同一个application下的servlet/jsp 可以共享同一个Session,前提是同一个客户端窗口。

11.Servlet中使用专门的数据库操作类DB
①Servlet中使用专门的数据库操作类DB,这样,本程序就比前一个显得简单清楚
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet中使用专门的数据库操作类DB,这样,本程序就比前一个显得简单清楚
* DB类,专门跟数据库打交道,分工明确,各司其职
* @author jukey
*
*/
public class ShowRsUseBean extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.setContentType("text/html;charset=gb2312");    PrintWriter out = response.getWriter();    out.println("<table border=1>");    out.println("<tr><td>Content:</td></tr>");    // 直接调用DB中的静态方法来为本类服务    Connection conn = DB.getConnection();    Statement stmt = DB.getStatement(conn);    String sql = "select * from article";    ResultSet rs = DB.getResultSet(stmt, sql);    try {        while(rs.next()) {            out.println("<tr>");            out.println("<td>" + rs.getString("cont") + "</td>");            out.println("</tr>");        }    } catch (SQLException e) {        System.out.println("执行SQL遍历过程中出现了错误。。。");        e.printStackTrace();    } finally {        // 直接调用DB中的静态方法来关闭一系列被打开的资源        DB.close(rs);        DB.close(stmt);        DB.close(conn);    }}

}

②专门跟数据库打交道的类
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 专门跟数据库打交道的类
* @author ykn
*
*/
public class DB {
// 获取连接
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName(“com.mysql.jdbc.Driver”);
conn = DriverManager.getConnection(“jdbc:mysql://localhost/bbs?user=root&password=mysql”);
} catch (ClassNotFoundException e) {
System.out.println(“驱动程序未找到,请加入mysql.jdbc的驱动包。。。”);
e.printStackTrace();
} catch (SQLException e) {
System.out.println(“执行数据库连接过程中出现了错误。。。”);
e.printStackTrace();
}
return conn;
}

// 获取表达式语句public static Statement getStatement(Connection conn) {    Statement stmt = null;    try {        if (conn != null) {            stmt = conn.createStatement();        }    } catch (SQLException e) {        System.out.println("执行获取表达式语句过程中出现了错误。。。");        e.printStackTrace();    }           return stmt;}// 获取查询的结果集public static ResultSet getResultSet(Statement stmt, String sql) {    ResultSet rs = null;    try {        if (stmt != null) {            rs = stmt.executeQuery(sql);        }    } catch (SQLException e) {        System.out.println("执行查询过程中出现了错误。。。");        e.printStackTrace();    }    return rs;}// 关闭连接public static void close(Connection conn) {    try {        if (conn != null) {            conn.close();            conn = null;        }    } catch (SQLException e) {        System.out.println("执行关闭数据库连接过程中出现了错误。。。");        e.printStackTrace();    }       }// 关闭表达式语句public static void close(Statement stmt) {    try {        if (stmt != null) {            stmt.close();            stmt = null;        }    } catch (SQLException e) {        System.out.println("执行关闭表达式语句过程中出现了错误。。。");        e.printStackTrace();    }       }// 关闭结果集public static void close(ResultSet rs) {    try {        if (rs != null) {            rs.close();            rs = null;        }    } catch (SQLException e) {        System.out.println("执行关闭结果集过程中出现了错误。。。");        e.printStackTrace();    }       }

}

[学习笔记]马士兵 Servlet & JSP(2.JSP)
www.diybl.com 时间 : 2010-05-22 作者:匿名 编辑:Mr.阿布 点击: 34 [ 评论 ]

1.最简单的JSP
HelloWorld.jsp


Hello

<%
out.println(“Hello World!”);
%>

2.JSP中的全局变量和局部变量
AccessCounts.jsp


JSP Declaration


<%!
// 全局变量
int accessCount = 0;
%>

    <%        // 局部变量        int accessCount2 = 0;    %>    <h2>AccessCount:        <br>Overall Variable:<%= ++accessCount %>        <br>Local Variable:<%= ++accessCount2 %>    </h2></body>

测试结果:访问同一页面,每刷新一次,accessCount增1,accessCount2不变(每次出现一个新的局部变量)。

3.注释、当前页面从URL中取背景色参数
BGColor.jsp


Color Testing

<!--HTML注释客户端可以看见--><%--JSP注释客户端看不见--%><%//注释2/*注释3*/// 将请求中参数bgColor的值拿过来,假如没有传这个参数,则值为nullString bgColor = request.getParameter("bgColor");boolean hasColor;if(bgColor != null) {    hasColor = true;} else {    hasColor = false;    bgColor = "white";}%>    <!--显示背景色--><body bgcolor="<%= bgColor%>"><h2 align="center">Color Testing</h2><%if(hasColor) {    out.println("You supplied a backgroud color of " + bgColor + ".");} else {    out.println("Use Default backgroud color of white");}%></body>


4.表达式
Expressions.jsp


JSP Expressions



JSP Expressions

<UL>    <!--获取当前本地时间-->    <LI>Current Time:<%= new java.util.Date().toLocaleString() %>    <LI>Your HostName:<%= request.getRemoteHost() %>    <!--获取当前页面的SessionID-->    <LI>Your Session Id:<%= session.getId() %>    <LI>The <code>testParam</code> from parameter:<%= request.getParameter("testParam") %></UL></body>

5.@page指示语句的测试
TestDirective.jsp
<%@page import=”java.util.*” %>
<%@page contentType=”text/html;charset=gb2312” %>


<%= new Date().toLocaleString() %>


<%
out.println(“你好!”);
%>


6.错误页跳转测试
①TestErr.jsp
<%@page errorPage=”ErrPage.jsp” %>

<%
String str = “123abc”;
int i = Integer.parseInt(str);
out.println(“str= ” + str + “,i= ” + i);
%>
②ErrPage.jsp
<%@page contentType=”text/html;charset=gb2312” %>
<%@page isErrorPage=”true” %>



错误信息:<%= exception.getMessage()%>


7.include指令”%@ include file“和include动作指令“jsp:include page”
前者是先包含进来再编译执行;后者是先各自编译执行再包含进来
①include.jsp


include test

<body bgcolor="white">    <font color="red">        The current time and date are:<br>    <!--先将date.jsp的内容包含进来,再一起进行转换、编译和执行-->        <%@include file="date.jsp" %><br>    <!--先将date.jsp进行转换、编译和执行,再将结果包含进来-->        <jsp:include page="date.jsp" flush="true" />    </font></body>


②date.jsp
<%@page import=”java.util.*” %>
<%–a string representation of this date, using the locale conventions.–%>
<%= (new Date()).toLocaleString() %>
说明:以下转载自网络 http://blog.matrix.org.cn/rudy541/entry/200708162
jsp中两种包含文件的区别:
相同点:两者逗能包含一个页面
不同点:
区别1:
(先执行,后包含)
此标签表示法:能动态区别加进来的是动态页面还是静态页面
对于静态页面则直接将资源包含(仅取其文本)。
对于动态页面则先处理各自资源,之后将处理过的结果包含在一起。
<%@ include file=”b.jsp”>
此指令表示:静态地包含页面,不管其内容如何,不过是静态页面还是动态页面都首先将页面的内容先加进来。
然后一起处理,再将所有内容发给客户端。
实例挑战:
有b.jsp页面
<%int i = 10 ;%>
<%=i%>
主界面a.jsp也有<%int i = 100 ;%> <%=i%>
如果是加载<%@ include file=”b.jsp”>,则是先包含后执行,就会发现报错,i被重新定义,
但如果是加载则是先执行结果,然后将结果包括到主页面。不会报错。
区别2:
可以分开写成:



这样就可以传递参数。


8.两个数的乘除运算
①Compute.html


Compute






选择要做的运算:

除法

乘法


被除数(被乘数)

除数(乘数)









②Compute.jsp
<%@page language=”java” %>
<%@page contentType=”text/html;charset=gb2312” %>
<%
// 将Compute.html页面输入的要进行计算的两个变量拿过来
String value1 = request.getParameter(“value1”);
String value2 = request.getParameter(“value2”);
%>
<% if(“division”.equals(request.getParameter(“compute”))) { %>


”/>
”/>

<% } else { %>

<%@include file=”multiply.jsp” %>
<% } %>

③multiply.jsp
<%@page contentType=”text/html;charset=gb2312” %>


Multiply

<%–进行乘法计算的JSP–%>



<%
try{
float multiplicand = Float.parseFloat(request.getParameter(“value1”));
float multiplicator = Float.parseFloat(request.getParameter(“value2”));
double result = multiplicand*multiplicator;
out.println(multiplicand + “*” + multiplicator +” = ” + result);
} catch(Exception e) {
out.println(“不合法的乘数或被乘数”);
}
%>





④divide.jsp
<%@page contentType=”text/html;charset=gb2312” %>


Divide

<%–进行除法计算的JSP–%>



<%
try{
float divident = Float.parseFloat(request.getParameter(“v1”));
float divisor = Float.parseFloat(request.getParameter(“v2”));
double result = divident/divisor;
%>
<%= result%>
<%
} catch(Exception e) {
out.println(“不合法的除数或被除数”);
}
%>



9.jsp:forward和response.sendRedirect
①最简单的jsp:forward
forward.jsp


Forward Example



Welcome to forward.jsp
<%–直接跳转到forforward.jsp,这两个jsp用的是同一个request–%>



forforward.jsp


forforward.jsp

<body bgcolor=blue>    Welcome<br>    Here is forforward.jsp</body>


②jsp:forward和response.sendRedirect的比较
forward1.jsp


Forward Example

<body bgcolor=red>    Welcome to forward1.jsp    <jsp:forward page="forforward1.jsp" >        <jsp:param name="name" value="m" />        <jsp:param name="oldName" value='<%= request.getParameter("name")%>' />        <jsp:param name="roles" value="manager" />    </jsp:forward></body>


forforward1.jsp:和forward1.jsp使用的是同一个request(服务器跳转)


forforward1.jsp

<body bgcolor=blue>    Welcome<br>    Here is forforward1.jsp<br>    <%= request.getParameter("name")%>    <%= request.getParameter("oldName")%>    <%= request.getParameter("roles")%>    <%= request.getParameter("address")%></body>


测试结果:
访问http://localhost:8888/test/forward/forward1.jsp?name=yyg&address=34527144231
结果:
Welcome
Here is forforward1.jsp
m yyg manager 34527144231
此时页面URL还是forward1.jsp,并没有跳转到forforward1.jsp,给用户的感觉还是刚才的页面在为自己服务。
说明:m 和manager 是forward1.jsp中传过来的;而yyg 和34527144231 是在URL中通过request传过来的。并且forward1.jsp中也没有address属性,这也从另一个角度说明了这两个jsp使用的是同一个request。

test.jsp:和forward1.jsp使用的是不同的request
说明:访问过http://localhost:8888/test/forward/test.jsp后,页面跳转成http://localhost:8888/test/forward/forforward1.jsp
这个过程中客户和服务器之间产生了两个request,并且test.jsp后跟参数并不能传递到forforward1.jsp(原因也很明显:两次是不同的request)
<%
response.sendRedirect(“forforward1.jsp”);
%>


10.jsp:useBean
①CounterBean.java
package bean;
import java.io.Serializable;
/**
* 一个很普通的JavaBean
* @author jukey
*
*/
public class CounterBean implements Serializable {

private int count = 0;public CounterBean() {}public int getCount() {    count++;    return count;}public void setCount(int count) {    this.count = count;}

}
②test.jsp:JSP往JavaBean中设置值,从JavaBean中拿值
<%@page import=”bean.*” %>
<%–
<%
// 下面这个语句等同于
CounterBean cb = new CounterBean();
%>
–%>



<%–将bean中存储的值拿出来–%>
<%= cb.getCount()%>



<%–cb.setCount(25)–%>



<%–cb.getCount()–%>

以下是Bean的4种作用范围的测试:
③page有效(仅涵盖使用JavaBean的页面)
PageBean.jsp



CounterBean scope=”page” Example


count: <%= counterBean.getCount()%>
<%–上下两句效果一样–%>



④request有效(有效范围仅限于使用JavaBean的请求)
RequestBean.jsp

11.jsp:setProperty和jsp:getProperty
①SaleEntry.jsp


Using jsp:setProperty





Using jsp:setProperty

    <jsp:useBean id="entry" class="bean.SaleEntry" />    <%--从JSP向JavaBean中设值--%>   


0 0
原创粉丝点击