JSP基础知识总结

本文详细介绍了JSP的基础知识,包括JSP的基本语法、与Servlet的区别、运行原理及不能取代Servlet的原因。讲解了JSP的三个指令:page、Include和taglib,以及六大页面动作。此外,还阐述了JSP的四大域对象(page、request、session、application)及其作用范围和九大默认对象。通过对JSP的深入解析,帮助读者更好地理解和运用JSP。

JSP基础

jsp工作原理:web服务器(tomcat\jboss等)先把jsp文件翻译成servlet的java文件,然后编译成字节码文件,就是.class文件,当客户端访问的时候,服务器直接装载jsp对应的servlet的字节码文件。

基本语法

jsp的脚本
小脚本的格式:

<%
java代码
%>

表达式格式:

<%=表达式 %>    

通过对编译后的java文件分析发现,表达式脚本的底层就是<% 定义变量的语句; out.write(变量) %>

输出是相同的:

<% int i=10;
out.print(i);
%>
<%=i%>

声明格式:

  • <%! %> 表示定义全局变量和静态代码块,也可以声明方法。

  • 成员变量我们直接在<% %>中定义即可。

  • <%! %>是我们用来声明全局变量、创建静态代码块、声明方法的地方。

  • <% %>相当于是一个方法,所以不能在这里声明方法,在这里定义的变量也是局部变量。

Jsp与servlet的区别

  • 1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)

  • 2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.

  • 3.Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.

Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。

