JSP原理剖析

2021-05-31 00:02

阅读:914

YPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">

标签:throws   初始   javase   动态   允许   root   conf   lang   理解   

一---什么是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代码

用${对象} 来取对象值

整体执行流程:

技术图片

 

 

测试:

 1 
 2 3     Title 4 
 5 
 6  7     String name = "hello";
 8 %>
 9 name= 
10 
11 

 

技术图片

 

JSP原理剖析

标签:throws   初始   javase   动态   允许   root   conf   lang   理解   

原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14652351.html


评论


亲,登录后才可以留言!