JavaWeb16(JSP原理剖析)

什么是JSP

JSP全名为Java Server ,Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,用于动态Web技术。

特点:

代码简单,与HTML类似,使得写网页变得轻松

与HTML区别:

  • HTML只能提供静态数据
  • JSP页面中可以嵌入Java代码,为用户提供动态数据

JSP原理

在这里插入图片描述
可以在C盘的AppData中找到jsp文件,发现jsp文件最终都转变成了Java代码,并且编译为class文件

打开index_jsp.java与原来项目中的index.jsp进行对比

在这里插入图片描述

源码做了什么事情

  • 1 所有HTML语言都被自动转换成前端可识别的形式(早期程序员需要做的事情)
  • 2 该类继承的方法中含有以下三个
//初始化
 public void _jspInit() {
    
    
  }

//销毁
  public void _jspDestroy() {
    
    
  }
//JSP Service
  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {
    
    
  • 3 判定请求类型
if (!javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
    
    
      final java.lang.String _jspx_method = request.getMethod();
      if ("OPTIONS".equals(_jspx_method)) {
    
    
        response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
        return;
      }
      if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method)) {
    
    
        response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
        response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP 只允许 GET、POST 或 HEAD。Jasper 还允许 OPTIONS");
        return;
      }
    }
  • 4 内置了一些对象()
    final javax.servlet.jsp.PageContext pageContext;//页面上下文
    javax.servlet.http.HttpSession session = null;//session
    final javax.servlet.ServletContext application;//ServletContext
    final javax.servlet.ServletConfig config;//config 配置
    javax.servlet.jsp.JspWriter out = null;//输出对象
    final java.lang.Object page = this;//代表当前页面
    final javax.servlet.http.HttpServletRequest request //请求
    final javax.servlet.http.HttpServletResponse response//响应
  • 5 输出页面前增加的代码初始化了一些对象,这些对象可以在JSP页面中直接使用
response.setContentType("text/html");  //设置响应的页面类型
//初始化一些对象
      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;

举例

在这里插入图片描述
在这里插入图片描述

发现问题 每当重新启动项目时,该index_jsp.java和index_jsp.class文件所在work目录都会自动删除重新生成

在这里插入图片描述

说明,其实jsp就是servlet,只是帮我们做了很多事情。

在这里插入图片描述

注意事项

** 在写jsp页面时 java代码需要在<% %>中写**

示例 重新写了一个jsp页面

hello.jsp
在这里插入图片描述

访问页面

在这里插入图片描述

源码相关部分

在这里插入图片描述

说明:在JSP页面中

  • java代码不变
  • HTML代码会被转换为
 out.write("");

的形式输出到前端

猜你喜欢

转载自blog.csdn.net/qq_51224492/article/details/119219757