jsp的运行原理

  • 1、客户端发起请求http://localhost:8080/pp/index.jsp 设计了以<welcome-file-list>的配置

  • 2、请求到达服务器[IP地址和端口号]

  • 3、服务器进行请求资源的定位 /pp/index.jsp,如果不存在则直接对客户端响应404报错

  • 4、如果存在,因为后缀是.jsp,所以服务器会调用jsp引擎将jsp文件转换为Servlet类文件[.java]

  • 5、Tomcat调用Servlet引擎编译生成的.java文件,得到.class的字节码文件

  • 6、Servlet引擎创建Servlet对象生成响应[html文档]

  • 7、客户端接收到响应的html文档进行渲染显示

  • 8` jsp是不能直接运行,jsp究其本质就是servlet

为什么jsp不能取代servlet?

  • 1.当前,Java程序员还比较少。
  1. JSP程序调试困难。jsp页面首先被转化为一个.java文件(servlet),然后再被编译。这样, 出错信息实际上指向的是经过转化的那个 .java文件而不是jsp本身。 例如在.jsp文件第一行的错误可能被显示为第20行。如果试图通过反跟踪来解决这个问题 有时会使结果显得很滑稽。(但是,在Resin的引擎中,错误已经可以指向.jsp文件的出错行。) 你也可以使用一些集成设计工具IDE如VAJ或JDeveloper,但这有悖于JSP简单易用这一基本特性。
  2. 数据库连接并不那么容易。大多数servlet引擎并不支持本地的缓冲池连接。 因此,不得不写很多代码来完成这项工作。
  3. 很难选择合适的servlet引擎。没有一个独立的组织来对各种引擎提供独立的benchmark测试。 提供商当然地对他们自己的产品提供了benchmark测试,但结论通常以数据形式给出, 但均回避了稳定性。

JSP的三个指令

JSP相关技术,觉的要掌握的点还是非常多的,包括三个指令,六个动作,九个内置对象还有四大域对象等。下面就简单写一下我对三个指令的理解。

JSP的三个指令:JSP指令是为JSP引擎而设计的,他们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分

1. page 指令

作用 : 用于定义JSP页面的各种属性,告诉tomcat服务器如何翻译JSP文件。

属性:

  • ① import 和java中的import 是一样的
<%@ page import="java.util.Date,java.util.List"%>
<%@ page import="java.util.Date"%>
<%@ page import="java.util.List"%>

JSP会自动导入以下的包:

import java.lang.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;  
  • ② session(会话): 是否会自动创建session对象。默认值是true;

  • ③ buffer: JSP中有javax.servlet.jsp.JspWriter输出字符流。设置。输出数据的缓存大小,默认是8KB。

  • ④ errorPage: 如果页面中有错误,则跳转到指定的资源。
    errorPage="/uri" 如果写“/”则代表当前应用的目录下,绝对路径。
    如果不写“/”则代表相对路径。

  • ⑤ isErrorPage: 是否创建throwable对象。默认是false;

  • ⑥ contentType: 等同于response.setContentType(“text/html;charset=utf-8”);

  • ⑦ pageEncoding: 告诉JSP引擎要翻译的文件使用的编码。

  • ⑧ isELIgnored: 是否支持EL表达式。 默认是false

2. Include指令:

作用:在当前页面用于包含其他页面。

静态包含: 把其它资源包含到当前页面中,代码格式:

<%@ include file="/include/header.jsp" %>

动态包含:

<jsp:include page="/include/header.jsp"></jsp:include>

3. taglib指令

作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

六大页面动作

Include、 Forward、 UseBean、 GetProperty、 SetProperty、 Plugin

下面是每个动作的具体含义:

  • jsp:include:在页面被请求的时候引入一个文件。
    jsp:useBean:寻找或者实例化一个JavaBean。
    jsp:setProperty:设置JavaBean的属性。
    jsp:getProperty:输出某个JavaBean的属性。
    jsp:forward:把请求转到一个新的页面。
    jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。

存放数据的4大范围

  • page只在当前页面范围内有效
  • request可以在请求转发时在多个页面之间共享数据
  • session在当前应用中针对当前用户共享数据
  • application当前应用中跨用户数据共享

9大默认对象

  • page this 封装页面对象,该对象代表了正在运行的由JSP文件产生的类对象,相当于this。一般情况下不建议使用该对象

  • request ServletRequest,封装请求对象,代表的是来自客户端的请求HttpServletRequest。包括从GET/POST请求传递过来的参数

  • response ServletResponse,封装响应对象,代表的是对客户端的响应HttpServletResponse。网页传回客户端的信息

  • application ServletContext,封装应用程序对象,负责提供应用程序在服务器中运行时的一些全局信息,是一个容器级的共享对象数据

  • session HttpSession 封装会话对象,代表服务器与客户端所建立的会话,是javax.servlet.http.HttpSession接口。当需要在不同的JSP页面中保留客户信息的情况下用于跟踪用户状态。在客户端允许时,使用Cookie支持;否则一般使用URL重写来支持。即使不存在session引用,这个对象也是自动绑定的。但有一个例外,这就是如果你用page指令的session属性关闭了会话,此时对session变量的引用将导致JSP页面转换成Servlet时出错

  • config ServletConfig 封装代码配置对象,该对象提供一些该Servlet的配置信息,是javax.servlet.ServletConfig接口的实现

  • exception 异常信息的对象,封装异常对象,代表了JSP文件运行时所产生的并且没有被捕获的例外对象,此对象不能在一般JSP文件中直接使用,而只能在使用了<%@ page isErrorPage="true "%>的JSP文件中使用

  • out 等价于response.getWriter() 封装输出对象,用来向客户端自定义输出内容,代表了向客户端发送数据的对象,是javax.servlet.jsp.JspWriter接口的实现。JspWriter是带缓冲的版本

  • pageContext 包装页面上下文对象,代表的是当前页面运行的一些属性,例如可以获取session、request、response、exception、ServletContext和ServletConfig的引用。是javax.servlet.jsp.PageContext接口的实现

四大域对象:

page request session application

1.page:

page是指当前页面,只对当前jsp页面有效

  • page里面的变量没法从index.jsp传递到test.jsp,只要页面跳转了,它们就不见了

2.request

:是指从http请求到服务器处理结束,返回响应的整个过程,在这个过程中使用forward方式跳转多个jsp,在这些页面里你都可以使用这个变量.

  • request里的变量可以跨越forward的前后两页,但是只要重新刷新页面,就开始重新计算

3.session:

有效范围当前会话,从浏览器的打开到浏览器的关闭

  • session和application里的变量一直在累加,但是只要浏览器关闭,session对象就不见了
    (1)设置session会话
    HttpSession session=request.getSession()
    session.setAttribute(“user”,ub);
    (2)设置与上一次最长交互时间间隔 单位是秒
    session.setMaxInactiveInterval(10)
    (3)使session失效
    session.invalidate()

4.application:

它的有效范围是整个应用

  • 作用域里的变量,它的存活时间是最长的,如果不进行手工删除,它们就一直可以使用
    application里的变量一直在累加,除非重启tomcat,否则一直变大,作用域规定的是变量的有效期限
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值