JSP学习笔记

理论上的东西就不说那么多了,我就捡点写代码必须知道的东西来说

——这些都是最最最最最最基础的,给那些仅有一点点java基础的同学和我自己看的。
其中难免错漏,欢迎批评指教。
 
1.JSP源文件在服务器端,通过JSP容器(引擎)执行后,转化为JSP页面,并向客户端输出。
2.JSP在运行前会转化为servlet,转化的servlet用于处理客户端请求。
3.servlet基础:
  (1)servlet程序由servlet容器管理执行(调用实现了的Servlet接口的类的实例的一系列方法)
  (2)创建Servlet版的HelloWorld——MyServlet.java:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class myServlet extends HttpServlet{
   public void service(ServletRequest  request, ServletResponse response) throws ServletException, IOException{
       response.setContentType("text/html; charset = GBK");
       
       PrintWriter pw = response.getWriter();
       pw.println("<html><body>HelloWorld</body></html>");
   }
}

    a)继承HttpServlet(servlet包定义了实现了Servlet接口的两个抽象类,GenericServlet及其子类HttpServlet——一般Servlet程序都继承自这两个类并实现。)

    b)service()方法由servlet容器调用,还有一些其他方法,详情查看API文档对于Servlet接口的描述。

    c)传入service()的两个参数,顾名思义,request表示来自客户的请求,可以从中获取请求参数;response用于响应客户请求——详情请查看对应接口的API文档,在此我也不一一解释了。

  (3)Servlet程序的执行。

    a)下载、安装配置Tomcat4.0,设置环境变量。

    b)编译MyServlet.java,得到MyServlet.class并将其置于tomcat目录下webapps\examples\WEB-INF\classes文件夹下。

      注意:若编译时提示无法找到包javax.servlet.*和javax.servlet.http.*,设置环境变量CLASSPATH,将Tomcat目录下的common\lib\servlet.jar包含进去则可。

    c)执行Tomcat目录下bin\startup.bat启动服务器

    d)打开浏览器,访问http://127.0.0.1:8080/examples/MyServlet

4.JSP元素
  JSP文件由下述5种元素组合而成,后缀名为.jsp
  (1)HTML标记。就按照HTML标记那样用吧...
<html>
       <body>HelloWorld</body>
</html>
  (2)指令,用于发送消息给JSP容器,设置页面环境。
    格式:<%@xxx ddd="gggg"%>
    @page
       language:java                    ——指定语言
       contentType:text/html;charset=ISO-8859-1|...   ——指定输出数据的MIME类型。
       extends:                       ——指定JSP转换为servlet后所要继承的父类,其值必须是一个合法的类名
       import:                        ——需要导入的包,用逗号分隔。
       session:true|false                   ——是否参与会话(是否可以使用隐含对象session)
       buffer:8kb|none|...                   ——设置隐含对象out的缓冲区大小
       autoFlush:true|false                   ——是否自动刷新
       isThreadSafe:true|false                  ——是否线程安全(是否允许一个page处理多个请求)
       info:                           ——指定一个描述该页面的字符串,可以通过调用page.getServletInfo()返回。
       errorPage:                        ——指定对应的线程处理界面
       isErrorPage:true|false                  ——当前页面能否作为错误处理页面
    @include file="URL" :编译时导入所包含的资源。
    @taglib :指定一个标记库,用于拓展标准的jsp标记集。
<%@page contentType = "text/html;charset=GB2312"%>    <!--设置页面格式及编码-->
 
  (3)scriptlet,由一系列标准java代码的组成。
    格式:<%XXXX%>
      XXXX为标准的java代码。
      特殊的情况是<%=object%>,表示向客户端输出object
<%
    out.println("Hello , I am the first.");
%>

