jsp頁面靜態化 jsp跳轉html頁面

【jsp頁面靜態化 jsp跳轉html頁面】


文章插圖
jsp頁面靜態化 jsp跳轉html頁面

文章插圖

選中Eclipse里創建的jsp文件:
test.jsp的源代碼:
“`jsp
<%@ page language=”java” contentType=”text/html; charset=UTF-8″
pageEncoding=”UTF-8″%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
<title>w3cschool教程 2</title>
</head>
<body>
<%
out.println(“Hello World 2!”);
%>
</body>
</html>
“`
點擊Run As server:
在我本機tomcat文件夾的路徑work/catalina/localhost下面,自動生成了一個以JSP項目命名的文件夾jerryjsp:
打開這個自動被Apache Tomcat Jasper組件生成的test_jsp.java文件:
/* * Generated by the Jasper component of Apache Tomcat * Version: Apache Tomcat/9.0.29 * Generated at: 2020-07-15 09:04:14 UTC * Note: The last modified time of this file was set to *the last modified time of the source file after *generation to assist with modification tracking. */package org.apache.jsp;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.jsp.*;public final class test_jsp extends org.apache.jasper.runtime.HttpJspBaseimplements org.apache.jasper.runtime.JspSourceDependent,org.apache.jasper.runtime.JspSourceImports {private static final javax.servlet.jsp.JspFactory _jspxFactory =javax.servlet.jsp.JspFactory.getDefaultFactory();private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;private static final java.util.Set<java.lang.String> _jspx_imports_packages;private static final java.util.Set<java.lang.String> _jspx_imports_classes;static {_jspx_imports_packages = new java.util.HashSet<>();_jspx_imports_packages.add("javax.servlet");_jspx_imports_packages.add("javax.servlet.http");_jspx_imports_packages.add("javax.servlet.jsp");_jspx_imports_classes = null;}private volatile javax.el.ExpressionFactory _el_expressionfactory;private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;public java.util.Map<java.lang.String,java.lang.Long> getDependants() {return _jspx_dependants;}public java.util.Set<java.lang.String> getPackageImports() {return _jspx_imports_packages;}public java.util.Set<java.lang.String> getClassImports() {return _jspx_imports_classes;}public javax.el.ExpressionFactory _jsp_getExpressionFactory() {if (_el_expressionfactory == null) {synchronized (this) {if (_el_expressionfactory == null) {_el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();}}}return _el_expressionfactory;}public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {if (_jsp_instancemanager == null) {synchronized (this) {if (_jsp_instancemanager == null) {_jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());}}}return _jsp_instancemanager;}public void _jspInit() {}public void _jspDestroy() {}public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)throws java.io.IOException, javax.servlet.ServletException {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, "JSPs only permit GET, POST or HEAD. Jasper also permits OPTIONS");return;}}final javax.servlet.jsp.PageContext pageContext;javax.servlet.http.HttpSession session = null;final javax.servlet.ServletContext application;final javax.servlet.ServletConfig config;javax.servlet.jsp.JspWriter out = null;final java.lang.Object page = this;javax.servlet.jsp.JspWriter _jspx_out = null;javax.servlet.jsp.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;out.write("n");out.write("<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">n");out.write("<html>n");out.write("<head>n");out.write("<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">n");out.write("<title>w3cschool教程 2</title>n");out.write("</head>n");out.write("<body>n");out.println("Hello World 2!");out.write("n");out.write("</body>n");out.write("</html>");} catch (java.lang.Throwable t) {if (!(t instanceof javax.servlet.jsp.SkipPageException)){out = _jspx_out;if (out != null && out.getBufferSize() != 0)try {if (response.isCommitted()) {out.flush();} else {out.clearBuffer();}} catch (java.io.IOException e) {}if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);else throw new ServletException(t);}} finally {_jspxFactory.releasePageContext(_jspx_page_context);}}}終端用戶在瀏覽器里看到的靜態頁面的源代碼:
是在這個java文件此處被拼接的:
關于對jsp文件的請求是如何被服務器的JSP容器轉換成靜態網頁并發送給瀏覽器,可以參考w3c的jsp教程:https://www.w3cschool.cn/jsp/jsp-architecture.html
網絡服務器需要一個JSP引擎,也就是一個容器來處理JSP頁面 。容器負責截獲對JSP頁面的請求 。本教程使用內嵌JSP容器的Apache來支持JSP開發 。
JSP容器與Web服務器協同合作,為JSP的正常運行提供必要的運行環境和其他服務,并且能夠正確識別專屬于JSP網頁的特殊元素 。
下圖顯示了JSP容器和JSP文件在Web應用中所處的位置 。
# JSP處理
以下步驟表明了Web服務器是如何使用JSP來創建網頁的:
(1) 就像其他普通的網頁一樣,瀏覽器發送一個HTTP請求給服務器 。
(2) Web服務器識別出這是一個對JSP網頁的請求,并且將該請求傳遞給JSP引擎 。通過使用URL或者.jsp文件來完成 。
(3) JSP引擎從磁盤中載入JSP文件,然后將它們轉化為servlet 。這種轉化只是簡單地將所有模板文本改用println()語句,并且將所有的JSP元素轉化成Java代碼 。
(4) JSP引擎將servlet編譯成可執行類,并且將原始請求傳遞給servlet引擎 。
(5) Web服務器的某組件將會調用servlet引擎,然后載入并執行servlet類 。在執行過程中,servlet產生HTML格式的輸出并將其內嵌于HTTP response中上交給Web服務器 。
(6) Web服務器以靜態HTML網頁的形式將HTTP response返回到您的瀏覽器中 。
(7) 最終,Web瀏覽器處理HTTP response中動態產生的HTML網頁,就好像在處理靜態網頁一樣 。
以上提及到的步驟可以用下圖來表示:
一般情況下,JSP引擎會檢查JSP文件對應的servlet是否已經存在,并且檢查JSP文件的修改日期是否早于servlet 。如果JSP文件的修改日期早于對應的servlet,那么容器就可以確定JSP文件沒有被修改過并且servlet有效 。這使得整個流程與其他腳本語言(比如PHP)相比要高效快捷一些 。
總的來說,JSP網頁就是用另一種方式來編寫servlet而不用成為Java編程高手 。除了解釋階段外,JSP網頁幾乎可以被當成一個普通的servlet來對待 。