zoukankan      html  css  js  c++  java
  • JSP原理剖析

    一---什么是JSP?

    JSP全称:javaserver pages  java服务器页面。

    作用:响应客户端发送的请求,动态生成页面并返回给客户端。

    最大的特点:

    1)写JSP就像在写HTML

    2)区别:

        HTML只给用户提供静态数据

       JSP以页面中可以嵌入java代码,为用户提供动态数据

    二---JSP原理

    思路:JSP到底怎么执行?

    1)代码层面好理解

    2)服务器内部工作:

      tomcat中有一个work目录

      idea中使用tomcat的话会在idea的tomcat中生成一个work目录

     我电脑的地址:

    C:\Users\LEBRON\.IntelliJIdea2019.2\system\tomcat\Unnamed_javaweb-session-cookie\work\Catalina\localhost\ROOT\org\apache\jsp

    发现页面转变成了java程序

     浏览器向服务器发送请求,不管访问什么资源,其实都是在访问servlet

    JSP最终也会被转换成java类。

    JSP本质上就是一个servlet

    三---源码剖析

    1 public void _jspInit() {   // 初始化
    2   }
    3 
    4   public void _jspDestroy() {  // 销毁
    5   }
    6 
    // jspservice 7 public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) 8 throws java.io.IOException, javax.servlet.ServletException {

    1)  判断请求:

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

    2)内置了一堆对象

    1  final javax.servlet.jsp.PageContext pageContext;  //  页面上下文 
    2     javax.servlet.http.HttpSession session = null;  // session
    3     final javax.servlet.ServletContext application;  // applicationContext
    4     final javax.servlet.ServletConfig config;  // 配置
    5     javax.servlet.jsp.JspWriter out = null;  // 输出对象
    6     final java.lang.Object page = this;  // paged代表当前页
    7
     8      http.HttpServletRequest request   // 请求
      9     HttpServletResponse response   // 响应

    3) 输出页面前增加的代码

    1      response.setContentType("text/html"); // 设置响应的页面类型
    2       pageContext = _jspxFactory.getPageContext(this, request, 
    3       response,null, true, 8192, true);
    4       _jspx_page_context = pageContext;
    5       application = pageContext.getServletContext();
    6       config = pageContext.getServletConfig(); // 获取配置
    7       session = pageContext.getSession();  // 获取session
    8       out = pageContext.getOut();  // 获取输出对象
    9       _jspx_out = out;

    以上的这些对象我们可以在JSP页面中直接使用

    用<%     java代码   %>来写java代码

    用${对象} 来取对象值

    整体执行流程:

    测试:

     1 <html>
     2 <head>
     3     <title>Title</title>
     4 </head>
     5 <body>
     6 <%
     7     String name = "hello";
     8 %>
     9 name= <%=name %>
    10 </body>
    11 </html>

     结论:在jsp页面中,只要是java代码就会原封不动的输出,如果是html代码,就会被转换为

    1 out.write("<html>\r\n")

    这样的格式输出到前端

  • 相关阅读:
    Windows-Redis-x64-5.0.9【感谢大佬】
    Debezium初试
    一键结束进程
    Vscode自动刷新
    从零到一搭建一个jenkins+github持续构建平台
    git项目迁移
    AWS IoT 消息代理
    解析器:request.body、request.POST、request.data
    Unity程序员的Unreal 简明教程(二,模型与材质)
    Unity程序员的Unreal 简明教程(一、旋转的BOX)
  • 原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14652351.html
Copyright © 2011-2022 走看看