欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > jsp转换成servlet的详解

jsp转换成servlet的详解

2024/10/24 5:20:56 来源:https://blog.csdn.net/2301_79714460/article/details/140323018  浏览:    关键词: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.HttpJspBaseimplements 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一样运行,生成动态内容。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com