一、简介
JSP全名为Java Server Pages,Java服务器页面。根本是简化的Servlet
servlet进行请求逻辑处理,使用JSP进行页面展现。
特点: 本质是servlet
跨平台,一次编写处处运行
健壮性,安全性
运行原理:
浏览器发起请求,请求JSP,请求被Tomcat服务器接收,执行jspServlet,将jsp文件转义为对应的Java文件,也就是Servlet文件,然后执行转义后的文件。
JSP的三种注释:
1. 前端语言注释:<!-- 注释 -->
会被转义,会被发送到浏览器,不会被浏览器执行
2. Java语言注释:<% //注释
%>
会被转义,不会被servlet执行
3. JSP注释: <%-- --%>
不会转义
二、JSP的语法和指令
JSP的指令
作用:设定整个JSP页面范围内都有效的相关信息,被服务器解释并执行,不会产生任何内容输出到网页。
语法格式:<%@ 指令名 属性1="属性值1" 属性2="属性值2" 。。。%>
1. page指令
作用:配置jsp文件转义时的相关参数
例:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html;chartset=utf-8"%>
<%@ page errorPage="error.jsp "%>
language属性 | 设置JSP页面使用的语言 | session | JSP页面是否使用HTTP的session会话对象,默认为true | |
extends属性 | 转义的Java文件要继承的java类 | buffer | out输出对象使用的缓冲区大小,默认8KB | |
import | 转义的Java文件需导入的类包,多个包用逗号隔开 | autoFlush | 页面缓存满时,是否自动刷新缓存,默认为true | |
pageEncoding | jsp文件的编码格式 | isErrorPage | ||
contentType | 响应时的编码格式 | errorPage | jsp运行出现错误时跳转的页面 |
2. JSP的局部代码块:
在一个JSP页面中,可以包括指令标识、HTML代码、JavaScript代码、嵌入的java代码、注释、JSP动作标识等,要给一个标记使转义时可以分清Java代码和其他代码
特点:局部代码块中声明的Java代码会被原样转义到jsp对应的servlet文件的_JspService方法中,声明的变量是局部变量。
格式: <% 局部代码块 %>
缺点:书写麻烦,阅读困难
<html>
<head>
<title>jsp基本语法学习</title>
<meta charset="utf-8"/>
</head>
<body>
<h3>jsp基本语法学习</h3>
<hr>
<% //声明Java代码
int a=2;
if(a>3)
{
%>
<b>jsp学习简单吗?</b>
<% }else{ %>
<i>jsp中写Java难受</i>
<% } %>
</body>
</html>
3. JSP的全局代码块:
特点:声明的Java代码作为全局代码转义到对应的servlet类中,局部代码调用全局代码
格式: <%! 全局代码 %>
<!-- 全局代码块 -->
<%!
public void test(){
System.out.println("我是全局代码块声明");
}
%>
<% System.out.println("局部代码块调研全局方法");
test();
%>
4. JSP的脚本段语句:
特点:帮助我们快速获取变量或方法的返回值作为数据响应给浏览器
格式:<%= 变量名或方法名 %> (转义为: out.print( 变量名或方法名 ); )
注意:不要使用分号
<!-- JSP的脚本段语句 -->
<%! String str="String变量str"; %>
<i> 脚本段语句获取方法返回值:<%= str %></i>
转义后:
out.write(" \t \t <!-- JSP的脚本段语句 -->\r\n");
out.write(" \t \t ");
out.write("\r\n");
out.write(" \t \t <i>脚本段语句获取方法返回值:");
out.print(str );
5.JSP的静态引入(include指令)
使用: <%@include file="include.jsp" %> //要引入的jsp文件的相对路径
特点:将当前jsp文件和引入的jsp文件转义成一个Java文件使用,在网页中显示合并后的效果。
注意:引入的jsp文件不会被单独转义成Java(servlet)文件。
当前文件和静态引入的文件不能使用同名变量。
6.JSP的动态引入
使用: <jsp:include page="includeActive.jsp"></jsp:include> //要引入文件的相对路径
特点:会将引入的jsp文件单独转译,在当前文件转译后的Java中调用引入的jsp文件的转译文件,网页中显示合并后的效果。
注意:当前文件中和引入的文件中允许同名变量。
out.write("\t <!-- jsp的动态引入 -->\r\n");
out.write("\t ");
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "includeActive.jsp", out, false);
out.write("\r\n");
7.jsp的转发标签
使用: <jsp:forward page="forward.jsp"></jsp:forward> //要转发文件的相对路径
特点:一次请求,地址栏信息不改变。
注意:两个标签中间除了写 <jsp:param value="aa" name="str"/> 不会报错,其他字符都会报错。
<jsp:param value="aa" name="str"/>
name属性为附带数据的键名,value为附带的数据内容。会以?形式拼接在转发路径的后面。
//在转发的页面中取出携带的数据
<body>
我是转发页面, <%=request.getParameter("str") %><br>
</body>
7. taglib指令