JSP知识总结

一.JSP简介

  • JSP(java server page),java服务器页面。是一种动态页面技术,本质上是一种简化版的Servlet,其目的是将表示逻辑从Servlet中分离出来
  • JSP最大的优势在于它的跨平台特性,可实现一次编译,处处运行

二.JSP语法

jsp页面是在普通的HTML页面中嵌入java程序段。

1.JSP表达式

普通表达式

  • 普通表达式用于向页面输出信息
  • 语法:<%= 此处写表达式 %>,如 <%= 5+6 %>

声明表达式

  • 用于在jsp页面中定于全局变量或者方法,相当于java代码中的属性和方法。
  • 语法:<%! 声明标量或者方法的代码 %> ,如 <%! String str =”abc”; %>

JSP代码段

  • jsp代码段,指在jsp页面的java代码或脚本代码,会在页面请求处理期间执行。java代码可以实现定义变量、流程控制等功能;脚本代码是指通过jsp内置对象在页面中输出内容、处理请求和响应请求、访问session等。
  • 语法:<% java代码或者脚本代码 %>

JSP中EL表达式

  • EL表达式是为了更加方便的编写jsp页面而存在的。
  • 其基本语法为: ${表达式} ,之后会有详细介绍

2.JSP注释

  • JSP注释语法 :<%–这里是jsp注释 –%>

  • java注释在jsp页面中的应用:在jsp代码段中可任意使用java注释,比如单行注释、多行注释、文档注释都可以使用。

三.JSP三大编译指令和七大动作指令

三大编译指令

  • jsp编译指令是通知jsp引擎的信息,不会直接生成输出,编译指令有默认值。
  • 编译指令语法为:<%@ 编译指令名 属性名1=”属性值” 属性名2=”属性值” … %>
  • 三大指令

    1. page指令

      1. language属性
      
      设置jsp页面使用的语言,目前只支持Java,默认值为java
      
      
          <%@ page language="java" %>  
      
      
      2. extends属性
      
      设置jsp页面继承的java类,jsp页面在执行之前都会被服务器解析成Servlet,而Servlet是由java类定义的,所以jsp和Servlet都可以继承指定的父类,该属性不常用,可能影响服务器的性能优化。
      
      
      3. import属性
      
      设置JSP导入的类包,嵌入的java代码片段需要导入相应的类包。
      
      
          <%@ page import="java.util.*" %>  
      
      
      4. pageEncoding属性
      
      指定页面编码格式,如果设置为ISO-8859-1,则页面不支持中文,通常设置为GBK或者UTF-8
      
      
          <%@ page pageEncoding="GB18030"%>  
      
      
      5. contentType属性
      
      设置页面的MIME类型和编码
      
      
          <%@ page contentType="text/html; charset=UTF-8"%>  
      
      
      6. session属性
      
      指定页面是否使用HTTP的session会话对象,默认值为true
      
      
          <%@ page session="true"%>  
      
      
      7. buffer属性
      
      设置页面out输出对象的缓冲区大小,默认为8KB,单位只能使用KB,建议使用8的倍数作为属性值
      
      
          <%@ page buffer="128kb"%>  
      
      
      8. autoFlush属性
      
      设置页面缓存满时,是否自动刷新缓存,默认为true,如果设置成false,则缓存满时会抛出异常
      
      
          <%@ page autoFlush="false"%>  
      
      9. isErrorPage属性
      
      可以将当前页面设置成错误处理页面来处理另一个JSP页面的错误,也就是作为异常处理页面
      
          <%@ page isErrorPage="true"%>  
      
      10. errorPage属性
      设置当前页面的异常处理页面,对应的异常处理页面isErrorPage必须设置为true,如果设置该属性,那么在web.xml文件中定义的任何错误处理页面都将被忽略,优先使用该属性定义的异常处理页面。
      
          <%@ page errorPage="error/registerErrorPage.jsp"%>  
      
    2. include

      include指令可以将一个外部文件嵌入到当前jsp文件中,同时解析这个页面中的jsp语句。include命令既可以包含jsp页面也可以包含静态文本。
      
      <%@ include file="header.jsp"%>
      <%@ include file="text.txt"%>
      
    3. taglib指令

      taglib指令用于引入一些特定的标签库,语法格式:
      
      <%@ taglib prefix="tagPrefix" uri="tagLibraryURI" %>
      

