JSP的总结

JSP的总结

  1. jsp的定义
      • Java server Page ,JavaEE组件,本质上是servlet
      • 运行在web Container。接受Http Request。生成Http Response(默认协议是Http请求和响应)
      • Jsp使得我们能够分离页面的静态HTML和动态部分。
      • 使页面可以和html代码,Java代码以及Jsp:允许访问组件
  2. servlet的缺陷
      • 写静态页面必须部署后才能看到效果,很难控制页面的外观。
      • 从技术角度来说servlet使java代码和HTML静态代码的混合代码。
  3. jsp的改进
      • Jsp是标签式的文本文件(servlet是Java文件)
      • Jsp不需要编译(由服务器监测JSP文件的变化,在将其翻译成servlet代码)

注意:服务器对其进行编译并在第一次请求时创建一个servlet实例。所以,第一次访问JSP页面会延迟

3.jsp不用写配置文件

      • Jsp以静态代码为主Java代码为辅,servlet反之
      • Servlet,JSP和EJB是J2EE的三大组件
      • Jsp本质上来说内核还是Servlet,但是servlet不是替代关系而是互补的关系。
      • Jsp适合写显示层的动态页面,而servlet适合控制层的业务控制(页面转发)
      • Jsp以纯标签方向发展,servlet往纯代码代码发展,以service内核(请求响应的工作方式)两个方向发展

基本语法

  1. Jsp的声明(statement)
      • 用来定义在生产的类文件中的类的属性和方法(成员变量)
      • 由于servlet是工作在多线程环境下,所以尽量不要在service方法体外声明成员变量。
      • <%!......%>//声明时要加!,属于类成员,最先加载。任意位置可写,不加是局部变量,必须在调用前写。

声明规则:

  1. jsp中声明的变量和方法对应servlet中的实例方法和实例变量。这些将被同时请求该页面的用户所共享
  2. 在使用变量或方法前必须先定义
  3. 声明的变量或方法的作用的作用域为当前页面或包含的页面
  4. 页面间以分号分隔。
  1. JSP代码段

 

 <% java代码 %>

   是一段可以在处理请求时间执行的Java代码。可以产生输出,也可以是一些流程控制语句。

   在代码段中定义的变量为service方法中的局部变量。

   1._jspService()中的局部代码:

      <%  System.out.println("Hi,I like JSP."); %>   //在控制台打印出,网页上没显示

      <%  out.println("Hi,I like JSP."); %>          //打印在网页上

      <%  Connection conn=DriverManager.getConnection();  Statement st=conn.createStatement();

        String sql="select * from users";               ResultSet rs=st.executeQuery(sql);

         //……

       %>

不能在JSP脚本里定义方法

2.比较

<%!  int i=100;%>//成员变量

<% int i=101;%>方法中的局部变量

<%=i%>//同一文件里,局部变量优先

3.JSP表达式

<%= %>/相当于  =的作用

JSP对于声明的处理:1.计算表达式的值

2.将值转换为string

3.用out.print发送标签:把数据输出到页面的当前位置

表达式规则:

  1. 使用的脚本语言决定了脚本小程序的规则
  2. 执行的顺序为从左向右
  3. 分号不能用于表达式

4.JSP指令

定义:用于从JSP发送信息到容器上,用来设置全局变量,声明类,要实现的方法和输出内容。

  1. page指令:import,session,errorPage,isThreadSafe 页面的语言,内容类型,字符集,页面编码

<%@page language="java" contentType="text/html; charset=gbk" pageEncoding="gbk"%>

Language:Java唯一值,表示脚本中使用的编程语言

ContentType:设置了内容的类型和静态页面的编码(告诉浏览器以什么编码显示)

PageEncoding:页面本身的编码格式

等价于servlet中的response.setContentType(“text/html;charset=utf-8”)

Import:导入其他的包和类;jsp的默认包是Java.lang。如果连写用逗号隔开

Session:当前页面的jsp是否参与会话(默认true:参与会话)

通过指令使当前页面于session不可会话:<%@page session=false%>

  session="true"时,可用内建对象session直接访问会话,例如:

        <%  session.setAttribute("username","maxwell");

            String name = (String)session.getAttribute("username"); %>

        <%=name%>

ErrorPage:isErrorPage:jsp页面出现异常的处理方式

      <%@page errorPage="error.jsp"%> //异常时会跳转到处理异常的页面;这页面自己写

            在有可能异常的地方打印原因:  throw new Exception("数据库连接出错");

      对于处理异常的页面(error.jsp)里:

            <%@page isErrorPage="true"%>,其中使用<%=exception.getMessage() %>把异常信息打印出来

  1. include指令

