更晚的晚风

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 

什么是JSP

JSP全称->Java Server pages: Java服务端页面,也和Servlet一样,用于动态web
特点:写JSP就像在写html
区别:
● HTML:只给用户提供静态的数据
● JSP页面中可以嵌入JAVA代码,为用户提供动态数据

JSP原理

思路:JSP如何执行的?
Tomcat中有一个work目录;IDEA中使用Tomcat的会在IDEA中生产一个work目录
image

我电脑的地址

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

发现JSP页面转变成了java程序
image

所以当浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet
JSP最终也会被转换成一个Java类
JSP本质上就是一个Servlet
打开这个index_jsp.java文件
会有:

  public void _jspInit() {
  }

  public void _jspDestroy() {
  }

  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)

Jsp的内部干了些什么呢?

  1. 判断请求
    final java.lang.String _jspx_method = request.getMethod();
    if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
      response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP 只允许 GET、POST 或 HEAD。Jasper 还允许 OPTIONS");
      return;
    }
  1. 内置了一些对象
    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:当前
    HttpServletRequest request                      //请求
    HttpServletResponse response                    //响应
  1. 输出页面前增加的代码
      response.setContentType("text/html");              //设置响应的页面类型
      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中直接使用

可以理解为:
image
IDEA中的jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    String name = "via";
%>
name:<%=name%>
</body>
</html>

Tomcat中的hello_jsp.java文件:

      out.write("\r\n");
      out.write("\r\n");
      out.write("<html>\r\n");
      out.write("<head>\r\n");
      out.write("    <title>Title</title>\r\n");
      out.write("</head>\r\n");
      out.write("<body>\r\n");

    String name = "via";

      out.write("\r\n");
      out.write("name:");
      out.print(name);
      out.write("\r\n");
      out.write("\r\n");
      out.write("\r\n");
      out.write("</body>\r\n");
      out.write("</html>\r\n");

所以,在jsp页面中,只要是JAVA代码就会被原封不动的输出;如果是HTML代码,就会被转换成out.write();在前端输出。

结论:

  1. jsp文件其实就是servlet文件
  2. jsp的Java文件在c盘的tomcat里面,而且是动态生成的
  3. 里面有内置对象
  4. Java代码会直接输出,前端代码会转换之后再输出
posted on   更晚的晚风  阅读(65)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
 
点击右上角即可分享
微信分享提示