JSP全称Java Server Pages,称为java的动态服务器端网页技术。
使用jsp可以在html中嵌入java代码和jsp标签。从而可以实现根据不同的请求展现一些不同数据的效果同样需要依赖web容器才能运行,下文会了解它的实现原理<% java代码片段%>
可以在里面编写Java代码,使用最多
<%=java表达式内容%>
可以进行数据的输出,表达式的结果就会输出到页面上
<%!java代码%>
属性声明和方法声明都需要写在这个标签里
JSP中特有的注解:
<%-- 注解–%>
只在JSP源代码中可见,编译后在浏览器上不可见
示例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>JSP学习</title> </head> <body> <!--html中的注释--> <%--jsp中的注释,浏览器查看不到--%> <%-- 代码片段,--%> <% for (int i = 0; i < 3; i++) { System.out.println("hello jsp");//会输出在控制台 } %> <%-- 声明--%> <%! int n =100; String string = "hello jsp";//声明两个变量 %> <%! String display(){ return "hello";//声明一个方法返回一个字符串 } %> <%-- 表达式--%> <%= "显示在页面中的内容" %><br> <%= string %><br> <%= display() //调用方法,会返回值会输出在页面上%> </body> </html>当我们访问JSP页面时,web容器会把.jsp后缀名的请求交给JSP引擎处理,将JSP页面解析.java文件(就是一个Servlet源程序),编译为.class。运行时会将其中的java代码执行,得到一些数据,然后把数据封装到html标签中,通过out对象,把所有的html标签写入到缓冲区中,这时,缓冲区中的内容响应到客户端浏览器,这时我们看见的也就是一个html代码组成的网页
(将jsp页面放在tomcat的webapps文件夹一个项目中,启动tomcat访问这个jsp页面,在work\Catalina\localhost\项目名\org\apache\jsp文件夹下就可以看到tomcat生成的源文件(.java和.class))
通过查看生成的JSP源代码文件可以发现:JSP也是一个Servlet,并且把JSP页面中相关的内容会添加到JSP的_jspService方法中,然后通过输出流把数据输出到页面中去
JSP声明中的变量也会在这个类中
JSP中的_jspService方法中,还准备了很多其他的对象,这些对象在JSP页面中都可以直接使用,这就是隐式对象
常用指令:
page:
用于设置页面上的参数,例如缓存、输出格式、编码格式等,还能用于引入java的类包,这个指令是最常用的指令。
<%@page language=“script language” extends="className" import="importList" buffer="none|kb size" session="true|false" autoFlush="true|false" isThreadSafe="true|false" info="infoText" errorPage="errorPageUrl" isErrorPage="true|false" contentType="contentTyepInfo" pageEncoding="字符集" %>include:
可以将指定的HTML或JSP页面包含到当前页面
<%@include file="目标url" %>taglib(先做了解)
可以让我JSP使用自定义标签。标签库指令描述了要使用的JSP标签库。该指令需要指定一个前缀名prefix和URI
<%@ taglib uri = "标签库表述符文件" prefix = "前缀名" %>常用的动作:
jsp:include
将指定的HTML或JSP页面包含到当前页面。在JSP页面中,当执行到jsp:include动作时,目标页面才会被web容器进行转移编译,然后只把目标页 面的结果输出到当前页面,会生成两个不同的java文件,而且使用include动作还可以给目标页面进行参数传递。
<jsp:include page="include2.jsp" flush="true"></jsp:include> <%--传递参数的写法--%> <jsp:include page="include2.jsp" flush="true"> <jsp:param name="参数名" value="值"/> </jsp:include>jsp:forward
将一个jsp的内容传送到page所指定的jsp程序或Servlet中处理,实质就是一个Servlet的请求转发
<jsp:forward page="include2.jsp"></jsp:forward> <jsp:forward page="include2.jsp"> <jsp:param name="参数名" value="值"/> </jsp:forward>include指令和动作的区别:
使用指令包含时,在jsp的编译期间就将file="目标url"的文件内容嵌入其中了,然后才会编译,所以只会生成一个当前jsp的xxx_jsp.java文件使用动作包含时,不影响当jsp的编译,当浏览器访问该jsp时,这个动作指令才会执行,然后被包含的网页才会被动态的载入,所以会生成 当前jsp的java文件 和 被包含的jsp的java文件使用指令不能带参数,使用动作可以进行参数传递JSP中预先定义了9个对象,供我们直接使用。分别为:request、response、pageContext、session、 application、out、config、page、exception
(四大作用域:当前请求:request<当前页面:page<当前会话:session<当前程序:application)
对象名类型作用域功能requestjavax.servlet.ServletRequestrequest代表客户端的请求responsejavax.servlet.ServletResponsepage服务器的响应对象pageContextjavax.servlet.jsp.PageContextpage页面作用域对象sessionjavax.servlet.http.HttpSessionsession会话域对象applicationjavax.servlet.ServletContextapplication代表整个程序,ServletContext的实例outjavax.servlet.jsp.JspWriterpage向客户端输出数据configjavax.servlet.ServletConfigpage代表Servlet的配置pagejavax.lang.Objectpage类似this关键字,代表当前jsp实例exceptionjava.lang.Throwablepage运行时异常 JspWriter:具有缓存功能,效率比PrintWriter高exception:使用时需要将jsp页面的属性isErrorPage设置为true,可以向控制台打印错误信息