把目标页面的内容包含到当前页面,相当于两个页面合并

<%@include file=“引入文件名”%>//可插任意位置

  1. taglib指令

5.JSP中注释

1.Java注释:编译器会忽视此类注释,客户端看不到

2.html注释;编译器会编译此类注释,客户端可看到

6.动作(action)

<jsp:actionName attributeName=attributeValue/>

Jsp的动作包含:forward,include,useBean,setProperty,getproperty

  1. Forward

形式:<jsp: forward page=“anther.jsp>

等价于servlet中的RequestDispatcher.forward();

可以传参数

<jsp:forward page=“anther.jsp>

<jsp;param name=“name” value=“xxxx”/>

<jsp;param name=“age” value=“10”/>

</jsp;forward>

  1. include动作

形式:<jsp:include page="another.jsp"/>

          等价于 Servlet中通过RequestDispatcher.include();

      Include动作也可以传参数

          <jsp:include  page="b.jsp" flush="true">

             <jsp:param name="name" value="narci"/>

          </jsp:include>

与<%@include file=""%>比较:include动作在运行期处理jsp:include包含URL的响应,不是url。意味喆对url进行了解释,所以生成响应。动态内容,include动作可以传参数

flush属性:指示早读入包含内容之前是否清空缓存区

6.jsp的生命周期

1.每个jsp都会对应有一个servlet的生成

2. 在 %tomcat%/work/Catalina/localhost/工程名/org/apache/jsp 目录下可找到对应生成的 Servlet 文件

1_jspInit():jsp容器第一次加载jsp文件调用

2._jspservice():接收到服务器对jsp的请求时,都会调用该方法

3._jspDestroy():jsp文件被修改后,jsp容器就会销毁旧的jsp文件

Jsp的处理过程:1.jsp页面转换阶段,页面会被编译成Java类,所有的HTML标签和jsp标签都被转换创建一个servlet,这时,脚本和表达式还没有被执行

2.请求处理阶段:发生在服务器,将一个客户端请求指向jsp页面

 

注意:POJO:plain old java object ---简单传统的Java对象

Java bean:组件 构件的规范(属性,提供get/set方法:还可包含其他方法)

Java Bean

  1. 无参构造器(默认的构造方法)
  2. 标准的get/set方法
  3. 如何进行网络传输(支持RMI)需要实现Serializable

如何在jsp使用Java Bean

1.定义Java bean

     形式:<jsp:useBean id = "BeanName" class = "className"  sope="范围域"

Id-----声明bean对象的标识符,方便其他地方使用

Class----bean对象的类型,注意要使用完全限定名

Scope------bean对象的共享范围(page,request,session,application)

Page:当前页面(范围小,周期短)

Request:一个请求范围内

Session:一个会话内(30分钟不使用,会自动结束)

Application:同一个应用(范围最大,周期长)

2.对Javabean的属性赋值

  形式:<jsp:setProperty name="JavaBean对象名" property="JavaBean属性名" value="属性值"/>

        例子:   <jsp:setProperty name="girl" property="name" value="Lily"/>

        等价于: <% girl.setName("Lily");%>

3.获取属性值

    形式:<jsp:getProperty name="" property=""/>

        name:标识具体的Bean对象,这与<jsp:useBean>标准动作中的id值相匹配

        property:标识属性中的标识符

 

注意:三种异常处理方式同时启用,作用域越小,优先级越高。

  1. 网络安全的四大要素
  1. 认证----抵制假冒者(用户身份的合法性)
  2. 授权----合法用户拥有的权限
  3. 机密性---防止关键数据库落入其他人手中
  4. 数据的完整性---抵制窃听者(篡改私有数据)

5.对HTTP应用时如何进行认证的(web的认证方法)

四种安全认证:(http协议)basic,form,digest,certificate(证书)+ssl

HTTPMoniotor监控受限资源

九大域对象

  1. jspWriter  out   往浏览器写内容
  2. HttpServletRequest   request  http的请求对象、
  3. HttpServletResponse   response  HTTP的响应对象
  4. PageContext   pageContext   jsp的页面上下文
  5. HttpSession  request  会话对象
  6. ServletContext   request  应用上下文
  7. ServletConfig     config    jsp的ServletConfig     
  8. Object  page   页面实现类的对象
  9. Exception  exception   含有指令<%page  isErrorPage=true%>
  1. 对象范围

有四个是范围对象 PageContext   request  request  request  对应<jsp:userBean/>指令的scope是:page request session application

