【JSP详解】
目录JSPJSP语法<% %> <%= %> <%! %>JSP指令<%@ page %> <%@ taglib %> <%@ include %>JSP行为<jsp:include /> <jsp:forward /> <jsp:userBean /> &...
目录
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文件的流程:
(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. 九大内置对象
JSP | Servlet |
page | this |
config | servletConfig |
application | servletContext |
request | HttpServletRequest |
response | HttpServletResponse |
session | HttpSession |
exception | Exception |
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 获得内容
更多推荐
所有评论(0)