<%="Hello,I am the second."%>
<!--上述两条语句作用类似-->
 
  (4)JSP动作,封装有特殊功能的JSP标记。
    格式:<jsp:XXXX sss="dddd"></jsp:XXXX>
      共有属性:id:                      ——用于唯一标识action
           scope:page|request|session|application ——用于标识action生命周期
      jsp:include  ——将静态或动态页面插入到当前页面
        page:url        ——必须是本地url
        flush:true|false     ——执行include动作后是否刷新缓冲区
      jsp:param  ——指定发送给资源的请求参数
        name:          ——参数名
        value:          ——参数值
      jsp:forward  ——中止当前页面动作并将请求转发到另一资源
        page:url          ——页面地址
      jsp:plugin   ——将java组件插入JSP页面
        type:applet|javabean    ——指定插件的类型
        code:            ——指定将执行的java类文件名称,基于codebase
        codebase:url        ——指定java类文件路径
        name:           ——指定bean或applet的名称
        archive:          ——指定可能用到的java类文件的路径,多个路径用逗号隔开
        align,height,width,hspace,vspace:    ——显示格式
        jreversion:         ——指定运行组件所需的jre版本
        nspluginurl:        ——指定Netscape Navigator浏览器下载插件的地址
        iepluginurl:        ——指定ie浏览器下载插件的地址
      javabean动作  见 7.javabean的创建及使用
      更多jsp动作请读者们自行查阅更专业的文档呢。
         
<jsp:useBean id="testBean" class="test.TestBean"/>
<!--使用一个javabean-->
 
  (5)标记库,程序员可以创建一系列定制的标记。
    ——使用方式似乎和HTML标记挺类似的..
    ——暂时还没有接触到,日后整理
    ——欢迎指教
 
5.JSP版的HelloWorld
  (1)编写源文件:HelloWorld.jsp
<%@page contentType="text/html;charset=GB2312"%>
<%@page import="java.util.*"%>

<html>
    <title>JavaScriptProgram</title>
    <body>
       Now is: <%=new Date()+"<br>"%>
    <%="<h1>HelloWorld!</h1>"%>
  </body>
<html>
 
  (2)将HelloWorld.jsp放至tomcat目录下webapps\examples\下。
  (3)执行Tomcat目录下bin\startup.bat启动服务器
  (4)打开浏览器,访问http://127.0.0.1:8080/examples/HelloWorld.jsp
 
6.jsp隐含对象
  每个JSP都有很多的隐含对象,可以直接调用它们的方法来实现各种神奇的功能哟~~
  (1)作用域:不同的隐含对象具有不同的作用域。
    a)页面:对象只存在于定义它的页面当中。
    b)请求:存在于请求区间。
    c)会话:存在于客户的整个浏览会话区间。
    d)应用程序:存在于jsp容器,任何JSP都可以使用哟~
  (2)常用隐含对象:
    a) HttpServletRequest  request     ——请求作用域,表示客户端请求的对象
                    void setCharacterEncoding("GBK") : 设置传递参数所用字符编码
                    String getParameter("XXX") :  获取名为XXX的请求参数的值
    b) HttpSession      session    ——会话作用域,表示与客户端请求关联的会话
    c) ServletContext    application  ——应用程序作用域,用于获取运行环境的相关信息
    下面的全是页面作用域
    d) page                ——表示当前JSP实例的this引用,代表当前页面
    e) HttpServletResponse response   ——表示对客户端的响应
                    void setCharacterEncoding("GBK") : 设置传递参数所用字符编码
                    void setContentType("text/html;character=GBK") : 设置解析页面类型及所用字符编码
    f) pageContext :通过该对象访问其他隐含对象,获取属性
    g) JspWriter       out      ——代表用于向客户端传送请求处理结果的输出流
    h) config :表示JSP的配置选项
    i) exception :表示传递给JSP页面的异常
    详细信息请自行查阅相关文档。
 
