JSP读书笔记(1)

lark----2005.7.29

********************************************************************
第一章:JSP技术概述

1.优势:
       一次编写,到处运行;
       系统的多平台支持;
       强大的可伸缩性;
       多样化和功能强大的开发工具之处;
2.特点:
       (1)将内容的生成和显示进行分离;
       (2)生成可重用的组件;
       (3)采用标识简化页面开发;
       (4)jsp能提供所有的Servlets功能;
       (5)健壮的存储管理和安全性;
       (6)一次编写,随处运行;
       (7)jsp的平台适应性更广;
       (8)java中连接数据库的技术是JDBC;
       (9)简单易学;

3.例子:
//helloworld.jsp
<!DOCTYPE PUBLIC "_//W3C//DTD HTML 4.0 Transitional//EN">
<%@page language="java" congtentType="text/html;charset=gb2312" %>
<%@page info="a hello world example" %>
<html>
<head><title>理解jsp的原理</title></head>
<body>
  <center><h1>
  <%
    int times=Integer.parseInt(request.getParameter("times"));
    for(int i=09;i<times;i++)
    {
      out.println("Hello World!");
      out.println("<br>");
    }
  %>
  </h1></center>
</body>
</html>
//
//helloworld.jsp在第一次调用时会被JSP引擎编译,以后将驻留内存;
//以下是helloworld.jsp编译后生成的java源文件.
//
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final helloworld_jsp extentds org.apache.jasper.runtime.HttpJSpBase
   implements org.apache.jasper.runtime.JspSourceDependant
{
  public String getServletInfo()
  {
    return  "a hello world example";
  }
 
  private static java.util.Vector _jspx_dependants;
 
  public java.util.List getDependants()
  {
    return _jspx_dependants;
  }
 
  public void _jspService(HttpServletRequest request, HttpServletResponse response)
         throws java.io.IOException, ServletException
  {
    JspFactory _jspxFactory = null;
    PageContext pageContext = null;
    HttpSession session = null;
    ServletContext application = null;
    ServletConfig config = null;
    JspWritter out = null;
    Object page = this;
    JspWritter _jspx_out = null;
    try
    {
      _jspxFactory=JspFactory.getDefaultFactory();
      response.setContentType("text/html;charset=gb2312");
      pageContext=_jspxFactory.getPageContext(this,request,response,null,true,8192,true);
      application=pageContext.getServletContext();
      config=pageContext.getServletConfig();
      session=pageContext.getSession();
      out.pageContext.getOut();
      _jspx_out=out;

      out.write("/r/n");
      out.write("/r/n");
      out.write("<html>/r/n/t");
      out.write("<head>/r/n/t/t");
      out.write("<title>理解jsp的原理");
      out.write("</title>/r/n/t");
      out.write("</head>/r/n/t");
      out.write("<body>/r/n/t/t");
      out.write("<center>/r/n/t/t");
      out.write("<h1>/r/n/t/t");

      int times=Integer.paraseInt(request.getParameter("times"));
      for(int i=0;i<times;i++)
      {
        out.println("Hello World!");
        out.println("<br>");
      }
     
      out.write("/r/n/t/t");
      out.write("<h1>/r/n/t/t");
      out.write("</center>/r/n/t");
      out.write("</body>/r/n");
      out.write("</html>/r/n");
    }
    catch(Throwable t)
    {
      if(!(t instanceof javax.servlet.jsp.SkipPageException))
      {
        out=_jspx_out;
        if(out!=null && out.getBufferSize()!=0)
           out.clearBuffer();
        if(pageContext!=null)
           pageContext.handlePageException(t);
      }
    }
    finally
    {
      if(_jspxFactory!=null)_jspxFactory.releasePageContext(pageContext);
    }
  }
}
//
**************************************************************************

第二章:搭建开发环境
1.遵循JSP 2.0 和Servlet2.4 规范,需要和JDK1.4.1结合使用.
  (1)JDK安装与设置:
   设置JAVA_HOME环境变量为:c:/jdk1.4-------------------(jDK安装目录)
   设置CLASSPATH环境变量为:C:/jdk1.4/lib/tools.jar;----(搜索java类路径)
   设置PATH变量:C:/jdk1.4/bin;-------------------------(搜索可执行程序路径)
  (2)Tomcat服务器安装与配置:
  (3)BEA WebLogic服务器安装与配置:
  (4)IBM WebSphere服务器安装与配置:
  (5)集成开发环境的设置:如JBuilder等.
  (6)数据库服务器的设置:如Oracle,MS SQL Server,MySql等.