注意:选择对象的范围原则:作用域的范围的对象越小学好。作用域越小的生命周期短,有利于提高性能。

  1. pageContext对象:

每一个jsp页面对应一个pageContext。用于存取属性。

1.2pageContext对象取得其他域对象的方法

 Exception getException-----回传目前页面的异常,需要errorpage

JspWrite getOut()  回传目前的输出流

Object  getPage()----回传目前网页的servlet实体

ServletRequest  getRequest()——回传目前页面的请求

ServletResponse getResponse()——回传目前页面的响应

ServletConfig   getServletConfig()——回传ServletConfig对象

ServletContext getServletContext()——回传页面的执行环境

HttpSession getSession()——回传和目前有联系的会话

  1. request对象

Request对象包含所有请求信息

     String getContextPath()            取得Context 路径(即站台名称)

      String getMethod()                 取得HTTP 的方法(GET、POST)

      String getProtocol()               取得使用的协议 (HTTP/1.1、HTTP/1.0 )

      String getQueryString()            取得请求的参数字符串,不过,HTTP的方法必须为GET

      String getRequestedSessionId()     取得用户端的Session ID

      String getRequestURI()             取得请求的URL,但是不包括请求的参数字符串

      String getRemoteAddr()             取得用户的IP 地址

      String getRemoteHost()             取得用户的主机名称

      int getRemotePort()                取得用户的主机端口

      String getRemoteUser()             取得用户的名称

  1. session对象

   session对象表示目前个别用户的会话(session)状况。

     session对象实现javax.servlet.http.HttpSession接口,HttpSession接口所提供的方法

      long getCreationTime()             取得session产生的时间,单位是毫秒

      String getId()                     取得session 的ID

      long getLastAccessedTime()         取得用户最后通过这个session送出请求的时间

      long getMaxInactiveInterval()      取得最大session不活动的时间,若超过这时间,session 将会失效

      void invalidate()                  取消session 对象,并将对象存放的内容完全抛弃

      boolean isNew()                    判断session 是否为"新"的会话

      void setMaxInactiveInterval(int interval)   

                                       设定最大session不活动的时间,若超过这时间,session 将会失效

  1. application对象

Application对象最常用在存储环境的信息

环境的信息通常配置在servletContext中,常用application对象来存取servletContext信息

int getMajorVersion()              取得Container主要的Servlet API版本

      int getMinorVersion()              取得Container次要的Servlet API 版本

      String getServerInfo()             取得Container的名称和版本

      String getMimeType(String file)    取得指定文件的MIME 类型

      ServletContext getContext(String uripath)        取得指定Local URL的Application context

      String getRealPath(String path)    取得本地端path的绝对路径

      void log(String message)           将信息写入log文件中

      void log(String message, Throwable throwable)    将stack trace 所产生的异常信息写入log文件中

  1. 其他对象(了解)

 1)page 对象

     page对象代表JSP本身,更准确地说page对象是当前页面转换后的Servlet类的实例。

     从转换后的Servlet类的代码中,可以看到这种关系: Object page = this;

     在JSP页面中,很少使用page对象。

    2)response 对象

     response 对象主要将JSP 处理数据后的结果传回到客户端。

     response 对象是实现javax.servlet.http.HttpServletResponse 接口。response对象所提供的方法。

    a.设定表头的方法

      void addCookie(Cookie cookie)                新增cookie

      void addDateHeader(String name, long date)   新增long类型的值到name标头

      void addHeader(String name, String value)    新增String类型的值到name标头

      void addIntHeader(String name, int value)    新增int类型的值到name标头

      void setDateHeader(String name, long date)   指定long类型的值到name标头

      void setHeader(String name, String value)    指定String类型的值到name标头

      void setIntHeader(String name, int value)    指定int类型的值到name标头

    b.设定响应状态码的方法

      void sendError(int sc)                       传送状态码(status code)

      void sendError(int sc, String msg)           传送状态码和错误信息

      void setStatus(int sc)                       设定状态码

    c.用来URL 重写(rewriting)的方法    

      String encodeRedirectURL(String url)         对使用sendRedirect()方法的URL予以编码

    3)out 对象

     out对象的类型是javax.servlet.jsp.JspWriter,该类从java.io.Writer类派生,以字符流的形式输出数据。

     out对象实际上是PrintWriter对象的带缓冲的版本(在out对象内部使用PrintWriter对象来输出数据),

     可以通过page指令的buffer属性来调整缓冲区的大小,默认的缓冲区是8kb。

     out 对象能把结果输出到网页上。

     out主要是用来控制管理输出的缓冲区(buffer)和输出流(output stream)。

      void clear( )               清除输出缓冲区的内容

      void clearBuffer( )         清除输出缓冲区的内容

      void close( )               关闭输出流,清除所有的内容

      int getBufferSize( )        取得目前缓冲区的大小(KB)

      int getRemaining( )         取得目前使用后还剩下的缓冲区大小(KB)

      boolean isAutoFlush( )      回传true表示缓冲区满时会自动清除;false表示不会自动清除并且产生异常处理

    4)exception对象

     若要使用exception 对象时,必须在page 指令中设定:<%@ page isErrorPage="true" %>才能使用。

     exception提供的三个方法:

      getMessage()

      getLocalizedMessage()

      printStackTrace(new java.io.PrintWriter(out))

    5)config 对象

     config 对象里存放着一些Servlet 初始的数据结构。

     config 对象实现于javax.servlet.ServletConfig 接口,它共有下列四种方法:

      public String getInitParameter(name)

      public java.util.Enumeration getInitParameterNames( )

      public ServletContext getServletContext()

      public Sring getServletName()

