JSP原理详解

什么是JSP?

Java Server Pages:Java服务器端页面,也和Servlet一样,用于动态Web技术!

最大的特点:

  • 写JSP就像写HTML
  • 区别:
    • HTML只给用户提供静态的数据
    • JSP页面中可以嵌入Java代码,为用户提供动态数据

JSP原理

思路:JSP到底怎么执行的!

  • 代码层面没有任何问题
  • 服务器内部工作
    • tomcat中有一个work目录

work是tomcat服务器工作的目录

复制代码
- IDEA中使用Tomcat会在IDEA的tomcat中生成一个work目录

在运行Tomcat项目的时候,会显示work目录在C盘中

实践步入类

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

JSP也会转换成java类

我们可以发现JSP的本质是HttpServlet

可以发现打开的index_jsp.java 其实是index.jsp 编写的内容,实际上都是由java类实现的,我们只需要编写简单的代码即可

java 复制代码
// 初始化
public void jspInit() {
    }

// 销毁
public void jspDestroy() {
}

JspService
public abstract void _jspService(HttpServletRequest var1, HttpServletResponse var2) throws ServletException, IOException;
  1. 判断请求方法
java 复制代码
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;
  }
}
  1. 内置一些对象
java 复制代码
final javax.servlet.jsp.PageContext pageContext;  // 页面上下文
javax.servlet.http.HttpSession session = null;		// session
final javax.servlet.ServletContext application;		// applicationContext
final javax.servlet.ServletConfig config;			// config
javax.servlet.jsp.JspWriter out = null;				// out
final java.lang.Object page = this;					//page:当前
javax.servlet.jsp.JspWriter _jspx_out = null;		//请求
javax.servlet.jsp.PageContext _jspx_page_context = null;	//响应
  1. 输出页面前增加的代码
java 复制代码
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;
  1. 以上的这些个对象我们可以在JSP页面中直接使用!

<%--通过尖括号百分号引起的代码就能写java代码--%>

plain 复制代码
<% %>

访问hello.jsp的时候,work目录下才会生成对应的hello.java

可以发现除了这里不一样,其他都是一样的

在JSP页面中;

只要是JAVA代码就会原封不动的输出;

如果是HTML代码,就会被转换为

java 复制代码
out.wreite("<html>\r\n")

这样的格式,输出到前端!

相关推荐
invicinble5 小时前
关于springboot引入traceid来保障可观测型
java·spring boot·后端
爱装代码的小瓶子6 小时前
【cpp进阶】c++11的新特性(概述版)
开发语言·c++
_OP_CHEN6 小时前
【从零开始的Qt开发指南】(十一)Qt常用控件之多元素控件与容器类控件深度解析
开发语言·qt·前端开发·多元素控件·gui开发·qt常用控件·容器类控件
Robot侠6 小时前
视觉语言导航从入门到精通(二)
开发语言·人工智能·python·llm·vln
SmoothSailingT6 小时前
C#——Lazy<T>懒加载机制
开发语言·单例模式·c#·懒加载
精神病不行计算机不上班6 小时前
[Java Web]在IDEA中完整实现Servlet的示例
java·servlet·tomcat·html·intellij-idea·web
chushiyunen6 小时前
javadoc规范、idea生成javadoc等
java·ide
小羊学伽瓦6 小时前
ThreadLocal
java·jvm·算法
程序喵大人6 小时前
SQLITE问题整理
开发语言·数据库·c++·sqlite