整合營銷服務商

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

          免費咨詢熱線:

          JSP 連接數據庫

          JSP 連接數據庫

          創建測試數據

          接下來我們在 MySQL 中創建 RUNOOB 數據庫,并創建 websites 數據表,表結構如下:

          CREATE TABLE `websites` (

          `id` int(11) NOT NULL AUTO_INCREMENT,

          `name` char(20) NOT NULL DEFAULT '' COMMENT '站點名稱',

          `url` varchar(255) NOT NULL DEFAULT '',

          `alexa` int(11) NOT NULL DEFAULT '0' COMMENT 'Alexa 排名',

          `country` char(10) NOT NULL DEFAULT '' COMMENT '國家',

          PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

          插入一些數據:

          INSERT INTO `websites` VALUES ('1', 'Google', 'https://www.google.cm/', '1', 'USA'), ('2', '淘寶', 'https://www.taobao.com/', '13', 'CN'), ('3', '菜鳥教程', 'http://www.runoob.com', '5892', ''), ('4', '微博', 'http://weibo.com/', '20', 'CN'), ('5', 'Facebook', 'https://www.facebook.com/', '3', 'USA');

          數據表顯示如下:

          SELECT操作

          接下來的這個例子告訴我們如何使用JSTL SQL標簽來運行SQL SELECT語句:

          <%@ page language="java" contentType="text/html; charset=UTF-8"

          pageEncoding="UTF-8"%><%@ page import="java.io.*,java.util.*,java.sql.*"%><%@ page import="javax.servlet.http.*,javax.servlet.*" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>

          <html><head><title>SELECT 操作</title></head><body><!--

          JDBC 驅動名及數據庫 URL

          數據庫的用戶名與密碼,需要根據自己的設置

          useUnicode=true&characterEncoding=utf-8 防止中文亂碼

          --><sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"

          url="jdbc:mysql://localhost:3306/RUNOOB?useUnicode=true&characterEncoding=utf-8"

          user="root" password="123456"/>

          <sql:query dataSource="${snapshot}" var="result">SELECT * from websites;</sql:query><h1>JSP 數據庫實例 - 菜鳥教程</h1><table border="1" width="100%"><tr>

          <th>ID</th>

          <th>站點名</th>

          <th>站點地址</th></tr><c:forEach var="row" items="${result.rows}"><tr>

          <td><c:out value="${row.id}"/></td>

          <td><c:out value="${row.name}"/></td>

          <td><c:out value="${row.url}"/></td></tr></c:forEach></table>

          </body></html>

          訪問這個JSP例子,運行結果如下:

          INSERT操作

          這個例子告訴我們如何使用JSTL SQL標簽來運行SQL INSERT語句:

          <%@ page language="java" contentType="text/html; charset=UTF-8"

          pageEncoding="UTF-8"%><%@ page import="java.io.*,java.util.*,java.sql.*"%><%@ page import="javax.servlet.http.*,javax.servlet.*" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>

          <html><head><title>SELECT 操作</title></head><body><!--

          JDBC 驅動名及數據庫 URL

          數據庫的用戶名與密碼,需要根據自己的設置

          useUnicode=true&characterEncoding=utf-8 防止中文亂碼

          --><sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"

          url="jdbc:mysql://localhost:3306/RUNOOB?useUnicode=true&characterEncoding=utf-8"

          user="root" password="123456"/><!--

          插入數據

          --><sql:update dataSource="${snapshot}" var="result">INSERT INTO websites (name,url,alexa,country) VALUES ('菜鳥教程移動站', 'http://m.runoob.com', 5093, 'CN');</sql:update><sql:query dataSource="${snapshot}" var="result">SELECT * from websites;</sql:query><h1>JSP 數據庫實例 - 菜鳥教程</h1><table border="1" width="100%"><tr>

          <th>ID</th>

          <th>站點名</th>

          <th>站點地址</th></tr><c:forEach var="row" items="${result.rows}"><tr>

          <td><c:out value="${row.id}"/></td>

          <td><c:out value="${row.name}"/></td>

          <td><c:out value="${row.url}"/></td></tr></c:forEach></table>

          </body></html>

          訪問這個JSP例子,運行結果如下:

          DELETE操作

          這個例子告訴我們如何使用JSTL SQL標簽來運行SQL DELETE語句:

          <%@ page language="java" contentType="text/html; charset=UTF-8"

          pageEncoding="UTF-8"%><%@ page import="java.io.*,java.util.*,java.sql.*"%><%@ page import="javax.servlet.http.*,javax.servlet.*" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>

          <html><head><title>SELECT 操作</title></head><body><!--

          JDBC 驅動名及數據庫 URL

          數據庫的用戶名與密碼,需要根據自己的設置

          useUnicode=true&characterEncoding=utf-8 防止中文亂碼

          --><sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"

          url="jdbc:mysql://localhost:3306/RUNOOB?useUnicode=true&characterEncoding=utf-8"

          user="root" password="123456"/><!--

          刪除 ID 為 11 的數據

          --><sql:update dataSource="${snapshot}" var="count">

          DELETE FROM websites WHERE Id=? <sql:param value="" /></sql:update><sql:query dataSource="${snapshot}" var="result">SELECT * from websites;</sql:query><h1>JSP 數據庫實例 - 菜鳥教程</h1><table border="1" width="100%"><tr>

          <th>ID</th>

          <th>站點名</th>

          <th>站點地址</th></tr><c:forEach var="row" items="${result.rows}"><tr>

          <td><c:out value="${row.id}"/></td>

          <td><c:out value="${row.name}"/></td>

          <td><c:out value="${row.url}"/></td></tr></c:forEach></table>

          </body></html>

          訪問這個JSP例子,運行結果如下:

          UPDATE操作

          這個例子告訴我們如何使用JSTL SQL標簽來運行SQL UPDATE語句:

          <%@ page language="java" contentType="text/html; charset=UTF-8"

          pageEncoding="UTF-8"%><%@ page import="java.io.*,java.util.*,java.sql.*"%><%@ page import="javax.servlet.http.*,javax.servlet.*" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>

          <html><head><title>SELECT 操作</title></head><body><!--

          JDBC 驅動名及數據庫 URL

          數據庫的用戶名與密碼,需要根據自己的設置

          useUnicode=true&characterEncoding=utf-8 防止中文亂碼

          --><sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"

          url="jdbc:mysql://localhost:3306/RUNOOB?useUnicode=true&characterEncoding=utf-8"

          user="root" password="123456"/><!--

          修改 ID 為 3 的名字:菜鳥教程改為 RUNOOB

          --><c:set var="SiteId" value="3"/>

          <sql:update dataSource="${snapshot}" var="count">

          UPDATE websites SET name='RUNOOB' WHERE Id=? <sql:param value="${SiteId}" /></sql:update><sql:query dataSource="${snapshot}" var="result">SELECT * from websites;</sql:query><h1>JSP 數據庫實例 - 菜鳥教程</h1><table border="1" width="100%"><tr>

          <th>ID</th>

          <th>站點名</th>

          <th>站點地址</th></tr><c:forEach var="row" items="${result.rows}"><tr>

          <td><c:out value="${row.id}"/></td>

          <td><c:out value="${row.name}"/></td>

          <td><c:out value="${row.url}"/></td></tr></c:forEach></table>

          </body></html>

          訪問這個JSP例子,運行結果如下:

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!

          當瀏覽器請求一個網頁時,它會向網絡服務器發送一系列不能被直接讀取的信息,因為這些信息是作為HTTP信息頭的一部分來傳送的。您可以查閱HTTP協議來獲得更多的信息。

          下表列出了瀏覽器端信息頭的一些重要內容,在以后的網絡編程中將會經常見到這些信息:

          信息描述
          Accept指定瀏覽器或其他客戶端可以處理的MIME類型。它的值通常為 image/pngimage/jpeg
          Accept-Charset指定瀏覽器要使用的字符集。比如 ISO-8859-1
          Accept-Encoding指定編碼類型。它的值通常為 gzipcompress
          Accept-Language指定客戶端首選語言,servlet會優先返回以當前語言構成的結果集,如果servlet支持這種語言的話。比如 en,en-us,ru等等
          Authorization在訪問受密碼保護的網頁時識別不同的用戶
          Connection表明客戶端是否可以處理HTTP持久連接。持久連接允許客戶端或瀏覽器在一個請求中獲取多個文件。Keep-Alive 表示啟用持久連接
          Content-Length僅適用于POST請求,表示 POST 數據的字節數
          Cookie返回先前發送給瀏覽器的cookies至服務器
          Host指出原始URL中的主機名和端口號
          If-Modified-Since表明只有當網頁在指定的日期被修改后客戶端才需要這個網頁。 服務器發送304碼給客戶端,表示沒有更新的資源
          If-Unmodified-Since與If-Modified-Since相反, 只有文檔在指定日期后仍未被修改過,操作才會成功
          Referer標志著所引用頁面的URL。比如,如果你在頁面1,然后點了個鏈接至頁面2,那么頁面1的URL就會包含在瀏覽器請求頁面2的信息頭中
          User-Agent用來區分不同瀏覽器或客戶端發送的請求,并對不同類型的瀏覽器返回不同的內容

          HttpServletRequest類

          request對象是javax.servlet.http.HttpServletRequest類的實例。每當客戶端請求一個頁面時,JSP引擎就會產生一個新的對象來代表這個請求。

          request對象提供了一系列方法來獲取HTTP信息頭,包括表單數據,cookies,HTTP方法等等。

          接下來將會介紹一些在JSP編程中常用的獲取HTTP信息頭的方法。詳細內容請見下表:

          序號方法& 描述
          1Cookie[] getCookies()返回客戶端所有的Cookie的數組
          2Enumeration getAttributeNames()返回request對象的所有屬性名稱的集合
          3Enumeration getHeaderNames()返回所有HTTP頭的名稱集合
          4Enumeration getParameterNames()返回請求中所有參數的集合
          5HttpSession getSession()返回request對應的session對象,如果沒有,則創建一個
          6HttpSession getSession(boolean create)返回request對應的session對象,如果沒有并且參數create為true,則返回一個新的session對象
          7Locale getLocale()返回當前頁的Locale對象,可以在response中設置
          8Object getAttribute(String name)返回名稱為name的屬性值,如果不存在則返回null。
          9ServletInputStream getInputStream()返回請求的輸入流
          10String getAuthType()返回認證方案的名稱,用來保護servlet,比如 "BASIC" 或者 "SSL" 或 null 如果 JSP沒設置保護措施
          11String getCharacterEncoding()返回request的字符編碼集名稱
          12String getContentType()返回request主體的MIME類型,若未知則返回null
          13String getContextPath()返回request URI中指明的上下文路徑
          14String getHeader(String name)返回name指定的信息頭
          15String getMethod()返回此request中的HTTP方法,比如 GET,,POST,或PUT
          16String getParameter(String name)返回此request中name指定的參數,若不存在則返回null
          17String getPathInfo()返回任何額外的與此request URL相關的路徑
          18String getProtocol()返回此request所使用的協議名和版本
          19String getQueryString()返回此 request URL包含的查詢字符串
          20String getRemoteAddr()返回客戶端的IP地址
          21String getRemoteHost()返回客戶端的完整名稱
          22String getRemoteUser()返回客戶端通過登錄認證的用戶,若用戶未認證則返回null
          23String getRequestURI()返回request的URI
          24String getRequestedSessionId()返回request指定的session ID
          25String getServletPath()返回所請求的servlet路徑
          26String[] getParameterValues(String name)返回指定名稱的參數的所有值,若不存在則返回null
          27boolean isSecure()返回request是否使用了加密通道,比如HTTPS
          28int getContentLength()返回request主體所包含的字節數,若未知的返回-1
          29int getIntHeader(String name)返回指定名稱的request信息頭的值
          30int getServerPort()返回服務器端口號

          HTTP信息頭示例

          在這個例子中,我們會使用HttpServletRequest類的getHeaderNames()方法來讀取HTTP信息頭。這個方法以枚舉的形式返回當前HTTP請求的頭信息。

          獲取Enumeration對象后,用標準的方式來遍歷Enumeration對象,用hasMoreElements()方法來確定什么時候停止,用nextElement()方法來獲得每個參數的名字。

          <%@ page language="java" contentType="text/html; charset=UTF-8"

          pageEncoding="UTF-8"%><%@ page import="java.io.*,java.util.*" %><!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鳥教程(runoob.com)</title></head><body><h2>HTTP 頭部請求實例</h2><table width="100%" border="1" align="center"><tr bgcolor="#949494"><th>Header Name</th><th>Header Value(s)</th></tr><%

          Enumeration headerNames=request.getHeaderNames();

          while(headerNames.hasMoreElements()) {

          String paramName=(String)headerNames.nextElement();

          out.print("<tr><td>" + paramName + "</td>\n");

          String paramValue=request.getHeader(paramName);

          out.println("<td> " + paramValue + "</td></tr>\n");

          }%></table></body></html>

          訪問main.jsp,將會得到以下結果:

          您可以在上面代碼中嘗試HttpServletRequest類的其它方法。

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!

          SP:Java Server Pages。JSP是一種網頁的編碼格式,不同于HTML的是JSP中是由 HTML中的標簽指令 和 Java邏輯代碼 拼湊而成, 其中的Java代碼類似于JavaScript中的邏輯代碼, 但相對比來說JSP中的Java代碼更方便閱讀和書寫.

          一:JSP的運行原理

          當JSP頁面被運行時,WEB容器會把請求交給JSP引擎處理,會將JSP翻譯成一個_jspServlet,然后按照Servlet的調用方式來進行調用,

          瀏覽器向服務器發請求,不管訪問的是什么資源,其實都是在訪問Servlet,所以當訪問一個jsp頁面時,其實也是在訪問一個Servlet,服務器在執行jsp的時候,首先把jsp翻譯成一個Servlet,所以我們訪問jsp時,其實不是在訪問jsp,而是在訪問jsp翻譯過后的那個Servlet,

          二:Tomcat

          Tomcat在Web中的作用:

          Tomcat是Web中的容器,

          當客戶在Web服務器中輸入請求的時候, 如果請求的動態頁面, 那么Web服務器會創建一個Servlet來處理, Servlet就是Java代碼, 只是在服務器端的Java代碼, Servlet通過配置文件來攔截客戶所發出的請求, 并進行相應的處理, 最后反饋到客戶端.

          在這一系列的請求中,Web服務器是如何創建出Servlet來對請求進行處理? 而Tomcat的作用就是幫助Web服務器來創建Servlet的

          Tomcat是應用(java)服務器,它只是一個Servlet容器,是Apache的擴展,處理動態頁面的部分

          Tomcat各個文件夾的含義

          • bin:二進制執行文件。里面最常用的文件是startup.bat
          • conf:配置目錄。里面最核心的文件是server.xml。可以在里面改端口號等。默認端口號是8080,也就是說,此端口號不能被其他應用程序占用。
          • lib:庫文件。tomcat運行時需要的jar包所在的目錄
          • logs:日志
          • temp:臨時產生的文件,即緩存
          • webapps:web的應用程序。web應用放置到此目錄下瀏覽器可以直接訪問
          • work:編譯以后的class文件。

          當我們通過瀏覽器訪問index.jsp時,服務器首先將index.jsp翻譯成一個index_jsp.class,在Tomcat服務的work\Catalina\localhost\項目名\org\apache\jsp 目錄下可以看到index_jsp.class的源代碼文件index_jsp.java

          index_jsp這個類是繼承 org.apache.jasper.runtime.HttpJspBase這個類的,通過查看Tomcat服務器的源代碼,可以知道在apache-tomcat-6.0.20-src\java\org\apache\jasper\runtime目錄下存HttpJspBase這個類的源代碼文件

          HttpJspBase 類是繼承 HttpServlet 的,所以 HttpJspBase 類是一個 Servlet ,而 index_jsp 又是繼承 HttpJspBase類的,所以index_jsp類也是一個Servlet,所以當瀏覽器訪問服務器上的index.jsp頁面時,其實就是在訪問index_jsp這個Servlet,index_jsp這個Servlet使用_jspService這個方法處理請求。

          三:Jsp中的HTML代碼和Java代碼如何發送到客戶端

          1:jsp中的代碼是由 Java代碼 和 HTML 代碼組成的 但是兩種不同的代碼是如何實現他們的作用的?

          在客戶端發出請求時(請求的是動態代碼) 但是客戶端卻只能看到HTML代碼, Java代碼是客戶端看不到的

          原因是: 請求的JSP頁面中,所有的代碼是通過了Web服務器(在Tomcat下)編譯后的Servlet代碼, 在jsp中編寫的java代碼和html代碼都會被翻譯到_jspService方法中去,在jsp中編寫的java代碼會原封不動地翻譯成java代碼,如<%out.print("HelloJsp");%>直接翻譯成out.print("Hello Jsp");,而HTML代碼則會翻譯成使用out.write("<html標簽>\r\n");的形式輸出到瀏覽器。在jsp頁面中編寫的html排版標簽都是以out.write("<html標簽>\r\n");的形式輸出到瀏覽器,瀏覽器拿到html代碼后才能夠解析執行html代碼。

          當執行_jspService方法處理請求時,就會執行在jsp編寫的java代碼了,所以Jsp頁面中的java代碼服務器是通過調用_jspService方法處理請求時執行的。(_jspService中的Java代碼是實現動態頁面的邏輯基礎)


          主站蜘蛛池模板: 相泽亚洲一区中文字幕| 国产成人综合精品一区| 亚洲AV日韩AV一区二区三曲| 一区二区三区视频在线观看| 亚洲AV网一区二区三区| 国模少妇一区二区三区| 欧美日韩国产免费一区二区三区 | 久久精品国产第一区二区三区| 国产精品无码一区二区在线| 国产一区二区三区久久精品| 波多野结衣在线观看一区二区三区| 国产日韩一区二区三免费高清 | 久久一区二区精品综合| 精品少妇一区二区三区在线 | 中文字幕无线码一区| 精品国产福利在线观看一区| 在线播放一区二区| 国产成人久久精品一区二区三区 | 精品国产一区二区三区久久久狼| 久久无码精品一区二区三区| 国产成人精品亚洲一区| 欧美日韩一区二区成人午夜电影 | 亚洲视频在线一区| 久久国产精品无码一区二区三区| 国产综合一区二区| 中文字幕一区二区三区四区| 日亚毛片免费乱码不卡一区| 无码日韩AV一区二区三区| 亚洲AV成人精品一区二区三区| 日韩精品人妻一区二区三区四区| 亚洲丰满熟女一区二区v| 日本视频一区在线观看免费| 久久中文字幕无码一区二区| 国产在线乱子伦一区二区| 在线观看精品一区| 一区二区在线视频免费观看| 日本一区二区在线不卡| 无码人妻视频一区二区三区| 麻豆果冻传媒2021精品传媒一区下载 | 99久久国产精品免费一区二区| 2014AV天堂无码一区|