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")
这样的格式输出到前端
posted on 2021-04-13 11:21 Love&Share 阅读(48) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~