MVC

MVC:model+view+Controller(用户交互过程:输入,处理,输出)

EL&JSTL

  1. EL(expression language---表达式语言)

作用:为了网页美工设计跟Java语言类似,尽量减少节Java程序得依赖

  1. 语法

表达式  vs   EL表达式语言

<%=name%> <=> ${name}

  1. 文字

在EL表达式中,数字,字符串,布尔值和NUll都被指定为文字量

字符串可以用单引号或双引号定界。

例子:

 表达式                              值
   -----------------------------------------------------------------------
   ${-168.18}                         -168.18
   ${3.8e-18}                         3.8e-18           //科学计数法
   ${3.14159265}                      3.14159265                  
   ${"Hello JSP EL!"}                 Hello JSP EL!     等价于 <%="Hello JSP EL!"%>          
   ${'Hello JSP EL...'}               Hello JSP EL...
   ${true}  //can be TRUE?            true
   ${false} //can be FALSE?           false
   ${str==null}                       true              //布尔值的表达式

  1. EL运算符

  类别               运算符
   -------------------------------------------------------------
   算术运算符        +、  -、  *、  /(或 div)、    %(或 mod)
   关系运算符        ==(或 eq)、    !=(或 ne)、    <(或 lt)
                 >(或 gt)、     <=(或 le)、    >=(或 ge)
   逻辑运算符        &&(或 and)、   ||(或 or)、    !(或 not)
   验证运算符        empty  
     其中,empty 判断一个变量是否为null或是否包含有效数据:
     if(name==null||name.equlas(""))  等价于  ${empty name} ->    true

  1. 变量和JavaBean属性数据输出

表达式语言得查找变量的顺序:pageContext-request-session-application,所有范围都没有找到是赋值NUll

  1. 存取器

[]-->输出对象属性值,输出数组或集合中对应的索引值

.-->输出对象属性值

例子:

 <% SuperGirl girl = new SuperGirl();   girl.setName("Alice");
      session.setAttribute("girl",girl);  %>  //一定要有这句,设置成范围对象
   ${girl["name"]}
   ${girl['name']}   //拿属性时,单引跟双引等价
   ${girl.name}      //这种方法同样可以
    
   <%  List aList = new ArrayList();
       aList.add("China");  aList.add(girl);  aList.add(168.18);
       session.setAttribute("aList", aList); %>
   ${aList[0]}   //使用下标来取值 "China"
   ${aList[1]}   //取得对象的引用地址  还可以嵌套:${aList[1]['name']}
   ${aList[3]}   //下标越界,不会报错;只是取不出值
    
   <%  Map map = new HashMap();
       map.put("name", "Kitty");  map.put("age", "25");  map.put("date", new Date());
       map.put("aList", aList);
       session.setAttribute("map", map); %>
   ${map.date}     ${map["date"]}     //这两个等效
   ${map.aList[0]} ${map["aList"][0]} //这两个也等效
   ${map.aList[1][name]}              //嵌套取值

  1. 隐含对象

EL隐藏对象                         JSP隐藏对象
   --------------------------------------------------------------------------------
    pageScope                         pageContext
    requestScope                      request
    sessionScope                      session
    applicationScope                  appication
  
    param:               request.getParameter() 
    paramValues:         在提交表单里,有多个输入域同名getParameterValues
    header:              request.getHeader() 按照key-value的形式取出;value:是一个String类型的值
    headerValues          按照key-value的方式取出,但是headerValues里面的value是一个String类型的数组
    cookie                request.getCookies() 
    initParam             context param

  1. JSTL