***************************************************************************

第三章:JSP语法详解

1.注释:
(1)HTML/XML注释,在客户端显示出来的一个注释:
   语法:<!--comment[<%=expression%>]-->
   例子:<!--当前时间是:<%=(new java.util.Date()).toLocaleString()%>-->
(2)隐藏注释,只在源文件中显示:
   语法:<%--comment--%>
   例子:<%--以下是循环遍历Cookies--%>
(3)Scriptlets中的注释,和java中的一样:
   例子://这里是单行注释
        /**
        *这里是多行注释
        */
2.脚本元素:包括声明(Declaration),表达式(Expression),Scriptlets
  例子:
    <%
      int i;
      String color1="99cc99";
      String color2="993366";
      for(i=0;i<count;i++)
      {
        String color="";
        if(i%2==0)color=color1;
        else color=color2;
        out.println("<tr bgcolor="+color+"><td>------------</td></tr>");
      }
    %>
3.指令元素:(包括)
  页面(page)指令,include指令,taglib指令(自定义标签的使用).
  如:<%@ include file="header.jsp"%>
     <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

  (1)页面指令详细语法:
     <%@ page
       [language="java"]                           //定义要使用的脚本语言,目前只能是java
       [import="{package.class|package.*},..."]    //和一般的java import一样,用.隔开包或者类列表
       [contentType="TYPE;charset=CHARSET"]        //定义JSP字符编码和页面响应的MIME类型
       [session="True|false"]                      //指定一个Http会话中这个页面是否参与
       [buffer="none|8kb|sizekb"]                  //指定到客户输出流的缓冲方式,设置缓冲区大小
       [autoFlush="True|false"]                    //缓冲区满时,true表示到客户端输出被刷新;false表示出现运行异常,缓冲溢出
       [isThreadSafe="True|false"]                 //设置JSP文件是否能多线程使用,即同时处理多个用户的请求
       [info="text"]                               //关于JSP文件的信息,使用servlet.getServletInfo()获得该字符串信息
       [errorPage="relativeURL"]                   //定义出现异常时调用的页面
       [isErrorPage="True|false"]                  //表明当前页面是否其他页面的errorPage的目标,true则可以使用exception对象,否则不行
       [extends="package.class"]                   //
       [isELIgnored="true|false"]                  //指定EL(表达式语言)是否被忽略,true则容器忽略"${}"表达式的计算
       [pageEncoding="peinfo"]                     //JSP页面的字符编码,默认为ISO-8859-1
     %>
  (2)include指令通知容器将当前JSP页面中的内嵌的,在指定位置上的资源内容包含,同时在编译期间由JSP解析.

