JSP
JSP
jsp:java server pages(java服务器页面)
本质上jsp就是一个servlet,在html代码中嵌套java代码,
运行在服务器端,处理请求,生成动态的内容.
对应的java和class文件在tomcat目录下的work目录
后缀名 .jsp
执行流程:
1.浏览器发送请求,访问jsp页面
2.服务器接受请求,jspSerlvet会帮我们查找对应的jsp文件
3.服务器将jsp页面翻译成java文件.
4.jvm会将java编译成.class文件
5.服务器运行class文件,生成动态的内容.
6.将内容发送给服务器,
7.服务器组成响应信息,发送给浏览器
8.浏览器接受数据,解析展示
jsp的脚本:
<%...%> java程序片段
生成成jsp的service方法中
<%=...%> 输出表达式
生成成jsp的service方法中,相当于在java中调用out.print(..)
<%!...%> 声明成员
成员位置.
小案例-jsp脚本:
jsp页面代码:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<!-- 1、浏览器中输出hello world -->
hello world!<br/>
<!-- 2、eclipse中console输出:3 -->
<%
int i = 3;
System.out.println(3);
%>
<!-- 3、浏览器输出:3 -->
<%=i %>
<!-- 4、浏览器输出,但是中文乱码 -->
<%
out.print("你好");
%>
<!-- 浏览器输出为:9 -->
<%=k %>
<%!
int k=9;
%>
</body>
</html>
jsp的指令
作用:声明jsp页面的一些属性和动作
格式:
<%@指令名称 属性="值" 属性="值"%>
jsp指令的分类:
page:主要声明jsp页面的一些属性、以及jar包
include:静态包含.
taglib:导入标签库
注意:
一个页面中可以出现多个指令
指令可以放在任意位置,一般都放在jsp页面最上面.
运行在服务器端,本质上就是一个serlvet,产生的java文件和class保留在tomcat的word目录下.
<%@page import="org.apache.jasper.tagplugins.jstl.core.ForEach"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.util.*" %>
page指令:
重要属性:3个
contentType:设置响应流的编码,及通知浏览器用什么编码打开.设置文件的mimetype
pageEncoding:设置页面的编码
import:导入所需要的包
contentType和pageEncoding联系:
若两者都出现的时候,各自使用各自的编码
若只出现一者,两个都使用出现的这个编码
若两者都不出现,使用服务器默认的编码 tomcat7使用的iso-8859-1
了解属性:
language:当前jsp页面里面可以嵌套的语言
buffer:设置jsp页面的流的缓冲区的大小
autoFlush:是否自动刷新
extends:声明当前jsp的页面继承于那个类.必须继承的是httpservlet 及其子类
session:设置jsp页面是否可以使用session内置对象
isELIgnored:是否忽略el表达式
errorPage:当前jsp页面出现异常的时候要跳转到的jsp页面
isErrorPage:当前jsp页面是否是一个错误页面
若值为true,可以使用jsp页面的一个内置对象 exception
include指令:
静态包含,就是将其他页面或者servlet的内容包含进来,一起进行编译运行.生成一个java文件.
格式:
<%@include file="相对路径或者是内部路径" %>
例如:
<%@include file="/jsp/include/i1.jsp" %>
路径:
相对路径:
./或者什么都不写 当前路径
上一级路径 ../
绝对路径:
带协议和主机的绝对路径
不带协议和主机的绝对路径
/项目名/资源
内部路径:
不带协议和主机的绝对路径去掉项目名
请求转发 静态包含 动态包含
示例---include指令:
include.jsp
<%@ 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>include指令</title>
</head>
<body>
include页面
<hr>
text.jsp的内容为:<%@include file="/text.jsp" %>
<hr>
</body>
</html>
text.jsp
<%@ 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>text页面</title>
</head>
<body>
这是一个测试页面,嘻嘻嘻~~~~<hr><a style="color:red;">点我跳转</a>
</body>
</html>
taglib指令:导入标签库
格式:
<%@taglib prefix="前缀名" uri="名称空间" %>
若导入之后
<前缀名:标签 .. >
例如:
<c:if test="">输出内容</c:if>
jsp的内置对象:★★★(9大内置对象):即在jsp页面上可以直接使用的对象
内置对象 类型
out JspWriter
request HttpServletRequest
response HttpServletResponse
session HttpSession
exception Throwable
page Servlet(this)
config ServletConfig
application ServletContext
pageContext PageContext
jsp的域对象:理解
application 整个项目
session 一次会话
request 一次请求
pageContext 一个页面
pagecontext作用:理解
1.域对象
xxxAttribute()
2.操作其他域对象
方法:
xxxAttribute(...,int scope);
scope取值:
APPLICATION_SCOPE
SESSION_SCOPE
REQUEST_SCOPE
PAGE_SCOPE
3.获取其他的内置对象
getXxx()
注意:
getRequest():获取request内置对象
4.便捷查找,
findAttribute(String key):
依次从pagecontext,request,session,application四个域中,查找相应的属性,若查找到了返回值,且结束该次查找
若查找不到,返回一个null
案例:pageContext操作其他域对象
<%@ 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=ISO-8859-1">
<title>pageContext操作其他的域对象</title>
</head>
<body>
<%
pageContext.setAttribute("rkey", "rvalue",pageContext.REQUEST_SCOPE);
%>
通过pageContext往request中放入一个键值对,取出来为:
<%=request.getAttribute("rkey")%>
</body>
</html>
启动tomcat,浏览器中输入url,回车,查看页面显示如下:
jsp的动作标签
<jsp:forward>:请求转发 相当于java中 request.getRequestDispatcher(..).forward(..);
<jsp:forward page="内部路径"></jsp:forward>
<jsp:include>:动态包含
就是将被包含页面或者servlet的运行结果包含到当前页面中.
案例1--jsp动作标签forward
forward.jsp
<%@ 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>text页面</title>
</head>
<body>
<jsp:forward page="/for1.jsp"></jsp:forward>
</body>
</html>
for1.jsp
<%@ 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>text页面</title>
</head>
<body>
已经跳转到for1.jsp页面了~~~~
</body>
</html>
浏览器输入url“ http://localhost:8080/Jsp/forward.jsp”,显示for1.jsp的页面内容,但是url不变:
案例2--jsp动作标签include:
include2.jsp
<%@ 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>include动作标签</title>
</head>
<body>
include动作标签
<hr>
<jsp:include page="/text.jsp"></jsp:include>
<hr>
</body>
</html>
text.jsp
<%@ 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>text页面</title>
</head>
<body>
这是一个测试页面,嘻嘻嘻~~~~<hr>
</body>
</html>
启动tomcat,浏览器中输入http://localhost:8080/Jsp/include2.jsp,回车,
jsp注释:
html注释 <!-- -->
注释的内容只在页面上看不到 java代码和html源代码都有
java注释
只在java代码中存在
jsp注释 <%-- --%>
只在jsp页面中存在,翻译成java文件之后就没有了
el:
jsp的内置表达式语言,从jsp2.0开始,用来替代<%=..%>
具体参见博客:https://www.cnblogs.com/hejh/p/11063216.html
jstl:
jsp标准的标签库语言,apache的,用来替代java脚本
参见博客:https://www.cnblogs.com/hejh/p/11063258.html