减少Java代码,简化页面编写;封装功能,提高可重用性

JavaEE 规范把jstl作为规范的一部分只需导入jstl.jar , standard.jar

  1. core:核心标签库库

一般用途:在JSTL中,一般用途的标签主要是指出输出,设置变量,和错误处理。

  1. <c:set>
    1. 语法:<c:set value=“value, var=“varName” [scope=“{page|request|session|application}]/>

<c:ser value=“value target=“target” property=“propertyName”/>

这个标签用于在某个范围(page|request|session|application)里面设置特点的值

  1. <c:remove>
    1.  语法:
          <c:remove var="varName" [scope= "{page|request|session|application}"]/ >
          它的作用是删除某个变量或者属性。
        例子:
          <c:set value="10000" var="maxUser" scope="application"/>
          <c:set value="10" var="count" scope="session"/>
          <c:set value="10" var="count"/>
          ${maxUser}
          ${count}
          <c:remove var="maxUser" scope="application"/>
          <c:remove var="count" scope="session"/>
          ${maxUser}
          ${count}
  2. <c:out>

语法;<c:out value=“value”[escapeXml]=“{true|false}[default=“defaultValue”]/>

注意:escapeXml的作用是否将代码交给xml解析器解析,默认为入true

  1. <c:catch>

作用:捕获异常,类似于<%try{}catch{}%}

语法:<c:catch [var=“varName”]></c:catch>

<%try{}catch{}%>
  语法:<c:catch [var="varName"]>nested actions</c:catch>
  例子:
    <c:catch var="error"><% Integer.parseInt("abc"); %></c:catch>
    <% try{ Integer.parseInt("abc"); }catch(Exception error) {  } %> //等价
  
     <c:out value="${error}"/>
     <c:out value="${error.message}"/>
     <c:out value="${error.cause}"/>

  1. <c:if>

语法:  <c:if test="testCondition" var="varName"

    [scope="{page|request|session|application}"]>

       Body内容

    </c:if>  // 注:没有 else

  例子:

     <c:set var="age" value="16"/>

     <c:if test="${age<18}">

        <h1 align=center>您尚未成年,不能进入游戏中心!</h1>

     </c:if>

  1. <c:chose>

<c:set var="tax" value="5000" />

    <c:choose>

         <c:when test="${tax <=0}">

              您今年没有纳税!

         </c:when>

         <c:when test="${tax<=1000&&tax>0}">

           您今年缴纳的税款为${tax},加油!

         </c:when>

         <c:when test="${tax<=3000&&tax>1000}">

           您今年缴纳的税款为${tax},再接再励哦!

         </c:when>

         <c:otherwise>

           您今年纳税超过了3000元,多谢您为国家的繁荣富强作出了贡献!

         </c:otherwise>

     </c:choose>

  1. <c:forEach> 循环

 语法: <c:forEach [var="varName"] items="collection"  [varStatus="varStatusName"]

         [begin="begin"] [end="end"] [step="step"]>

</c:forEach>

Items:需要劫代的集合,var:劫代时取集合里的值;

  <c:forEach var="word" items="${aList}">

         <tr><td>${word }</td></tr>

       </c:forEach>

    </table> </center>

  

    <c:forEach items='${header}' var='h'>

       <tr>

         <td><li>Header name:<c:out value="${h.key}"/></li></td>

         <td><li>Header value:<c:out value="${h.value}"/></li></td>

       </tr>

    </c:forEach>

  1. <c:import>
    1. 相当于<jsp:include>

<c:import url="footer.jsp" charEncoding="GBK">

   <c:param name="name" value="Java"/>

</c:import>

  1. <c:url>

  用于构造URL,主要的用途是URL的重写。

    <c:url var="footer1" value="footer.jsp"/>

    <c:url var="footer2" value="footer.jsp" scope="page">

        <c:param name="name" value="Sofie"/>

    </c:url>

    <c:out value="${footer1}"/>

    <c:out value="${footer2}"/>

  

    <c:url var="next" value="next.jsp"/>

    <a href="${next}">next</a><br>

       等价于

    <a href="<c:url value='next.jsp'/>">next</a> //在 Html 里可嵌套 JSTL

  1. <c:rediect>

 <c:redirect url="${footer2}"/>

  例如:

    <c:url var="next" value="next.jsp"/>

    <c:redirect url="${next}"/>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值