JavaEE jsp技术学习
1.1 jsp的简介
JSP全名为Java Server Pages,中文名叫Java服务器页面,其根本是一个简化的Servlet设计,是由Sun Microsystem
s公司倡导、诸多公司一起建立的一种动态网页技术标准。
JSP特点:
- 本质上还是Servlet
- 跨平台,一次编写处处运行
- 组件跨平台
- 健壮性
- 安全性
jsp的访问原理:
浏览器发起请求,请求JSP,请求被Tomcat服务器接收,执行JspServer将请求的JSP文件转译成对应的Java文件(也就是Servlet),然后执行转译好的Java文件。
1.2 jsp的page指令
作用:设置jsp转译的时候的一些配置信息。
常用的jsp page指令:
<%@page language="java"%><%--声明转译的语言 --%>
<%@page import="java.util.*,java.lang.*"%> <%--声明转译时导入的java包文件 --%>
<%@page pageEncoding="utf-8"%> <%-- 设置jsp的数据保存的编码格式 --%>
<%@page contentType="text/html; charset=utf-8"%> <%-- 设置数据的响应编码格式--%>
<%@page session="false"%> <%-- 设置session为关闭,默认为true--%>
<%@page isErrorPage="true"%> <%-- 开启Exception异常对象,默认为false--%>
<%@page errorPage="xxx.jsp"%><%--指定当jsp页面运行出现异常错误时跳转的页面--%>
jsp中还有其他指令,后续会更新。
1.3 jsp的全局代码块 局部代码块 脚本段语句
<%@page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%--局部代码块
声明方式:<% java代码 %>
特点:
使用局部代码块声明的Java代码会被原样转译到_jspService()方法中,也就是局部代码。
--%>
<%
int a=123;
System.out.println(a);
test();//调用在全部代码块中声明的方法
%>
<%--全局代码块
声明方式:<%! java代码 %>
特点:
全局代码块中声明的java代码在被转译时,会被转译成jsp对应的java文件的全局代码。
作用:
声明方法和全局变量。
注意:
使用全局代码块声明方法,使用局部代码块调用方法。
--%>
<%!
int b=456;
public void test(){
System.out.println("全局代码块的声明");
}
%>
<%--jsp中Java脚本段(表达式)
声明方式:<%=变量名/方法名 %>
作用:
将java代码的变量值或者方法的返回值响应给浏览器
--%>
<%=a %>
1.4 jsp的注释
在jsp中通常有五种注释:
- HTML注释:会被转译也会被浏览器响应,但是注释中的内容浏览器不执行。
- CSS注释:会被转译也会被浏览器响应,但是注释中的内容浏览器不执行。
- js注释:会被转译也会被浏览器响应,但是注释中的内容浏览器不执行。
- java注释:会被转译,但不会执行。
- jsp注释:不会被转译,也不会被执行。
1.5 jsp的静态引入和动态引入
如果不同的jsp界面使用相同的资源,如果将资源在每个jsp页面都单独声明,会时代码冗余过多,不利于代码的升级和维护。那么,就需要静态引入和动态引入。
静态导入的使用:
<%@include file="被引入jsp文件的相对路径" %>
静态导入的特点:被引用jsp文件和原有jsp文件被转译成一个Java文件。
注意:静态引入的相关jsp文件中不能声明原jsp文件已有的同名变量。
动态引入的使用:
<jsp:include page=“被引入jsp文件的相对路径”></jsp:includejsp>
动态引入的特点:被引入的jsp文件会被单独转译,原有的jsp文件会调用被引入的jsp文件。因此,可以避免静态导入中同名变量问题的出现。
从以上内容我们可以看到,静态引入和动态引入都达到了相同的效果,实现了不同jsp文件之间的资源共享。但是,从两者的特点的的角度讲,静态引入的效率更高一些,如果不存在同名变量问题,推荐使用静态引入。
1.6 jsp的forward标签(页面转发)
不同的jsp在处理请求时,有可能会将当前的请求转发给另外的jsp进行处理,使用forward动作命令即可:
<jsp:forward page="目标jsp的相对路径">
<jsp:param value="" name=""/>
</jsp:forward>
特点:从当前jsp跳转到另外一个jsp
注意:jsp:forward标签中除了jsp:param子标签外不能有其他任何内容,否则会报错!
jsp:param子标签用于声明转发的附带数据
1.7 jsp的内置对象
什么是内置对象?
jsp在转译成其对应的java文件(也就是Servlet)时,会默认在_jspService()方法中声明创建几个对象,这些对象被称为内置对象。
内置对象的特点:
我们可以在jsp页面中声明java局部代码块,在代码块中直接使用内置对象。
注意:对象的名字必须是转译好的java文件中声明的对象名。
内置对象有哪些?
-
request:封存了请求的相关数据 ,由服务器创建
-
response:封存了响应相关的数据
-
out:响应数据的对象,底层使用了缓冲区,效率高于response
-
session:解决了同一用户不同请求之间的数据共享问题,由服务器创建
-
page: this,指代本次请求被转译的Servlet对象
-
pageContext:页面上下文对象,此对象封存了另外的8个对象,一个jsp页面拥有一个该对象,每次请求该对象都被重新创建。作用域为当前jsp界面。
-
config:Servlet中ServletConfig对象,使用此对象完成资源的初始化
-
application:Servlet中ServletContext对象,为所有用户共享
-
exception:jsp页面的异常对象,封存了异常信息
1.8 请求转发和重定向中绝对路径和相对路径
Servlet中的绝对路径和相对路径:
在请求转发中,转发地址根目录为项目目录,因此绝对路径只需写项目下的路径即可
在重定向中,重定向地址根目录为webroot目录,因此请求转发绝对路径要添加项目名
一般不建议使用相对路径
jsp中的绝对路径和相对路径:
jsp中第一个斜杠表示服务器根目录
myeclipse中创建的jsp文件会自动生成路径代码basePath,该值为当前项目根目录,并且在head标签中使用了
<base href="<%basePath%>">
相当于将当前页面的资源全部默认定位为从项目跟目录开始查找,我们就不需要写第一个斜杠了。