1、简介
1、现有技术的不足
Servlet可以通过转发或重定向跳转到某个HTML文档。但HTML文档中的内容不受Servlet的控制。比如登录失败时,跳转回登录表单页面无法显示诸如“用户名或密码不正确”的错误消息,所以我们目前采用的办法是跳转到一个错误信息页面。如果通过Servlet逐行输出响应信息则会非常繁琐。
Servlet | Html | |
---|---|---|
长处 | 接收请求参数,访问域对象,转发页面 | 以友好方式显示数据 |
短处 | 以友好方式显示数据 | 动态显示数据 |
2、jsp简介
Java Server Pages = JSP
①JSP能够以HTML页面的方式呈现数据,是一个可以嵌入Java代码的HTML。
②JSP不同于HTML,不能使用浏览器直接打开,而必须运行在Servlet容器中。
③JSP的本质是一个Servlet,Servlet能做的事情JSP都能做。
2、HelloWorld
1.代码示例helloworld
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>HelloWorld</h1>
<h2>现在是:<%=new Date()%></h2>
</body>
</html>
2.jsp运行原理
注意:JSP仅在第一次访问时执行“翻译”和“编译”,之后再请求时就直接运行.class文件了。
3、jsp基本语法
1、jsp模板元素
JSP页面中的静态HTML内容称之为JSP模版元素,在静态的HTML内容之中可以嵌套JSP的其他各种元素来产生动态内容和执行业务逻辑。
JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观
2、jsp表达式:<%= %>
<h2>现在时间是:<%=new Date() %></h2><br>
<%= 1 + 1 %><br>
<%= "hello " + "world" %>
注意:JSP表达式中的变量或表达式后面不能有分号(;),JSP表达式被翻译成Servlet程序中的一条out.print(…)语句。
3、jsp脚本片段:<% %>
<%
int x = 3;
out.println(x);
for(int i = 1; i < 5; i++){
//out.println("<h" + i + ">世界</h" + i + ">");
%>
<h<%=i %>>世界</h<%=i %>>
<%
}
%>
注意:在脚本片断中可以使用条件、循环、选择等流程控制语句来创建其周围的其他元素的执行逻辑
4、jsp声明:<%! >
<%! int a = 100; %>
注意:我们一般不使用jsp声明来写代码。
5、jsp注释
<!-- 可以写 html注释 -->
<%-- 可以写jsp注释--%>
<% //java注释 %>
<!--
● JSP的注释:jsp生成Java源文件时被忽略
● Java的注释:运行class文件时被忽略
● HTML的注释:浏览器解析时被忽略
-->
6、jsp指令
三个指令:page、include、tablib
- page
属性:
language、
contentType、
pageEncoding、
import(可以单独写在一个page指令中,可以写多个)
errorPage:指定发生错误的时候,要跳转的错误页面
isErrorPage:指定当前页面为错误页面,并自动生成exception对象
<%@ page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="error.jsp"%>
-
include
特点:静态引用,静态包含,在jsp引擎将jsp页面解析成.java文件之前,就将子页面和主页面合并在了一起
<%@ include file="用户列表.jsp"%>
- taglib:
用来导入外部标签库。
(1)prefix 指定使用标签的前缀
(2)uri 指定标签的uri
(3)tagdir 标签库位置,uri、tagdir都可以指定标签资源,但tagdir指向的是一个目录,使用ti:XXXX时,目录下,必然有个XXXX.tag文件与之对应。
<%@ taglib prefix="" tagdir="" uri="" %>
7、jsp动作标签
1、动作标签:forward
语法:<jsp:forward page=“目标页面”></jsp:forward>
作用:在当前页面中做服务器端的请求转发
2、引用标签、动态包含标签:include
语法:<jsp:include page=“目标页面”></jsp:include
作用:将目标页面动态的引入到当前位置
3、传参标签:param
语法:<jsp:param value=“值” name=“变量”></jsp:param>
作用:由当前页面向目标页面传递指定的参数 --%>
<jsp:include page="/用户列表.jsp">
<!-- 使用 jsp:param 作为 jsp:include
子节点向目标页面传递 name属性所指定的值,值是value-->
<jsp:param name="count" value="100"></jsp:param>
</jsp:include>
4、jsp九大内置对象及其作用
参数:
1.final javax.servlet.http.HttpServletRequest request
获取请求报文(重要)
2.final javax.servlet.http.HttpServletResponse response
发送响应报文(重要)
局部变量
3.final javax.servlet.jsp.PageContext pageContext; 域对象
4.javax.servlet.http.HttpSession session = null; 域对象(重要)
5.final javax.servlet.ServletContext application; 域对象
6.final javax.servlet.ServletConfig config;
转义成servlet之后的配置对象
7.javax.servlet.jsp.JspWriter out = null;
输出流对象(重要)
8.final java.lang.Object page = this;
表示当前的servlet对象
9.exception对象
当在jsp页面中设置isErrorPage="true"时,
在响应的jsp转义的servlet中,会生成exception对象 ,帮助我们更总页面的异常信息
四大作用域对象:
pageContext:作用域范围是当前页面
request:在一次请求中共享数据,例如请求转发的先后两个页面
session:在同一个会话范围内共享数据(用户登录信息)
application:服务器范围内共享数据
总结:
所有的对象都可以在当前页面中进行存值和取值
<!-- 设置作用域对象的值 -->
<%
pageContext.setAttribute("name", "pageContext name");
request.setAttribute("name", "request name");
session.setAttribute("name", "session name");
application.setAttribute("name", "application name");
%>
<!-- 获取作用域对象的值 -->
pageContext:<%=pageContext.getAttribute("name") %><br>
request:<%=request.getAttribute("name") %><br>
session:<%=session.getAttribute("name") %><br>
application:<%=application.getAttribute("name") %><br>