七大动作

  1. forward

    用于将页面转发到另外的页面,可以使html、jsp或者容器中的servlet;如果转发的时候需要携带参数,可以使用<jsp:param></jsp:param>进行设置。
    示例代码如下:
    此处为index页面:
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
        <jsp:forward page="login.jsp"> <%-- 这里表示将页面转发到login.jsp页面--%>
            <jsp:param value="test" name="username" />
            <jsp:param value="123456" name="password" />
        </jsp:forward>
    在login.jsp中可以使用getParameter方法获取传入的参数值:
    
    <%
      String name=request.getParameter("username");
      String pwd=request.getParameter("password");
      out.println(name);
      out.println("<br>");
      out.println(pwd);
    %>
    
  2. include

    include动作用于包含某个页面,但不会导入被include页面的编译指令。可以通过param指令传递参数:

    新建一个index.jsp
    
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <jsp:include page="head.html"></jsp:include>
    <jsp:include page="body.jsp">
       <jsp:param value="#1d99f6" name="bgcolor"/>
    </jsp:include>
    </html>
    
    body.jsp
    
    <body bgcolor="<%=request.getParameter("bgcolor")%>">
    </body>
    
  3. useBean、setProperty、getProperty

    这三个指令与javaBean相关,useBean用于在jsp页面中初始化一个Java实例;setProperty为javaBean实例的属性赋值;getProperty属性用于输出javaBean实例的属性。
    如果jsp页面中需要重复使用某段代码,可以把这段代码定义成java方法,然后多个jsp页面调用该方法达到页面复用的效果。

    useBean的语法格式如下:
    
    <jsp:useBean id="beanID" class="java包名.类名" scope="page|request|session|application"></jsp:useBean>
    
    
    如:在ucas.ac.cn.jspstudy包下创建一个Student类,有name、age、stuId三个属性和相应的setter和getter方法。在jsp页面中创建javaBean实例:
    
    <%--创建Student对象,对象名为stu1 --%>
    <jsp:useBean id="stu1" class="ucas.ac.cn.jspstudy.Student" scope="page"></jsp:useBean>
    
    setProperty方法用于为javaBean实例的属性赋值:
    
    <%--给stu1的name属性赋值 --%>
    <jsp:setProperty property="name" name="stu1" value="张三"/>
    <%--给stu1的age属性赋值 --%>
    <jsp:setProperty property="age" name="stu1" value="20"/>
    
    getProperty用于输出javaBean实例的属性值:
    
    <%--输出stu1的name值 --%>
    <jsp:getProperty property="name" name="stu1"/>
    <%--输出stu1的age值 --%>
    <jsp:getProperty property="age" name="stu1"/>
    
  4. plugin

    plugin主要用于下载服务器端的javaBean或applet到客户端执行,现在很少使用。

  5. param

    param动作用于设置参数值,本身不能单独使用,需配合forward、include、plugin使用。

include指令和include动作的区别

  1. 从语法上区分

    • include指令,通过file属性来指定被包含的页面;include指令中的file属性不支持任何形式的表达式。
    • include动作,通过page属性来制定被包含的页面,page支持JSP表达式。
  2. 从jsp引擎的处理上区分

    • include指令,被包含的文件被原样复制到jsp页面,然后jsp引擎进行编译;因此使用include指令后,最终编译后的文件只有一个。
    • include动作,page标识的页面被执行时,程序会将请求转发到page标识的页面,并将执行结果输出到浏览器,然后返回jsp页面继续执行下面的代码。因为服务器执行的是两个文件,所以jsp引擎会分别对这两个文件进行编译。
  3. 从包含方式进行区分

    • include指令,最后服务器执行的是jsp编译的一个最终的class文件。如果file下的文件发生变动,那么这个class文件代码也必然发生变化,此时服务器需要重新编译主class文件。因此include指令包含,称为静态包含。
    • include动作,通常包含那些需要改动的文件。此时服务器执行的是两个文件,被包含的文件改变不会影响到主文件,因此服务器只需要重新编译改动的文件即可。而对被包含文件的编译是在执行时才进行的,也就是说只有当include动作被执行时,该动作标识的文件才会被编译,否则不会被编译,因此这种包含叫动态包含。

四.JSP九大隐式对象和四大域对象

九大对象

  • application对象

