jsp转换成servlet的详解

此知识点实在手写tomcat的时候衍生出来的东西,想要真正搞懂这个东西,就有此博客。

jsp与servlet 的关系:

首先jsp(javaServer Pages)与servlet都是用在JavaEE环境中创建动态web内容的技术,他们有着紧密的关系和不同的用途。

1.servlet:

  a. 是一个Java类,用于处理http请求并生成响应内容,当然开发者可以通过Java代码完全控制响应的内容。

  b.通常处理复杂的业务逻辑控制流和处理表单数据。

2.JSP

a.是一种基于HTML的模板技术。但是在他的里面可以编写Java代码(用<% %>括起来)这样也是更加容易创建动态的web的页面。

b.JSP本质上是Servlet 的简化形式,他的目的是是页面开发更加直观高效。

关系:jsp在第一次被请求的时候,会被转化成Servlet,然后编译执行,在某种意义上说,jsp是servlet 的高级抽象,专注于视图层,而Servlet猪猪与控制和逻辑处理层。

在JavaEE中jsp与servlet的跳转的流程:

工作流程:

 1.请求URL:客户端浏览器发出/hello请求。
2.Servlet映射:根据web.xml中的<servlet-mapping>配置,将该请求映射到helloJsp Servlet。
3.处理请求:helloJsp Servlet将请求转发到指定的/hello.jsp文件。
4.生成响应:JSP文件被编译为Servlet并执行,生成动态的HTML响应返回给客户端。
  这种配置方式通过web.xml文件,可以灵活地管理和组织Web应用中的JSP页面和Servlet,有助于实现清晰的URL映射和组件配置。

除了配置xml文件之外,还有注解:@WebServlet ("/s1")

jsp与servlet转换的代码事例:

   示例JSP文件 (hello.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>Hello JSP</title>
</head>
<body>
    <h1>Hello, JSP World!</h1>
    <%
        String user = request.getParameter("user");
        if (user == null) {
            user = "Guest";
        }
        out.println("Hello, " + user + "!");
    %>
</body>
</html>

   转换后的Servlet (hello_jsp.java)

package org.apache.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final class hello_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent {

  private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();

  private static java.util.List<String> _jspx_dependants;

  private org.glassfish.jsp.api.ResourceInjector _jspx_resourceInjector;

  public java.util.List<String> getDependants() {
    return _jspx_dependants;
  }

  public void _jspInit() {
  }

  public void _jspDestroy() {
  }

  public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws java.io.IOException, ServletException {

    PageContext pageContext = null;
    HttpSession session = null;
    ServletContext application = null;
    ServletConfig config = null;
    JspWriter out = null;
    Object page = this;
    JspWriter _jspx_out = null;
    PageContext _jspx_page_context = null;

    try {
      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;
      _jspx_resourceInjector = (org.glassfish.jsp.api.ResourceInjector) application.getAttribute("com.sun.appserv.jsp.resource.injector");

      out.write("\n");
      out.write("<!DOCTYPE html>\n");
      out.write("<html>\n");
      out.write("<head>\n");
      out.write("    <title>Hello JSP</title>\n");
      out.write("</head>\n");
      out.write("<body>\n");
      out.write("    <h1>Hello, JSP World!</h1>\n");
      out.write("    ");
        String user = request.getParameter("user");
        if (user == null) {
            user = "Guest";
        }
        out.println("Hello, " + user + "!");
      out.write("\n");
      out.write("</body>\n");
      out.write("</html>\n");
    } catch (Throwable t) {
      if (!(t instanceof SkipPageException)){
        out = _jspx_out;
        if (out != null && out.getBufferSize() != 0)
          out.clearBuffer();
        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
        else throw new ServletException(t);
      }
    } finally {
      _jspxFactory.releasePageContext(_jspx_page_context);
    }
  }
}

解释

 Servlet:通过纯Java代码来实现业务逻辑和响应内容的生成。它适合处理复杂的逻辑和控制层操作。
JSP:通过嵌入Java代码到HTML中,更方便地创建动态Web页面。它适合用于视图层,呈现数据。
  通过JSP和Servlet的配合,开发者可以实现清晰的MVC(Model-View-Controller)模式,使得Web应用的开发更加结构化和可维护。

在Apache Tomcat中:

将JSP页面转换为Servlet是通过Jasper引擎完成的。Jasper是Tomcat的JSP编译器,它将JSP文件编译成Java源文件(Servlet),然后再编译成字节码,最终运行在Tomcat中。

结合使用:

  在实际应用中,JSP和Servlet通常结合使用。Servlet负责处理请求和业务逻辑,JSP负责生成动态网页内容。Servlet可以将处理后的数据传递给JSP,JSP负责将数据展示给用户。


转换过程:

Tomcat在运行时会将JSP页面转换为Servlet进行处理。这意味着每个JSP页面实际上都是一个Servlet,Tomcat在第一次请求时会自动进行转换并编译。转换后的Servlet与普通Servlet一样运行,生成动态内容。

相关推荐

  1. 说说React jsx转换真实DOM过程?

    2024-07-13 18:42:02       51 阅读
  2. js转换Number类型方法与规则

    2024-07-13 18:42:02       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 18:42:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 18:42:02       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 18:42:02       58 阅读
  4. Python语言-面向对象

    2024-07-13 18:42:02       69 阅读

热门阅读

  1. 「UCD」浅谈蓝湖Figma交互设计对齐

    2024-07-13 18:42:02       18 阅读
  2. Log4j的原理及应用详解(四)

    2024-07-13 18:42:02       21 阅读
  3. 类的生命周期详解

    2024-07-13 18:42:02       13 阅读
  4. LeetCode 374, 128, 17

    2024-07-13 18:42:02       23 阅读
  5. 初识C++

    初识C++

    2024-07-13 18:42:02      21 阅读
  6. 1. Linux系统概述

    2024-07-13 18:42:02       17 阅读
  7. Flume工具详解

    2024-07-13 18:42:02       18 阅读
  8. Linux Vim编辑器全攻略:从入门到精通

    2024-07-13 18:42:02       17 阅读
  9. npm install canvas失败

    2024-07-13 18:42:02       16 阅读
  10. 实现前端文件上传功能并存储到本地MySQL数据库

    2024-07-13 18:42:02       20 阅读
  11. jmeter文件下载接口处理

    2024-07-13 18:42:02       20 阅读