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")

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

相关推荐
傻乐u兔28 分钟前
C语言进阶————指针4
c语言·开发语言
大模型玩家七七31 分钟前
基于语义切分 vs 基于结构切分的实际差异
java·开发语言·数据库·安全·batch
历程里程碑31 分钟前
Linux22 文件系统
linux·运维·c语言·开发语言·数据结构·c++·算法
牛奔2 小时前
Go 如何避免频繁抢占?
开发语言·后端·golang
寻星探路5 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
lly2024067 小时前
Bootstrap 警告框
开发语言
2601_949146538 小时前
C语言语音通知接口接入教程:如何使用C语言直接调用语音预警API
c语言·开发语言
曹牧8 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
KYGALYX8 小时前
服务异步通信
开发语言·后端·微服务·ruby