4.动作元素:(包括)
  <jsp:useBean>,<jsp:setProperty>,<jsp:getProperty>,<jsp:param>,<jsp:include>,
  <jsp:forward>,<jsp:plugin>,<jsp:fallback>,<jsp:params>,<jsp:attribute>,<jsp:body>,
  <jsp:invoke>,<jsp:doBody>,<jsp:element>,<jsp:text>,<jsp:output>.

  (1)<jsp:param>使用形式是:<jsp:param name="paramName" value="paramValue"/>,一般和<jsp:include><jsp:forward><jsp:plugin>一起使用,
     被用来以"名-值"对的形式为其他标签提供附加信息.
  (2)<jsp:include>允许在请求时间内在现成的JSP页面里包含静态或动态资源,是运行时才确定的,不同与<%@ include%>指令.
     被包含的对象只有对JspWriter对象的访问权,并且不能设置头或者Cookie.
     例如:<jsp:include page="filename" flush="true"/>或者
          <jsp:include page="filename" flush="true">
            <jsp:param name="paramName" value="paramValue">
          </jsp:include>
  (3)<jsp:forward>允许将请求转发到另一个JSP,Servlet或静态资源文件.
     使用方式:<jsp:forward page="uri"/>或者
              <jsp:forward page="uri">
                <jsp:param name="paramName" value="paramValue"/>
              </jsp:forward>

  (4)<jsp:setProperty>和jsp:useBean一起协作,用来设置Bean的简单属性和索引属性.
     使用方式:<jsp:setProperty name="beanName" propertyDetails />
     其中propertyDetails可以是以下的一个:
         property="*"
         property="propertyName" param="parameterName"//(注意:这里是修改了request对象中参数名称与属性名称的对应关系)
         property="propertyName"//(注意:这里的propertyName必须和Bean中属性相同,而且request对象中的参数名称也要和这相匹配)
         property="propertyName" value="propertyValue"
     例如:
         <jsp:useBean id="usersession" scope="session" class="com.user.UserSession">
           <jsp:setProperty name="usersession" property="name" value="lark">
         </jsp:useBean>
  (5)<jsp:getProperty>和jsp:userBean一起协作,用于访问Bean的属性,将属性值转化为String发送到输出流中.
     使用方式:<jsp:getProperty name="beanName" property="propertyValue"/>
  (6)<jsp:useBean>用来在JSP页面中创建一个Bean实例,并指定它的名字以及作用范围.
     使用方式:<jsp:useBean id="id" scope="page|request|session|application" typeSpec/>
     其中typeSpec可以是以下的一个:
         class="classname"//Bean的类路径及类名
         class="classname" type="typeName"
         beanName="beanName" type="typeName"
         type="typeName"
  (7)<jsp:plugin>用来产生客户端浏览器的特别标签(Object或Embed),可以使用它来插入Applet或者JavaBean.
     使用方式:
     <jsp:plugin
         type="bean|applet"
         code="classFileName"
         codebase="classFileDirectoryName"
         [name="instanceName"]
         [archive="URIToArchive,..."]
         [align="bottom|top|middle|left|right"]
         [height="displayPixels"]
         [width="displayPixels"]
         [hspace="leftRightPixels"]
         [vspace="topBottomPixels"]
         [jreversion="JREVertionNumber|1.1"]
         [nspluginurl="URLToPlugin"]
         [iepluginurl="URLToPlugin"]
     >
     [
      <jsp:params>
        [<jsp:param name="parameterName" value="{parameterValue|<%=expression%>}">]+
      </jsp:params>
     ]
     [<jsp:fallback>text message for user</jsp:fallback>]
     </jsp:plugin>

***********************************************************************************

第四章:JSP内建对象及其实例讲解

1.包含的对象有:request,response,pageContext,session,application,out,config,page,exception对象

(1)out对象:被封装成javax.servlet.jsp.JspWriter接口,主要用来向客户端输出数据.
主要方法有:
out.print(),out.println(),out.newLine(),out.flush(),out.close(),out.clearBuffer(),
out.clear(),out.getBufferSize(),out.getRemaining(),out.isAutoFlush().
(2)request对象:被封装成HttpServletRequest接口,通过getParameter方法可以得到request的
参数,通过GET,POST,HEAD等方法可以得到request的类型,通过Cookies,Referer等可以得到请求的Http头.
主要方法有:
isUserInRole(String role),getAttribute(String name),getAttributeNames(),getCookies(),getCharacterEncoding(),
getContentLength(),getHeader(String name),getHeaders(String name),getHeaderNames(),getInputStream(),
getMethod(),getParameter(String name),getParameterNames(),getParameterValues(String name),getProtocol(),
getQueryString(),getRequestURI(),getRemoteAddr(),gtRemoteHost(),getsession([Boolean create]),getServerName(),
getServletName(),getServletPath(),getServerPort(),removeAttribute(String name),
setAttribute(String name, java.lang.Object objt),
exp:
<%
java.util.Enumeration e=request.getAttributeNames();
while(e.hasMoreElements())out.println(e.nextElement());
%>
(3)response对象:被封装成HttpServletResponse接口,响应客户端的请求.
主要方法有:
addCookie(Cookie cook),addHeader(String name, String value),containsHeader(String name),encodeURL(),
flushBuffer(),getBufferSize(),getOutputStream(),sendError(int),sendRedirect(String location),
setContentType(String contentType),setHeader(String name, String value),
exp:
<%@page import="javax.servlet.http.Cookie,java.util.*"%>
<%
  String userName="lark";
  Cookie[] cookie=request.getCookies();
  Cookie cookie_response=null;
  List list=Array.asList(cookie);
  Iteratorit=list.iterator();
  while(it.hasNext())
  {
    Cookie temp=(Cookie)it.next();
    if(temp.getName().equals(userName+"_access_time"))
    {
      cookie_response=temp;
      break;
    }
  }
  out.println("the current time is : "+new java.util.Date()+"<br>");
  if(cookie_response!=null)
  {
    out.println("the last time you login:"+cookie_response.getValue());
    cookie_response.setValue(new Date.toString());
  }
  else
  {
    cookie_response=new Cookie(userName+"_access_time", new java.util.Date().toString());
  }
  response.addCookie(cookie_response);
  response.setContentType("text/html");
  response.flushBuffer();
