• 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标准注释(客户浏览器不可见)。
     
     
    以上。
    欢迎读者指正批评。
  • 相关阅读:
    每日日报40
    每日日报39
    每日日报38
    vue 0点定时网络请求
    js reduce
    时间选择器 element
    CTF-WEB:PHP 变量
    CTF-WEB:PHP 反序列化
    Java 异常类与捕获异常
    Java 面向对象:内部类
  • 原文地址:https://www.cnblogs.com/prpl/p/2826673.html
Copyright © 2020-2023  润新知