Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 337p粉嫩大胆色噜噜噜,久久精品国产99国产精2020丨 ,成人免费视频一区二区

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          深入了解 JSP 的運行過程

          深入了解 JSP 的運行過程

          么是 JSP?

          JSP(全稱JavaServer Pages)是由 Sun Microsystems 公司主導創建的一種==動態==網頁技術標準。JSP部署于網絡服務器上,可以響應客戶端發送的請求,并根據請求內容動態地生成 HTML、XML 或其他格式文檔的 Web 網頁,然后返回給請求者。

          JSP 主要作用

          • 代替 Servlet 程序回傳 HTML 頁面的數據。

          接下來我們去看看 JSP 是如何實現代替 Servlet 的。

          JSP 在本質上就是一個 Servlet 程序?

          如果我們訪問一個 Servlet 程序,讓它返回給我們一個前端頁面,那么就需要在 JavaWEB 項目下編寫一個 HelloServlet 程序:

          package com.example.demo;
          
          import java.io.*;
          import javax.servlet.http.*;
          import javax.servlet.annotation.*;
          
          @WebServlet("/hello-servlet")
          public class HelloServlet extends HttpServlet {
          
              public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
                  response.setContentType("text/html;charset=utf8");
                  // HelloWorld 頁面
                  PrintWriter out=response.getWriter();
                  out.println("<!DOCTYPE html>");
                  out.println("<html lang='en'>");
                  out.println("<head>");
                  out.println("<meta charset='UTF-8'>");
                  out.println("<title>Title</title>");
                  out.println("</head>");
                  out.println("<body>");
                  out.println("<h1>Hello World!</h1>");
                  out.println("</body>");
                  out.println("</html>");
              }
          
          }
          
          

          當我們啟動程序,在瀏覽器訪問http://localhost:8080/hello-servlet 時,瀏覽器會回傳顯示一個簡單的頁面

          按 F12 進入開發者模式,可以看到 Servlet 程序響應回傳了我們在Servlet 程序中拼接的 html 代碼。



          那么到這里還不能讓我們明白 JSP 就是一個 Servlet,再往下看。

          我們創建一個JSP 文件 index.jsp,這樣啟動項目時,自動彈出的首頁就是我們的 index.jsp 頁面。

          <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
          <!DOCTYPE html>
          <html>
          <head>
              <title>JSP - Hello World</title>
          </head>
          <body>
          <h1><%="Hello World!" %></h1>
          </body>
          </html>
          
          

          我們啟動項目



          從控制臺找到項目部署路徑

          C:\Users\Jie\AppData\Local\JetBrains\IntelliJIdea2021.1\tomcat\38d57dfc-4429-4e47-8912-74706f5fff5a
          
          

          我們直接訪問此路徑,可以看到目錄下存在的文件。



          進入work\Catalina\localhost\ROOT\org\apache\jsp 目錄,可以看到存在的兩個文件【index_jsp.java】和【index_jsp.class】



          接著我們將這兩個文件刪除,同時在瀏覽器進行刷新頁面,可以看到目錄下新增了我們剛刪除的兩個文件【index_jsp.java】和【index_jsp.class】



          接著,我們使用 Notepad++ 打開【index_jsp.java】文件,查看編譯之后的 Java 文件代碼。



          可以看到 index.jsp 中 HTML 部分的代碼被嵌入在 java 代碼中,這和我們一開始在 HelloServlet 中拼接的 HTML 代碼一摸一樣。

          package org.apache.jsp;
          
          import javax.servlet.*;
          import javax.servlet.http.*;
          import javax.servlet.jsp.*;
          
          public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
              implements org.apache.jasper.runtime.JspSourceDependent,
                           org.apache.jasper.runtime.JspSourceImports {
             /*something*/                  
          }
          
          

          查看源碼我們可以看見 index_jsp 繼承了 org.apache.jasper.runtime.HttpJspBase 類,

          package org.apache.jasper.runtime;
          
          import java.io.IOException;
          
          import javax.servlet.ServletConfig;
          import javax.servlet.ServletException;
          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          import javax.servlet.jsp.HttpJspPage;
          
          import org.apache.jasper.Constants;
          import org.apache.jasper.compiler.Localizer;
          
          /**
           * This is the super class of all JSP-generated servlets.
           *
           * @author Anil K. Vijendran
           */
          public abstract class HttpJspBase extends HttpServlet implements HttpJspPage {
              /*something*/
          }
          
          

          我們繼續查看 org.apache.jasper.runtime.HttpJspBase 類的源碼,可以發現,HttpJspBase 類直接繼承了 HttpServlet類。也就是說,JSP 翻譯出來的 index_jsp.java 類,它間接了繼承 HttpServlet 類,這和我們直接編寫 Servlet 程序繼承 HttpServlet 類 是一樣的。

          因此 JSP 本質就是一個 Servlet 程序。它可以省掉不少我們在 Servlet 中拼接 HTML 代碼的時間。不過隨著前后端分離的出現,JSP 也逐漸被淘汰。

          JSP的執行過程

          當我們第一次訪問 JSP 頁面的時候,Tomcat 服務器主要會幫我們完成:

          1. 把 JSP 頁面翻譯成為一個 .java 源文件
          2. 對 .java 源文件編譯成為 .class 字節碼文件
          3. 執行 .class 字節碼文件返回結果

          當我們第二次訪問 JSP 頁面的時候,如果未做更改,則使用上次編譯的 .class 文件;若修改過,則重新編譯。

          建工程

          File>New>Web Project


          填寫項目名稱Project Name,舉例為andylife,這里使用的是默認存儲路徑,如需修改,把下面Use default location前面的勾去掉,并在Directory填寫自己的地址


          設置完成后點擊Finish,新建完成

          編寫內容

          打開WebRoot目錄下的index.jsp,把編碼改為utf-8


          網頁修改內容,顯示日期時間源碼:

          <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

          <%

          String path=request.getContextPath();

          String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

          %>

          <html>

          <body>

          <%

          //設置刷新頁面的時間,每隔1秒鐘刷新一次

          response.setHeader("refresh", "10");

          %>

          當前的系統時間是:

          <%

          //輸出當前時間

          Calendar now=Calendar.getInstance();

          out.print(now.get(Calendar.YEAR) + "年");

          out.print(now.get(Calendar.MONTH) + 1 + "月");

          out.print(now.get(Calendar.DATE) + "日");

          out.print(now.get(Calendar.HOUR_OF_DAY) + "時");

          out.print(now.get(Calendar.MINUTE) + "分");

          out.print(now.get(Calendar.SECOND) + "秒 ");

          out.print("星期");

          switch (now.get(Calendar.DAY_OF_WEEK)) {

          case 1:

          out.print("日");

          break;

          case 2:

          out.print("一");

          break;

          case 3:

          out.print("二");

          break;

          case 4:

          out.print("三");

          break;

          case 5:

          out.print("四");

          break;

          case 6:

          out.print("五");

          break;

          case 7:

          out.print("六");

          }

          out.print(""+"<hr>");

          out.print("ID Things need to be done IF DAILY "+"<br>");

          %>

          </body>

          <body>

          <%

          out.print(""+"<hr>");

          %>

          </body>

          </html>

          運行

          把頁面部署到Tomcat上

          點擊ADD,然后選擇我們的Tomcat服務器,點擊Finish,然后點OK





          點擊旁邊圖標的小三角形,選擇服務器,并運行

          當我們在控制臺看到此信息時,服務器就開啟成功了


          前端瀏覽

          在瀏覽器輸入網址:http://localhost:8080/life/index.jsp

          它表示的是,在本地8080端口下,life中的index.jsp

          1),模板文件add_jsp_.ftl

          <%@ page language="java" pageEncoding="UTF-8"%>
          <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
          
          <%
          String childPath=request.getContextPath();
          String basePath=request.getScheme() + "://"
          	+ request.getServerName() + ":" + request.getServerPort() + childPath +"/";
          %>
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
            <head>
              <title></title>
          	<%@ include file="/pub/scripts.jsp"%>
          
              <script type="text/javascript">
          
          		function submit_save() {
          
          			var varName_=$("#name_").val();
          			if(varName_==null || varName_=='') {
          			    alert("請先輸入名稱!")
          			    return false;
          			} else {
                          $("#addForm").submit();
          			}
                  }
              </script>
              
            </head>
            <body>
            		
          		<!-- 標題區域 -->
          		<div class="tleBg">
          			<div class="title">
          				<span class="txt"> <em></em><#list mapDataTableComment as listItmCom > ${listItmCom.columnComment} </#list>- 新增
          				</span> <a href="javascript:;" class="search-hide"></a>
          			</div>
          			<div class="clr"></div>
          		</div>
            		
            		<!-- 查詢維度區域 -->
          		<div class="t_list" id="addtable">
          			<form name="addForm" id="addForm" action="<%=childPath %>/testT00_userConter/testT00_userAddSave" method="post">
          
          				<table border="0" cellspacing="0" width="100%" cellpadding="0" class="t_list_1">
          					<tbody>
          					
          					
          					<#list mapDataList as listItm >
          						
          						<tr style="line-height: 36px;">
          							<td width="15%">
          								 
          							</td>
          							<td width="20%" class="text" style="text-align: right;">
          								${listItm.columnComment}:
          							</td>
          							<td>
          								<input type="text" id="${listItm.columnName}" name="${listItm.columnName}" style="width: 300px;" class="inputStyle" value="原左大括<#list mapDataTableComment as listItmCom > ${listItmCom.columnName} </#list>.${listItm.columnName}原右大括" />
          							</td>
          							<td width="15%">
          								 
          							</td>
          						</tr>
          					</#list>
          
          					
          						<tr>
          							<td width="15%">
          								 
          							</td>
          							<td width="20%" class="text" style="text-align: right;">
          								 
          							</td>
          							<td>
          								<input type="button" id="btn_add" value="保 存" class="t_button_gray" onclick="return submit_save();" />
          								<input type="reset" id="btn_rest" value="重 置" class="t_button_gray" />
          							</td>
          							<td width="15%">
          								 
          							</td>
          						</tr>
          
          					</tbody>
          				</table>
          			</form>
          		</div>
            		
            </body>
          </html>
          

          (2),根據模板及表元數據生成新增jsp頁面

          import freemarker.template.Configuration;
          import freemarker.template.Template;
          
          import java.io.File;
          import java.io.FileOutputStream;
          import java.io.OutputStreamWriter;
          import java.io.Writer;
          import java.sql.*;
          import java.util.ArrayList;
          import java.util.HashMap;
          import java.util.List;
          import java.util.Map;
          
          /**
           * @date: 2022/12/03 08:27
           * @desc: 測試入口
           */
          public class TestCls {
          
              public static void main(String[] args) throws Exception {
                  new TestCls().outTemplate();
              }
          
              // 輸出到模板
              private void outTemplate() throws Exception {
          
                  Configuration configuration=new Configuration();
                  configuration.setDirectoryForTemplateLoading(new File("F:\\xbl\\myResource\\temp_test_"));
                  Template template=configuration.getTemplate("add_jsp_.ftl");
          
                  Map<String, List<EntryInfoPo>> dataMap=new HashMap<String, List<EntryInfoPo>>();
                  List<EntryInfoPo> listEntryInfo=new ArrayList<EntryInfoPo>();
                  listEntryInfo=testMetaAddComment();
                  dataMap.put("mapDataList", listEntryInfo );
          
                  // 表注釋
                  dataMap.put("mapDataTableComment", testTableComment());
          
                  Writer outputWriter=new OutputStreamWriter(new FileOutputStream(new File("F:\\xbl\\myResource\\temp_test_\\add_.jsp") ) );
          //        Writer outputWriter=new OutputStreamWriter(System.out );
                  template.process(dataMap, outputWriter);
                  System.out.println("輸出完成!");
                  outputWriter.close();
              }
          
              // 表注釋
              private List<EntryInfoPo> testTableComment() throws Exception {
          
                  List<EntryInfoPo> listTableComment=new ArrayList<EntryInfoPo>();
                  EntryInfoPo entryInfoPo=new EntryInfoPo();
                  entryInfoPo.setColumnName("testT00_userDto");
                  entryInfoPo.setColumnComment("用戶管理");
                  listTableComment.add(entryInfoPo);
                  return listTableComment;
              }
          
              private List<EntryInfoPo> testMetaAddComment() throws Exception {
          
                  List<EntryInfoPo> listEntryInfoPo=new ArrayList<EntryInfoPo>();
                  Connection connection=getDataBaseConnection();
                  Statement statement=connection.createStatement();
                  ResultSet resultSet=statement.executeQuery("show full columns from t00_user ");
                  while (resultSet.next()) {
          
                      String columnComment=resultSet.getString("Comment");
                      String columnName=resultSet.getString("Field");
                      EntryInfoPo entryInfoPo=new EntryInfoPo();
                      entryInfoPo.setColumnName(columnName);
                      entryInfoPo.setColumnComment(columnComment);
                      listEntryInfoPo.add(entryInfoPo);
                  }
                  return listEntryInfoPo;
              }
              private Connection getDataBaseConnection() throws Exception {
                  // 連接數據庫
                  Class.forName("com.mysql.jdbc.Driver");
                  String databaseUrl="jdbc:mysql://127.0.0.1:3306/grcdb05?useUnicode=true&characterEncoding=utf8";
                  Connection connection=DriverManager.getConnection(databaseUrl, "root", "root");
                  return connection;
              }
          }

          (3),創建一個空文件add_.jsp,執行步驟(2)能生成頁面


          主站蜘蛛池模板: 国产伦精品一区二区三区无广告| 精品人妻少妇一区二区| 无码精品人妻一区| 消息称老熟妇乱视频一区二区| 国产萌白酱在线一区二区| 日韩内射美女人妻一区二区三区 | 中文字幕AV一区二区三区人妻少妇| 无码AV一区二区三区无码| 亚洲高清毛片一区二区| 中文字幕精品一区影音先锋| 精品一区二区三区在线视频| 国产乱码伦精品一区二区三区麻豆| 免费无码AV一区二区| 国产一区二区免费在线| 国产精品av一区二区三区不卡蜜| 中文字幕亚洲综合精品一区| 九九久久99综合一区二区| 精品人体无码一区二区三区| 一区二区三区福利视频| 日本一区二区三区精品国产 | 日韩精品无码一区二区三区不卡 | 国产精品美女一区二区视频| 精品一区二区三区免费观看| 亚洲人成网站18禁止一区| 变态拳头交视频一区二区| 精品国产AⅤ一区二区三区4区 | 无码人妻一区二区三区兔费| 国产美女一区二区三区| 精品福利视频一区二区三区| 精品无码AV一区二区三区不卡| 高清一区二区三区免费视频| 免费无码毛片一区二区APP| 亚洲国产一区在线观看| 国产精品一区二区毛卡片| 成人一区二区三区视频在线观看 | 美女视频免费看一区二区| 亚洲毛片不卡av在线播放一区| 国产免费伦精品一区二区三区| 伦理一区二区三区| 色久综合网精品一区二区| 亚洲日韩一区精品射精|