%>
(4)Session对象:用来保存每个用户信息,跟踪每个用户的操作状态.
主要方法有:
getAttribute(String name),getAttributeNames(),getCreationTime(),getId(),
getLastAccessedTime(),getMaxInactiveInteval(),invalidate(),isNew(),removeAttribute(String name),
setAttribute(String name, java.lang.Object value),
exp:
<%
  String name=request.getParameter("name");
  String password=request.getParameter("password");
  String typr=request.Parameter("type");
  if(name.equals("lark"))
  {
    session.setAttribute("name",name);
    session.setAttribute("type",type);
    response.sendRedirect("loginsuccess.jsp");
  }
  else
  {
    response.sendRedirect("session_login.htm");
  }
%>
  //int the loginsuccess.jsp file
<%
  if(session.getAttribute("type").equals("manager"))
  {
%>
   <a href="manage.jsp">access to the manager's system!</a>
<%
    }
  else
  {
%>
   <a href="user.jsp">access to the user's system</a>
<%
  }
%>
(5)pageContext对象:被封装为javax.servlet.jsp.pageContext接口,包装页面上下文,
主要功能是管理对属于JSP中特殊可见部分中已经命名对象的访问.
主要方法:
forward(java.lang.String relativeUrlPath),getAttribute(java.lang.String name[, int scope]),
getAttributeNamesInScope(),getException(),getRequest(),getResponse(),getServletConfig(),
getServletContext(),getSession(),findAttribute(),setAttribute(),removeAttribute(),
exp:(该例子说明了:pageContext属性默认在当前页面是共享的;session属性在当前session中是共享的;servletContext属性对所有的页面都是共享的)
<%@page import="javax.servlet.http.*,javax.servlet.*"%>
<%
ServletRequest req=pageContext.getRequest();
String name=req=getParameter("name");
out.println("name="+name);
pageContext.setAttribute("userName",name);
pageContext.getServletContext().setAttribute("shareValue","something to share");
pageContext.getSession().setAttribute("session","session value");

out.println("<br>"+pageContext.getAttribute("userName"));
%>
(6)application对象:为多个用户保存信息,每个用户只共享一个application对象,该对象一直存在与服务器运行期间.
主要方法:
getAttribute(String name),getAttributeNames(),getInitParameter(String name),
getServletInfo(),setAttribute(String name, Object object),
exp:(计数器的例子)
//application.jsp
<%
  int count=0;
  String counter_name=request.getParameter("counter_name");
  try
  {
    count=Integer.parseInt(application.getAttribute(counter_name).toString());
  }
  catch(Exception e)
  {
  }
  out.println("自从服务器启动后,此页面已经访问了"+count+"次");
  count++;
  application.setAttribute(counter_name, new Integer(count));//这里必须要Integer转化成类
%>
//use_counter.jsp
<jsp:include page="application.jsp">
  <jsp:param name="counter_name" value="use_counter"/>//use_counter在不同的页面可以不同,可实现不同页面的分开计数
</jsp:include>
(7)config对象:被封装成javax.servlet.ServletConfig接口,表示Servlet的配置.
主要方法:
getServletContext(),getServletName(),getInitParameter(String name),getInitParameterNames(),
(8)page对象:是java.lang.Object类的一个实例,是JSP本身,只有在JSP页面范围内有效.
(9)exception对象:是java.lang.Throwable类的一个实例,指的是运行时的异常,只有在错误页面才可以使用
(在页面指令里有isErrorPage=true的页面)
exp:
<%@page contentType="text/html;charset=gb2312" language="java" isErrorPage="true"%>
<%=exception.getMessage()%>

2.一些实用的编程基础代码:
(1)数据库链接操作等
<%@page import="java.sql.*,com.microsoft.jdbc.sqlserver.SQLServerDriver"%>
<%
  Class.forName(CLASSFORNAME);
  Connection con=DriverManager.getConnection(SERVANDDB,USER,PWD);
  Statement statement=con.createStatement();
  String isCorrect="select * from user_info where userid='"+id"' and password='"+psw+"'";
  ResultSet result=statement.executeQuery(isCorrect);
  //......
  statement.close();
  con.close();
%>

***************************************************************************************************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值