基本概念下手,讓我們來創建一個簡單的表,并在表中創建幾條記錄。
創建測試數據
接下來我們在 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');
訪問數據庫
下面的實例演示了如何使用 Servlet 訪問 RUNOOB 數據庫。
package com.runoob.test;import java.io.IOException;import java.io.PrintWriter;import java.sql.*;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class DatabaseAccess */@WebServlet("/DatabaseAccess")public class DatabaseAccess extends HttpServlet { private static final long serialVersionUID=1L; // JDBC 驅動名及數據庫 URL static final String JDBC_DRIVER="com.mysql.jdbc.Driver"; static final String DB_URL="jdbc:mysql://localhost:3306/RUNOOB"; // 數據庫的用戶名與密碼,需要根據自己的設置 static final String USER="root"; static final String PASS="123456"; /** * @see HttpServlet#HttpServlet() */ public DatabaseAccess() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Connection conn=null; Statement stmt=null; // 設置響應內容類型 response.setContentType("text/html;charset=UTF-8"); PrintWriter out=response.getWriter(); String title="Servlet Mysql 測試 - 菜鳥教程"; String docType="<!DOCTYPE html>\n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor=\"#f0f0f0\">\n" + "<h1 align=\"center\">" + title + "</h1>\n"); try{ // 注冊 JDBC 驅動器 Class.forName("com.mysql.jdbc.Driver"); // 打開一個連接 conn=DriverManager.getConnection(DB_URL,USER,PASS); // 執行 SQL 查詢 stmt=conn.createStatement(); String sql; sql="SELECT id, name, url FROM websites"; ResultSet rs=stmt.executeQuery(sql); // 展開結果集數據庫 while(rs.next()){ // 通過字段檢索 int id=rs.getInt("id"); String name=rs.getString("name"); String url=rs.getString("url"); // 輸出數據 out.println("ID: " + id); out.println(", 站點名稱: " + name); out.println(", 站點 URL: " + url); out.println("<br />"); } out.println("</body></html>"); // 完成后關閉 rs.close(); stmt.close(); conn.close(); } catch(SQLException se) { // 處理 JDBC 錯誤 se.printStackTrace(); } catch(Exception e) { // 處理 Class.forName 錯誤 e.printStackTrace(); }finally{ // 最后是用于關閉資源的塊 try{ if(stmt!=null) stmt.close(); }catch(SQLException se2){ } try{ if(conn!=null) conn.close(); }catch(SQLException se){ se.printStackTrace(); } } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); }}
現在讓我們來編譯上面的 Servlet,并在 web.xml 文件中創建以下條目:
.... <servlet> <servlet-name>DatabaseAccess</servlet-name> <servlet-class>com.runoob.test.DatabaseAccess</servlet-class> </servlet> <servlet-mapping> <servlet-name>DatabaseAccess</servlet-name> <url-pattern>/TomcatTest/DatabaseAccess</url-pattern> </servlet-mapping>....
ervlet里面的方法(也叫Servlet中的生命周期):是因為Servlet方法牽扯到Servlet的生命周期。
如何使用瀏覽器訪問Servlet的實現類
因為Servlet實際上是接口,我們訪問的其實是Servlet的實現類
首先我們需要配置文件設置一下,當我們使用瀏覽器服務器的時候
package cn.itcast.web.servlet;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class ServletDemo2 implements Servlet{
/**
* 銷毀方法
* 在服務器正常關閉時,執行,執行一次。
*/
@Override
public void destroy() {
System.out.println("destroy...");
}
/**
* 獲取ServletConfig對象:其實就是Servlet的配置對象
*
*/
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
/**
* 獲取Servlet的一些信息,版本,作者等待
*/
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
/**
* 初始化方法
* 在Servlet被創建時,執行。只會執行一次。
*/
@Override
public void init(ServletConfig arg0) throws ServletException {
System.out.println("init...");
}
/**
* 提供服務的方法
* 每一次Servlet被訪問時,執行。執行多次
*/
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
System.out.println("service...");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
<display-name>Project1</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 配置Servlet -->
<servlet>
<servlet-name>demo2</servlet-name>
<servlet-class>cn.itcast.web.servlet.ServletDemo2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo2</servlet-name>
<url-pattern>/demo2</url-pattern>
</servlet-mapping>
</web-app>
面已經介紹了HttpServletResponse響應對象中的一些常用方法,這一小節介紹如何使用HttpServletResponse響應對象,將結果返回給瀏覽器客戶端。
使用Servlet返回HTML內容給客戶端,是一個比較常見的功能,因為Servlet本來就是用于JavaWeb開發的,而HTML就是Web開發的三大核心語言之一。這里給出一個響應HTML內容給客戶端的案例代碼:
package com.gitcode.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* @version 1.0.0
* @Date: 2024/2/10 20:20
* @Author ZhuYouBin
* @Description:
*/
public class HtmlResponseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 響應HTML內容
response.setContentType("text/html;charset=UTF-8");
// 獲取輸出流
PrintWriter writer=response.getWriter();
// 輸出HTML內容
writer.println("<!DOCTYPE html>");
writer.println("<html lang=\"en\">");
writer.println("<head>");
writer.println(" <meta charset=\"UTF-8\">");
writer.println(" <title>響應HTML內容</title>");
writer.println("</head>");
writer.println("<body>");
writer.println(" <h3>Hello World!你好,世界!</h3>");
writer.println("</body>");
writer.println("</html>");
// 關閉流
writer.close();
}
}
運行結果如下所示:
JSON格式在實際的Web開發中,可以說是最常用的數據交互格式啦,在一些前后端分離的項目中,都是采用JSON來進行數據交互的,所以這里給出一個響應JSON內容的案例代碼:
package com.gitcode.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* @version 1.0.0
* @Date: 2024/2/10 20:20
* @Author ZhuYouBin
* @Description:
*/
public class JsonResponseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 響應JSON內容
response.setContentType("application/json;charset=UTF-8");
// 獲取輸出流
PrintWriter writer=response.getWriter();
// 輸出JSON內容
writer.println("{");
writer.println(" \"username\":\"名字是Tom-2024\",");
writer.println(" \"password\":\"123456\"");
writer.println("}");
// 關閉流
writer.close();
}
}
運行結果如下所示:
以上,就是使用HttpServletResponse對象返回HTML和JSON數據格式。
今天就到這里,未完待續~~
*請認真填寫需求信息,我們會在24小時內與您取得聯系。