简介
-
jsp(java server pages)
是服务器端页面,在原有html基础上添加java脚本 ,构成jsp页面 -
jsp和Servlet的分工
jsp:作为请求发起页面,例如显示表单、超链接;作为请求结束页面,例如显示数据
Servlet:作为请求中处理数据的环节 -
jsp的组成
jsp=html+java脚本+jsp标签(指令)
jsp中无需创建即可使用的对象共有9个,被称为9大内置对象,例如request对象、out对象
3中java脚本:
<%…%>:java代码片段(常用),用于定义0-N条java语句
<%=…%>:java表达式,用于输出(常用),用于输出一条表达式(或变量)的结果
<%!..%>:声明,用来创建类的成员变量和成员方法(基本不用,但容易被考到) -
jsp和Servlet分工案例
form.jsp:
<body>
<form action="/day11_1/AServlet" method="post">
整数1:<input type="text" name="num1"/><br/>
整数2:<input type="text" name="num2"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
AServlet:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取参数
String s1=request.getParameter("num1");
String s2=request.getParameter("num2");
//转换成int类型
int num1=Integer.parseInt(s1);
int num2=Integer.parseInt(s2);
//运算
int sum=num1+num2;
//把结果保存到request域中
request.setAttribute("result", sum);
//转发到result.jsp
request.getRequestDispatcher("/add/result.jsp").forward(request, response);
}
result.jsp:
<body>
<%
Integer result=(Integer)request.getAttribute("result");
%>
<%=result %>
</body>
jsp原理
其实jsp是一种特殊的Servlet,当jsp页面第一次被访问时,服务器会把jsp文件编译成java文件(这个java其实是一个Servlet类),然后再编译成.class
,然后创建该类对象,最后调用它的service()方法,第二次请求同一jsp时,直接调用service()方法
jsp的注释
<%--...--%>
:当服务器把jsp编译成java文件时已经忽略了注释部分
JSP指令
JSP指令概述:
JSP指令的格式:<%@指令名 attr1="" attr2=""%>
,一般都会把JSP指令放到JSP文件的最上方,但这不是必须的
JSP中有三大指令:page、include、taglib,其中最常用最复杂的就是page指令
page指令
一些属性:
-
pageEncoding
指定当前jsp页面的编码 -
contentType
表示添加一个响应头Content-Type
如果两个属性只提供一个,那么另一个的默认值也为设置的那一个;如果两个属性都没有设置,那么默认iso -
import
如:<%@page import="java.util.*,java.net.*,java.sql.*"%>
。import属性是唯一可以重复重现的属性,但一般使用多个page指令导入多个包 -
errorPage
当前页面如果抛出异常,那么要转发到哪一个页面,由errorPage来指定 -
isErrorPage
它指定当前页面是否为处理错误的页面。当该属性值为true时,这个页面会设置状态码为500,而且这个页面可以使用9大内置对象中的exception -
autoFlush
指定jsp的输出流缓冲区满时,是否自动刷新。默认为true,如果为false,那么在缓冲区满时抛出异常 -
buffer
指定缓冲区大小,默认为8kb,通常不需要修改 -
isELIgnore
是否忽略EL表达式,默认为false,不忽略,即支持
include(静态包含)和taglib(导入标签库)
- include:jsp页面中一部分内容可能会被独立出去形成单独的jsp页面。在使用时可以用静态包含组合进来
- taglib
两个属性:
- perfix:指定标签库在本页面中的前缀,由我们自己来起名称
- uri:指定标签库的位置
JSP九个内置对象
out、page、config、pageContext、request、response、exception、session、application
out:jsp的输出流,用来向客户端响应
page:当前jsp对象,它的引用类型是Object,即真身中有如下代码:Object page=this;
config:它对应真身中的ServletConfig对象
pageContext:一个顶9个
request:HttpServletRequest
response:HttpServletResponse
exception:Throwable
session:HTTPSession
application:ServletContext
pageContext
-
Servlet中有三大域,JSP中有四大域,它就是最后一个域对象
ServletContext:整个应用程序
session:整个会话,一个会话中只有一个用户
request:一个请求链
pageContext:一个jsp页面。这个域是在当前jsp页面和当前jsp页面中使用的标签之间共享数据 -
pageContext
- 可获取其它8个内置对象
- 可代理其它域
- 全域查找:
pageContext.findAttribute("xxx");
,从小到大,依次查找
JSP动作标签
jsp的动作标签与html提供的标签有本质的区别。动作标签由Tomcat(服务器)来解释执行,html标签由浏览器来执行
-
<jsp:forward>
:转发。它与RequestDispatcher的forward方法是一样的,一个是在Servlet中使用,一个是在jsp中使用 -
<jsp:include>
:包含。它与RequestDispatcher的include方法是一样的,一个是在Servlet中使用,一个是在jsp中使用
JavaBean
JavaBean的规范:
- 必须要有一个默认构造器
- 提供get/set方法,如果只有get方法,那么这个属性是只读属性
jsp中与JavaBean相关的标签
<jsp:useBean>
:创建过查询bean
<jsp:setProperty>
:设置JavaBean的属性的值
<jsp:getProperty>
:获取JavaBean的属性的值