JSP初识

目录

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类默认继承谁

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执久呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值