目录

JSP

JSP语法

<% %> <%= %> <%! %>

JSP指令

<%@ page %> <%@ taglib %> <%@ include %>

JSP行为

<jsp:include /> <jsp:forward /> <jsp:userBean /> <jsp:setProperty /> <jsp:getProperty />

JSP九大内置对象、四大作用域

-----九大内置对象----
page、config、application、request、response、session、exception、out、pageContext

-----四大作用域-------
page、request、session、pageContext

 

一、JSP

JSP(Java Server Pages):是以Java语言为基础的动态网页开发技术。

JSP特点:在html源码中嵌入java代码

JSP就是Servlet(区别在于jsp是先部署后编译,而servlet是先编译后部署

我们在JSP写的所有html代码,都会被转换为pageContext.getOut.write(html)代码来输出

 

Tomcat服务器解析jsp文件的流程:

Caption

(1)tomcat获得JSP文件后,先将JSP转成servlet,变成xxx.java(servlet源码)

(2)tomcat将java文件编译成class文件

(3)tomcat运行class文件,并将结果输出到浏览器

【注意】jsp 生成java源码,默认第一次生成,之后直接执行,除非内容修改,具体点说,由于JSP只会在客户端第一次请求的时候被编译,因此第一次请求JSP时会感觉比较慢,而之后的请求因为不会编译JSP,所以速度就快多了,如果将Tomcat保存的JSP编译后的class文件删除,Tomcat也会重新编译JSP。在开发Web程序的时候经常需要修改JSP,Tomcat能够自动检测到JSP程序的改动,如果检测到JSP源代码发生了改动,Tomcat会在下次客户端请求JSP时重新编译JSP,而不需要重启Tomcat,这种自动检测功能默认是开启的,检测改动会消耗少量的时间,在部署web应用程序的时候可以在web.xml中将它关掉。因为JSP就是servlet,那么生命周期也就是跟serlvet一样。

 

二、JSP语法

1、使用<% 编写java代码 %>,中间java代码必须遵循Java语法

2. 使用<%=xxx %>来输出结果

使用<%=result %>来输出结果,servlet中就会将其转换为out.print(result)进行输出。输出各种类型数据:int、double、boolean、String、Object等

3. JSP中声明方法与属性(全局变量)  使用 <%!  方法、属性%>

<%!
    String global="global";
		
    String getGlobal(){
        return global;
    }
%>
		
<%= getGlobal() %>        

三、JSP指令

指令用来申明JSP页面的一些属性,比如编码方式,文档类型。我们在servlet中也会申明我们使用的编码方式和响应的文档类型的,而JSP就是用指令来申明。

JSP指令格式:

<%@ directive {attribute=value}* %>

(1)directive:指令名称,例如page指令

(2)attribute=value:紧跟指令名称后面的就是各种属性,以键值对的形式书写

(3)*:代表后面能跟0个或多个属性。

 

1. page指令:用来声明JSP页面的属性等

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!-- 当然属性有很多,这里面就不一一列举了-->

2. include指令

<%@ include file="文件路径"%>

3. taglib指令

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

   作用:用来指明JSP页面内使用的JSP标签库,taglib指令有两个属性,uri为类库的地址,prefix为标签的前缀

 

四、JSP行为

JSP内置的标签就被称为JSP行为(JSP Actions)

格式:

<jsp:elements {attribute="value"}* />  

(1)elements:行为的名称,

(2)attribute=value:使用键值对来编写属性

(3)*:能指定0个或多个属性对

 

1. <jsp:include />行为

作用是跟include指令一样的,唯一的区别就在于:

include指令是将被包含的文件的源码加入到了本JSP程序中,然后在进行编译,属于静态包含

include行为只是将被包含的文件的运行结果包含进自己。属于动态包含

2. Java bean行为

是一组与Java Bean 相关的行为,包括useBean行为setProperty行为getProperty行为

(1)useBean行为  

<jsp:useBean id="beanObject" class="className" scope="Value">

   作用:在jsp中定义一个java bean对象

    id:指明Java Bean对象的名称,JSP中可以使用该名称引用该Java Bean对象,相当于给new出来的对象取一个变量名,

 class:Java Bean类的全名

 scope:该java bean对象的作用范围,可以写的就四个,也就是JSP的四大作用域,page、request、session、application

(2)setProperty行为

<jsp:setProperty name="beanName" property="propertyName" value="">

(3)getProperty行为

<jsp:getProperty name="beanName" property="propertyName" />

3. <jsp:forward />行为 

实现请求转发功能,Servlet中通过request.getRequestDispatcher("someServlet").forward(request,response);而在JSP中也能够实现相同的功能,只不过用的是<jsp:forward />行为,实际上forward行为就是对其进行了封装。

<jsp:forward page="someServlet">

   <jsp:param name="param1" value="value1"/>

   <jsp:param name="param2" value="value2"/>

</jsp:forward>

  

五、JSP隐藏的九大内置对象和四大作用域

1. 九大内置对象

JSPServlet
pagethis
configservletConfig
applicationservletContext
requestHttpServletRequest
responseHttpServletResponse
sessionHttpSession
exceptionException
out 
pageContext 

【提示】标记了红色的对象就是JSP独有的,其他的都是Servlet中的老东西。

2. 四大作用域

page:只能在当前JSP页面使用,如果不在JSP页面,那么就会失效

request:这个前面学过,A页面请求转发到B页面,那么使用的是同一个request,那么A,B页面都算是request的作用域,也就                     是通过请求转发的页面都是其作用域

session:同一个session的范畴之内(session id识别)。

application:作用域是最广的,它代表着整个Web应用的全局变量

 

pageContext对象:重点

这个功能就比较强大了,基本上什么他都有,因为是它是JSP页面的管理者(上下文),所以JSP中的内置对象呀,它统统能够获得,下面介绍它的api。

1、获得其它八大内置对象 getXxx()

    pageContext.getOut();  //获得out对象

    pageContext.getApplication();  //获得application对象

    等等....

2、对作用域的属性进行操作(四大作用域)

    对默认作用域的属性进行操作。page

    pageContext.getAttribute(name);  //获得page作用域数据

    pageContext.setAttribute(name,value);  //给page作用域设置内容

    pageContext.removeAttribute(name);  //给page作用域移除内容

3、对指定作用域的属性进行操作

    getAttribute(name,scope);  //获得 指定作用域中的数据

    setAttribute(name,value);  //给指定作用域设置内容

    removeAttribute(name ,scope)  移除指定作用域的内容(page/request/session/application)

4、提供作用域常量

    PageContext.PAGE_SCOPE  page

    PageContext.REQUEST_SCOPE  request      

    PageContext.SESSION_SCOPE  response

    PageContext.APPLICATION_SCOPE  application

5、一次获得指定名称内容

    findAttribute(name);  //依次从page、request、session、application 获得内容

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