java之jsp

java之jsp

什么是jsp:

jsp的全称是 java server pagejava的服务器页面。

JSP是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。

—百度百科

为什么学习JSP

jsp技术可以很好的解决Servlet程序在回传html页面时代码过于繁锁的问题。也不便于开发,调试,以及后期维护。

jsp的本质是什么

jsp的本质,就是一个Servlet程序。

当我们第一次访问jsp页面的时候。我们会现。Tomcat目录下work目录中,中会产生一些文件。打开java源代码,它是一个类的源文件,并且继承了HttpJspBase这个类。

jsp的编译过程

  1. 客户端发送请求给web容器zhi
  2. web容器将jsp首先转译成servlet源代码dao
  3. web容器将servlet源代码编译成.class 文件
  4. web容器执行.class 文件
  5. web容器将结果响应给客户端

注意如果用浏览器直接打开jsp文件则显示的是源码。

jsp生命周期

几个阶段:

  • 编译阶段:

    servlet容器编译servlet源文件,生成servlet类

  • 初始化阶段

    加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法

  • 执行阶段

    调用与JSP对应的servlet实例的服务方法

  • 销毁阶段

    调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例

jsp的三种语法

jsp头部的page指令

page指令可以设置jsp页面的一些属性。

<%@page  contentType="text/html;charset=utf-8" language="java"%>
属性作用
language设置jsp翻译之后转成为什么语言。值只能是java。
contentType设置当前jsp页面返回的数据类型。同时也是response.setContentType()方法的参数值。
pageEncoding设置jsp文件本身的字符集
import它可以用来给jsp页面导入需要的包和类
autoFlush设置当out缓冲区满了之后。是否自动刷新缓冲区,默认值是true。
buffer设置out缓冲区的大小,默认是8kb
errorPage设置当jsp页面执行时,出错。自动跳转的错误页面路径。
isErrorPage设置当前jsp页面,是否是错误页面。默认值是false,设置为true,可以启动Exception异常对象。
session设置访问当前jsp页面的时候,是否会创建Session对象。默认是true。
extends这是预留给服务器厂商使用的属性。可以修改jsp页面翻译之后生成的类继承哪个类

jsp中的三种脚本

声明脚本(很少用)

作用是:可以在jsp页面中定义各种代码(跟在类中定义代码一样)
声明脚本的格式是:

<%! 
代码 
%>
  1. 定义全局变量。
  2. 定义static静态代码块
  3. 定义方法
  4. 定义内部类
表达式脚本(常用)

表达式脚本的作用:可以在jsp页面上输出数据。

表达式脚本的格式是:<%=表达式 %>

作用:

  1. 输出整型

  2. 输出浮点型

  3. 输出字符串

  4. 输出对象

特点:

  1. 表达式脚本都会被翻译到_jspService方法中

  2. 表达式脚本都会被翻译成为out.print进行输出

  3. 表达式脚本中的表达式不能以分号结束

  4. 由于表达式脚本是翻译到了_jspService方法中,所以在_jspService方法中的对象都可以直接使用

代码脚本(常用)

作用可以编写任意在方法体内书写的java代码。

格式:<% 代码 %>

特点:

  1. 代码脚本也都被翻译到_jspService方法中

  2. 代码脚本可以书写任意在_jspService方法中可以写的代码。

  3. 代码脚本可以由多个合成一个完整的java语句。

    1. 代码脚本----if 语句
    2. 代码脚本----for 循环语句
    3. 翻译后java文件中_jspService方法内的代码都可以写
<%--jsp声明 --%>
<%! int anInt =15; %>


<%-- jsp表达式<%@attribute name="" type="" required=""%>--%>
<%=  "你家"%>

<%--jsp代码域 || 脚本片段--%>
<%
    for (int i = 0; i < 10; i++) {
        System.out.println(1);
    }
%>

jsp中的三种注释

html注释

html注释翻译之后都是out.write输出到客户端。

客户端浏览器,右键查看源代码是可以看到注释内容

java注释

// 单行

/* 多行 */

java注释翻译之后会在Servlet源代码中可以直接看到。

jsp注释

​ <%-- jsp 注释 --%>

​ jsp注释翻译的时候会被完全忽略掉。

jsp九大内置对象

对象简介
out用于向客户端、浏览器输出数据。
request封装了来自客户端、浏览器的各种信息。
response封装了服务器的响应信息
exception封装了jsp程序执行过程中发生的异常和错误信息。
config封装了应用程序的配置信息。
page指向了当前jsp程序本身
session用来保存会话信息。也就是说,可以实现在同一用户的不同请求之间共享数。
application代表了当前应用程序的上下文。可以在不同的用户之间共享信息。
pageContext提供了对jsp页面所有对象以及命名空间的访问。