7.javabean的创建及使用
  (1)什么是javabean?
      javabean就是一种特殊的java类...(观众:废话!...)  - -...
      据说javabean分为两种,一种是有用户界面的,另一种是负责事务处理的。
        对于前者,在这里暂不研究吧。我们主要讨论的是后者。
      负责事物处理的javabean,总而言之可以通过使用它来方便的实现 各式各样的通讯
          ——欢迎大神提供更详细、更准确的说明...
  (2)javabean和普通类的编写区别。
      a)提供一个无参的public构造函数
      b)对于任何一个需要引用的javabean属性XXX,必须提供public的setXXX()方法和getXXX()方法来设置和获得它的值。
  (3)javabean的使用。
      a)创建javabean的实例。
        jsp动作:
          jsp:usebean
            id:            ——指定javabean的标记名,供其他标记使用
            scope:          ——指定javabean的作用域
            class:           ——指定javabean的完全合法的类名,包括包名
            beanName:         ——指定javabean的实例名,默认与id相同
            type:Type         ——将创建的javabean的实例转化为该类型
        猜测:
            <jsp:usebean id="testBeanID" scope="page" class="Class" beanName="testBean" type="Type"></jsp:usebean>
            在内存中就相当于:Type testBean = new Class(); 
      b)设置javabean实例的变量
        jsp动作:
          jsp:setProperty
            name:          ——和创建实例时的id值相同
            property:        ——需要设置的实例的属性名,可以用*表示匹配所有属性
            value:          ——需要设置的值,与param不共存,不设置的话则使用param的值。
            param:          ——需要使用的来自客户端的请求参数名,与value属性不共存,默认与property相同。
        也可以使用scriptlet来进行设置,不过不推荐。
      c)输出javabean实例变量的值
        jsp动作:
          jsp:getProperty
            name:          ——和创建时的id值相同
            property:        ——需要获取的实例的属性名
        同样,可以使用scriptlet来输出。
      d)其他
        ——貌似没有提供其他使用javabean的jsp标记。——有待考证。
        ——要使用更多javabean的功能,那么同志们就使用scriptlet来试试吧。
        ——欢迎指教。
  (4)使用javabean的jsp实例。
      a)编写一个javabean——TestBean.java
package com.mypaj;

public class TestBean{
    private int a;
    
    public TestBean(){
        this.a=10;
    }
    
    public int getNumber(){
        return this.a;
    }
    
    public void setNumber(int a){
        this.a=a;
    }
    
    public void addNumber(){
        this.a++;
    }
}
 
      b)编写beanTest.jsp
<%@page contentType="text/html;charset=GB2312" language="java"%>
<html>
    <title>TestJSP</title>
    
    <body>
        <jsp:useBean id="testBean" scope="page" class="com.mypaj.TestBean"/>
        <h1><%=testBean.getNumber()%></h1>
        <jsp:setProperty name="testBean" property="number" value="50"/>
<%
        testBean.addNumber();
%>
        <h1><jsp:getProperty name="testBean" property="number"/><h1>
    </body>
</html>

      c)编译TestBean.java,把得到的com文件夹及其子目录复制到tomcat目录下webapps\examples\WEB-INF\classes文件夹下
      d)将beanTest.jsp文件放至tomcat目录下webapps\examples文件夹下
      e)执行Tomcat目录下bin\startup.bat启动服务器
      f)打开浏览器,访问http://127.0.0.1:8080/examples/beanTest.jsp

  (5)对于jsp:setProperty动作与jsp:getProperty的讨论。
      可以从上述的例子看出,TestBean的实例中的变量名和jsp中setProperty与getProperty动作中的property的值没有半毛钱关系,倒是和调用的方法名似乎有关。
      事实上,当我们把get和set动作中property属性值设置为首字母大写后,浏览器会提示找不到方法。
      于是个人认为,这两个动作的执行方式是:
        a)取property属性值,并将首字母改为大写,如"number"会改为"Number"——(大概是   首字符编码值  =  首字符编码值 - 大小写字母编码差值)
        b)对于setProperty动作和getProperty动作,前者直接调用在上述值之前加上"set"后对应方法名的方法,即 set + Number = setNumber()....而后者则对应调用getNumber()并向客户端输出。
        ——好吧,实际调用原理也许不像上面说的那么奇葩...但是对于使用者来说这样理解大概会比较直观...
      读者可以做更多的试验——欢迎指教。
 
8.其他注意事项
  (1)JSP的请求/响应机制、生命周期和servlet的相同。可以在其中定义jspInit()方法和jspDestroy()方法供JSP容器调用(调用时间类似于servlet的init()和destroy()方法)。
  (2)更高版本的Tomcat服务器执行servlet或jsp可能需要更复杂的配置,请读者自行查阅资料。
  (3)注释,可以在scriptlet之外使用html注释(客户浏览器可见)
      <!--注释内容-->
    或JSP风格注释(客户浏览器不可见)
      <%--注释内容--%>
    也可以在scriptlet内部使用java标准注释(客户浏览器不可见)。
 
 
以上。
欢迎读者指正批评。
posted @ 2012-12-20 20:00  紫零大仙  阅读(236)  评论(0编辑  收藏  举报