jsp、servlet之间不能相互调用,为了解决jsp和servlet之间数据交换的问题,web服务器提供了四个对象,分别是application、session、request、page。放入application对象中的数据对整个Web应用有效,一旦jsp、servlet将数据放入application对象之中,该数据可以被该应用下其它jsp、servlet访问。

  • config对象

config对象代表当前jsp配置信息,但jsp页面通常无需配置,该对象在jsp页面中较少使用,在servlet中使用较多。

  • exception对象

exception对象是Throwable的实例,代表jsp脚本中产生的错误和异常,是jsp页面异常机制的一部分。把page指令的isErrowPage属性设置为true时可以访问exception内置对象。

  • out对象

out对象是javax.servlet.jsp.JspWriter的实例,代表jsp的输出流,永于输出内容形成html页面。
out对象一些方法:

out.println():输出完成后会换行,换行效果在页面中不显示只在源码中显示
out.print():输出后不换行
out.getBufferSize() :输出缓冲区大小
out.getRemaining() :输出剩余缓冲区大小
out.clear():清空缓冲区,不将数据发送至客户端
out.clearBuffer():将数据发送至客户端,再清空缓冲区
out.flush():输出缓冲区内容
out.close():关闭输出流
  • page对象

代表该页面本身,通常没有太大用处。

  • pageContext对象

代表页面上下文,主要用于jsp之间的共享数据,使用pageContext对象可以访问page、request、session、application范围的变量。

  • request对象

request对象是jsp中的重要对象,每个对象封装着一次用户请求,并且所有对请求参数都被封装在request对象中,request对象是获取用户请求参数的重要途径。request对象的一些方法:

request.getMethod():获取请求的方法名,如get,post.
request.getRequestURI():获取请求资源名.如请求访问:/jspstudy/08/request.jsp
request.getProtocol():获取请求使用的协议.如:HTTP/1.1
request.getServerName():获取请求使用的服务器,如:localhost.
request.getServerPort():获取请求使用的服务器端口,如:8080
request.getRemoteAddr():获取客户端的ip地址.
request.getRemoteHost():获取客户端主机.
request.getParameter():获取传递过来的参数值.
request.getParameterValues():请求参数有多个值时,该方法返回多个值组成的数组.
request.setAttribute():

测试代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>request方法</title>
</head>
<body>

<form action="" method="post">
  username:<input type="text" name="username"><br/>
  <input type="submit">
  请求方法名:<%=request.getMethod() %><br/>
  请求的资源:<%=request.getRequestURI() %><br/>
  请求使用的协议:<%=request.getProtocol() %><br/>
  请求使用的服务器:<%=request.getServerName() %><br/>
  请求使用的服务器端口:<%=request.getServerPort() %><br/>
  客户端的IP地址:<%=request.getRemoteAddr() %><br/>
  客户端主机:<%=request.getRemoteHost() %><br/>
  表单提交过来的值:<%=request.getParameter("username") %><br/> 
</form>
</body>
</html>

输出:

请求方法名:POST
请求的资源:/jspstudy/08/request.jsp
请求使用的协议:HTTP/1.1
请求使用的服务器:localhost
请求使用的服务器端口:8080
客户端的IP地址:0:0:0:0:0:0:0:1
客户端主机:0:0:0:0:0:0:0:1
表单提交过来的值:test
  • response对象

response对象用于服务器对客户端的响应,大部分时候使用out对象向页面输出,但是out对象时JspWriter对象的实例,JapWriter时Writer的字类,Writer是字符流,因此out对象无法输出非字符内容。jsp页面需要输出图片、pdf文档、excel等非字符对象时需要使用response作为响应输出.response还可以用于重定向,向客户端增加cookie.

  • session对象

session对象代表一次用户会话,一次用户会话的含义是:从客户端连接服务器开始,到客户端与服务器断开为止,这个过程就是一次会话。
session通常用于跟踪用户的会话信息,如判断用户是否登录,购物车中跟踪用户购买的商品。
session范围的属性可以在多个页面点跳转之间共享,一旦关闭浏览器,session结束,session范围内的属性就会全部丢失。

四大域对象

  • ServletContext即application,作用域为一次服务。
  • HttpSession即session,作用域为一次会话。
  • HttpServletRequest即request,作用域为一次请求。
  • PageContext即page,作用域为当前页面,可获取其它八大隐式对象,从而获取所有域中的数据。

五.JSP执行流程图

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值