JSP初识

x33g5p2x  于2022-02-19 转载在 其他  
字(4.5k)|赞(0)|评价(0)|浏览(415)

JSP简介

jsp的创建

jsp如何访问

jsp的本质

jsp头部的page指令

常见属性:

JSP简介

jsp的全称是java server pages 。java的服务器页面。

jsp的主要作用是替代Servlet程序回传html页面的数据。

因为Servlet程序回传html页面数据是一件非常繁琐的事情,不利于开发和维护。

jsp的创建

jsp如何访问

jsp页面和html一样,都是存放在web目录下。访问也跟html页面一样。

如:web目录下的文件

a.html页面:http://ip:port/工程路径/a.html

b.jsp页面:http://ip:port/工程路径/b.jsp

jsp的本质

jsp的本质是一个servlet程序

当我们第一次访问服务器时,tomcat会把jsp页面翻译成一个java源文件,并且对他编译成为.class的字节码程序

字节码文件就是对应的java源文件,打开源文件可以发现

b_jsp这个类继承了HttpJspBase类,我们通过idea发现HttpJspBase类直接继承了HttpServlet类,所以说,jsp翻译出来的java类间接继承了HttpServlet类,所以说,jsp实质为Servlet程序

public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {

    final java.lang.String _jspx_method = request.getMethod();
    if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
      response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP 只允许 GET、POST 或 HEAD。Jasper 还允许 OPTIONS");
      return;
    }

    final javax.servlet.jsp.PageContext pageContext;
    javax.servlet.http.HttpSession session = null;
    final javax.servlet.ServletContext application;
    final javax.servlet.ServletConfig config;
    javax.servlet.jsp.JspWriter out = null;
    final java.lang.Object page = this;
    javax.servlet.jsp.JspWriter _jspx_out = null;
    javax.servlet.jsp.PageContext _jspx_page_context = null;

    try {
      response.setContentType("text/html; charset=utf-8");
      pageContext = _jspxFactory.getPageContext(this, request, response,
      			null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

      out.write('\r');
      out.write('\n');

    String path = request.getContextPath();
    String basepath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";

      out.write("\r\n");
      out.write("<html>\r\n");
      out.write("<head>\r\n");
      out.write("    <base href=\"");
      out.print(basepath );
      out.write("\"/>\r\n");
      out.write("    <meta charset=\"utf-8\"/>\r\n");
      out.write("    <title>Insert title here</title>\r\n");
      out.write("</head>\r\n");
      out.write("<body>\r\n");
      out.write("b.jsp的页面\r\n");
      out.write("</body>\r\n");
      out.write("</html>");
    } catch (java.lang.Throwable t) {
      if (!(t instanceof javax.servlet.jsp.SkipPageException)){
        out = _jspx_out;
        if (out != null && out.getBufferSize() != 0)
          try {
            if (response.isCommitted()) {
              out.flush();
            } else {
              out.clearBuffer();
            }
          } catch (java.io.IOException e) {}
        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
        else throw new ServletException(t);
      }
    } finally {
      _jspxFactory.releasePageContext(_jspx_page_context);
    }
  }

观察翻译出来Servlet源代码可以发现,低层也是通过输出流来把html页面回传给客户端的。

jsp头部的page指令

jsp的page指令可以修改jsp页面中一些重要的属性,或者行为。

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>

常见属性:

language属性             表示jsp翻译后什么语言文件,暂时只能支持Java。

contentType属性       表示jsp返回的数据类型是什么,在源码中response.setContentType()参数值

pageEncoding属性     表示当前jsp页面文件本身的字符集。

import属性                   跟java源代码中一样用于导包,导类。如:

<%@ page import="java.util.Map" %>

autoFlush属性        设置当out输出流缓冲区满了之后,是否自动刷新缓冲区,默认true。

buffer属性                设置out缓冲区的大小,默认是8kb

**当我们设置不自动刷新缓冲区,且设置的缓冲比较小时就会发生jsp溢出,**如果设置了自动刷新就不会溢出。(缓冲区设置8kb是综合最佳的)

errorPage属性        设置当jsp页面运行时出错,自动跳转去的错误页面路径

errorPage表示错误后自动跳转去的路径,这个路径一般是以斜杆开头,他表示请求地址为http://ip:port/工程路径/,映射到代码中的web目录

b.jsp页面如下:

<%@ page language="java"
         contentType="text/html; charset=utf-8"
         pageEncoding="utf-8"
          autoFlush="true"
           buffer="8kb"
            errorPage="/error500.jsp"    %>
<%--errorPage表示错误后自动跳转去的路径,这个路径一般是以斜杆开头,
            他表示请求地址为http://ip:port/工程路径/,
            映射到代码中的web目录
            --%>
<%@ page import="java.util.Map"  %>
<%
    String path = request.getContextPath();
    String basepath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<html>
<head>
    <base href="<%=basepath %>"/>
    <meta charset="utf-8"/>
    <title>Insert title here</title>
</head>
<body>
<%--制造一个错误--%>
<% int i =10/0; %>

b.jsp的页面
</body>
</html>

isErrorPage属性       设置当前jsp页面是否·错误信息页面,默认是false,如果是true可以获取异常信息。

session属性              设置访问当前jsp页面,是否会创建HttpSession对象,默认是true。

extends属性               设置jsp翻译出来的java类默认继承谁

相关文章