jsp四大域对象

对象简介
pageContext在jsp页面范围内有效
request一次请求(转发可用)
session同一个会话中(打开浏览器请求服务器,至此有了一个会话对象,只要浏览器不关)
application整个Web工程。(只要工程不停止)

四个域对象,从域的大小来排序。从小到大分别是:

pageContext reqeust session application

四个域对象,在使用的时候优先顺序(由低到高)分别是(对内存的使用更合理):

pageContext reqeust session application

jsp的常用标签

jsp静态包含

静态包含特点:

1、静态包含的jsp页面不会被翻译成为servlet源代码。

2、静态包含的jsp页面内容会被原封不动地拷贝到被包含的位置输出。

<%--
<%@ include file="" %> 是静态包含file 属性设置你要包含的jsp页面的路径静态包含中的斜杠表示到http://ip:port/工程名/		映射到代码的WebContent目录
   	 --%>
<%@ include file="/include/footer.jsp" %>

jsp标签-动态包含

动态包含的特点:

  1. 动态包含会翻译被包含的jsp页面成为Servlet源代码。

  2. 动态包含是通过调用JspRuntimeLibrary.include(request, response, “/include/footer.jsp”, out, false); 去执行被包含jsp页面的Servlet程序。

  3. 动态包含还可以传递参数(极少使用)

 <%--
		 	<jsp:include page="/include/footer.jsp"></jsp:include> 是动态包含
		 	page 属性设置要包含的jsp页面的路径
		 	静态包含中的斜杠表示到http://ip:port/工程名/		映射到代码的WebContent目录
		  --%>
		 <jsp:include page="/include/footer.jsp"></jsp:include>

jsp标签-转发

<%--
			<jsp:forward page="/Context2.jsp"></jsp:forward> 
			这是jsp中的转发标签,功能跟以下代码完全一致
			request.getRequestDispatcher("/Context2.jsp").forward(request, response);
			
			page属性就是设置转发的路径地址。
			
			转发中的斜杠表示到http://ip:port/工程名/		映射到代码的WebContent目录
		 --%>
		<jsp:forward page="/Context2.jsp"></jsp:forward>

静态包含和动态包含的区别

静态包含动态包含
是否生成java文件不会会翻译
service方法中的区别把被包含的jsp页面中的内容原封不动的拷贝到包含的jsp页面中执行。是通过调用JspRuntimeLibrary.include代码来执行被包含的Servlet程序。
是否可以传递参数不传递可以传递
编译次数1n+1(n是你包含了几个jsp页面)
适用范围仅适用于包含那些jsp页面中,只有输出html页面数据的jsp页面。适合于包含那些在jsp页面中有大量java脚本的jsp页面。

随着整个JavaEE技术体系的不断升级,jsp页面的功能慢慢的越来越被弱化。jsp页面中慢慢的就只有一件事件可做,就是输出html页面数据。

所以对于静态包含和动态包含而言。慢慢地就只有使用静态包含。(静态包含会比动态包含快一点点)

<%--本质是一个--%>
<%@include file="common/header.jsp"%>
<h1>主体</h1>
<%@include file="common/foot.jsp"%>

<%--jsp:   本质还是三个--%>
<jsp:include page="common/header.jsp" />
<h1>主体</h1>
<jsp:include page="common/foot.jsp" />

什么是Listener监听器?

Listener监听器是JavaWeb三大组件之一。

javaWeb的三大组件分别是:Servlet程序(最重要)、Listener监听器、Filter过滤器(其次)。

监听器顾名思义,就是用来监听某个事物状态的变化 。然后在变化的时候,反馈结果。

ServletContextListener监听器

  1. ServletContextListener监听器,它可以监听ServletContext对象创建和销毁。

  2. ServletContextListener在ServletContext对象创建的时候会调用一个方法反馈用户。

  3. 在ServletContext对象销毁的时候,也会调用一个方法反馈用户。

  4. 如何创建ServletContextListener监听器监听ServletContext对象

    1. 创建一个类去实现ServletContextListener
    2. 实现它里面的两个反馈方法(一个是创建的时候调用,一个是销毁的时候调用)
    3. 到web.xml中去配置这个监听器。
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class ServletContextListenerImpl implements ServletContextListener {
    /*
    * 在ServletContext对象创建的时候调用。
    * web工程启动的时候调用*/

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("ServletContext对象创建了");
    }
    /*
     * 在ServletContext对象销毁的时候调用。
     * web工程启动的时候销毁*/

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("ServletContext对象销毁了");
    }
}

web.xml文件配置如下:

<listener>
  <!-- 配置监听器全类名 -->
  <listener-class>ServletContextListenerImpl</listener-class>
</listener>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值