本人小白一枚,欢迎大家一起讨论学习,如有错误,还望大家指教。
简述:
Jsp全称Java Server Pages,即java服务器端页面,是一种动态网页开发技术,也可以理解为一个特殊的页面,其中既可以书写html便签,又可以书写java代码。Jsp本质就是一个Servlet,它的原理我们可以通过图片来大致了解一下。
通过上面的图片我们可以知道,其实jsp运行会被转换成.java文件,并且该jsp类会继承org.apache.jasper.runtime.HttpJspBase
。源码如下,我们不难发现,其实Jsp就是一个Servlet。
package org.apache.jasper.runtime;
public abstract class HttpJspBase extends HttpServlet implements HttpJspPage {
private static final long serialVersionUID = 1L;
protected HttpJspBase() {
}
@Override
public final void init(ServletConfig config)
throws ServletException
{
super.init(config);
jspInit();
_jspInit();
}
@Override
public String getServletInfo() {
return Localizer.getMessage("jsp.engine.info");
}
@Override
public final void destroy() {
jspDestroy();
_jspDestroy();
}
/**
* Entry point into service.
*/
@Override
public final void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
_jspService(request, response);
}
@Override
public void jspInit() {
}
public void _jspInit() {
}
@Override
public void jspDestroy() {
}
protected void _jspDestroy() {
}
@Override
public abstract void _jspService(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException;
}
Jsp脚本:就是在jsp定义java代码的方式。
<% 代码 %>:
是定义在service方法中的,service方法中可以定义什么,该脚本就可以定义什么。<%! 代码 %>:
是用来定义成员变量和成员方法,了解即可,并不常用。<%= 代码 %>:
用来向页面显示数据时用的,存在于service方法中。
Jsp内置对象:九个内置对象,即在jsp页面中直接使用,无须创建。
PageContext pageContext:
用做当前页面共享数据,还可以用来获取其他另外八个内置对象,域对象。HttpServletRequest request:
用来一次请求访问多个资源的数据共享(请求转发),域对象。HttpSession session:
用来一次会话多次请求的数据共享,域对象。ServletContext application:
相当于ServletContext,域对象。HttpServletResponse response:
用来想客户端浏览器进行相应的对象。Object page:
表示当前jsp页面对象(Servlet),如同this。JspWriter out:
字符输出流对象,可以将数据输出到页面上,和response.getWriter()类似- response.getWriter() 和 out.write() 的区别:在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。也就是说**response.getWriter()数据输出永远在out.write()**之前。
ServletConfig config:
Servlet的配置对象。Throwable exception:
用来处理异常的对象。
Jsp指令:用于配置Jsp页面,导入资源文件。
格式: <%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
指令名称:
page:
用来配置Jsp页面 ,例如下例<%@ page contentType="text/html;charset=gbk" errorPage="500.jsp" pageEncoding="GBK" import="java.util.List" buffer="16kb" %>
contentType:
等同于response.setContentType(),可以用来设置响应体的mime类型以及字符集编码。pageEncoding:
设置当前jsp页面的编码。import:
导入java包。errorPage:
表示如果当前页面发生异常,会自动跳转到指定的错误页面。isErrorPage:
标识当前页面是否是错误页面。true:
是,可以使用内置对象exception。false:
否,默认值,不可以使用内置对象exception。
buffer:
设置缓冲区大小,默认不小于8KB。
include:
导入页面包含的资源,例如当我们书写一个网站时,login部分属于重复的部分,此时我们只需要创建一个top的jsp文件即可,在需要的地方用此指令引用即可。例如:<%@include file="top.jsp"%>
taglib:
当我们使用第三方的标签库时,需要使用taglib指令来进行“导包”操作。- 例如:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix:
自定义前缀,在我们引用这个标签库是,直接使用前缀名即可。