servlet的功能
1)向瀏覽器響應內容
- (1)
response.setContentType("text/html;charset=utf-8");
響應到瀏覽器的內容支持標記,支持CSS屬性,同時也能夠設置中文亂碼問題。 - (2)
PrintWriter pw=response.getWriter();
pw.println(“你好”);
pw.write(“<div>你好</div>”);
2)接收瀏覽器發送過來的請求
- (1)瀏覽器發送到服務器端的請求中獲取參數值的方法(兩種)如下:
-
方法一:
請求中參數值的傳遞格式:key1=value1&key2=value2&key3=value3…
http://localhost:8080/servlettest/registe?username=zs&pwd=aaa
key值和value值都不一樣使用的方法:
request.getParameter(key) ---> value(String)
-
方法二:
請求中參數值的傳遞格式:key=value1&key=value2&key=value3&key=value4…
key值一樣,value值不一樣的使用方法:
request.getParameterValues(key); ---> value(String[])
-
- (2)瀏覽器發送到服務器端的請求中,參數值中文亂碼問題
- ① get請求方式,中文亂碼問題
String s11=new String(s1.getBytes("iso-8859-1"),"utf-8");
- ② post請求方式,中文亂碼問題
request.setCharacterEncoding("utf-8");
- ① get請求方式,中文亂碼問題
servlet的功能關係圖
瀏覽器端向服務器端發送請求的方式
(1)get請求方式
瀏覽器發送get請求的情況:
- ①在瀏覽器地址欄輸入一個地址回車的請求
- ②點擊超鏈接
<a href=”http://www.baidu.com”>你好</a>
<a href=”url-pattern的地址”>hello</a>
當點擊hello,發送的請求是url-pattern對應的servlet。
<a href=”url-pattern地址?key1=value1&key2=value2...”>hello</a>
- ③表單默認提交,或者設置屬性
method=”get”
get請求方式,會將數據在瀏覽器地址欄上一起發送,提交的數據只能是少量的數據,因爲數據會顯示在瀏覽器地址欄上,數據相對來說不安全,但是效率高一些。
(2)post請求方式
瀏覽器發送post請求的情況:
- ①表單提交,需要設置表單屬性
method=”post”
post請求方式,會將數據封裝在一個包中,隨着請求一起發送,瀏覽器地址欄是看不到這些數據的,這種方式可提交大量數據,相對比較安全,但是效率相對低一些。
代碼部分:
RegisteServlet.java
package com.bzxy.test;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//表示服務器端的一個servlet,該servlet主要功能是接收瀏覽器端registe.html頁面
//發送過來的請求和請求中包含的參數
//瀏覽器端(頁面) <==> 服務器端(servlet) <==> 服務器端(數據庫)
public class RegisteServlet extends HttpServlet{
//調用service方法
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//接收參數之前設置中文編碼 -- 支持post請求方式
/*對應registe.html的<form action="registe" method="post">*/
request.setCharacterEncoding("utf-8");
//System.out.println("測試...");
//未添加以下代碼時,訪問網址http://localhost:8080/servlettest/registe.html
//點擊提交之後,頁面空白,網址變爲:http://localhost:8080/servlettest/registe?username=...&pwd=...&smt=...
//##用戶名用英文輸入,否則亂碼,需進一步處理
//request請求;response響應
//http://localhost:8080/servlettest/registe?username=zs&pwd=aaa
//通過request接收請求參數的值
String s1 = request.getParameter("username");
//如果是get請求方式提交的值是中文,s1是亂碼,也就是??????
//瀏覽器如果採用的是get方法提交的數據,編碼默認採用的是"iso-8859-1"編碼
//通過String字符串類進行編碼的轉換,由"iso-8859-1"編碼轉換爲"urf-8"編碼
//你好 -用-> iso-8859-1 -解碼-> 011100111111... -用-> utf-8 -重新生成-> 你好
//getBytes 獲得
String s11 = new String(s1.getBytes("iso-8859-1"), "utf-8");
String s2 = request.getParameter("pwd");
//http://localhost:8080/servlettest/registe
//?username=zs&pwd=aa&
///love=readbook&love=write&love=playbook&smt=%E6%8F%90%E4%BA%A4
//String[]表示字符串類型的數組,該數組中應該存儲4個value值
String[] s3 = request.getParameterValues("love");
/*對應registe.html的<a href="registe?username=ls&pwd=123&love=ds&love=xz&id=1001">點我可訪問RgisteServlet</a>*/
//接收超鏈接請求中參數值 id = 1001
//String s4 = request.getParameter("id");
//用戶名輸入:你好
System.out.println("原始:" + s1); //原始:??????
System.out.println("轉碼後:" + s11); //轉碼後:你好
//在獲取PrintWriter之前寫上中文編碼設置
response.setContentType("text/html;charset=utf-8");
//設置之後,println不起效果,只能用標記換行 兩種方式:可自己加換行,也可自己直接輸出換行
//通過response向頁面返回結果
PrintWriter pw = response.getWriter();
pw.println("<div style='color:red;'>以下爲通過response向頁面的返回結果:</div>");
pw.println("<br/>");
//pw.println(s1 + "<br/>");
pw.println(s11 + "<br/>");
pw.println(s2 + "<br/>");
//s3 --> readbook write playball online
//下標 0 1 2 3
//若多選項選擇包含readbook,則顯示readbook
pw.println(s3[0] + "<br/>"); //根據下標對應的內容輸出
//若四個多選項都選擇,則顯示[readbook, write, playbook, online]
pw.println(Arrays.toString(s3)); //藉助於toString方法,可直接將數組中所有的內容輸出
//pw.println(s4);
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 對com.bzxy.test包下的HelloServlet進行配置 -->
<servlet>
<servlet-name>hello</servlet-name> <!-- 對要配置的Servlet起別名 -->
<servlet-class>com.bzxy.test.HelloServlet</servlet-class> <!-- 配置的Servlet的位置,寫所在的包名+類名即可 -->
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name> <!-- 要和上面的servlet-name的內容保持一致 -->
<url-pattern>/ho</url-pattern> <!-- 瀏覽器訪問服務器端servlet的url地址 -->
</servlet-mapping>
<!-- 對com.bzxy.test包下的RegisteServlet進行配置 -->
<servlet>
<servlet-name>RegisteServlet</servlet-name> <!-- 對要配置的Servlet起別名 -->
<servlet-class>com.bzxy.test.RegisteServlet</servlet-class> <!-- 配置的Servlet的位置,寫所在的包名+類名即可 -->
</servlet>
<servlet-mapping>
<servlet-name>RegisteServlet</servlet-name> <!-- 要和上面的servlet-name的內容保持一致 -->
<url-pattern>/registe</url-pattern> <!-- 瀏覽器訪問服務器端servlet的url地址 -->
</servlet-mapping>
</web-app>
registe.html
<!-- 版本信息 -->
<!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>Insert title here</title>
</head>
<body>
<!-- action="" 表示點擊提交按鈕此表單會向哪個servlet發送請求,雙引號中寫哪一個url-pattern地址,
此表單就會向哪一個servlet發送請求。【訪問頁面,點擊提交,成功訪問到RegisteServlet】-->
<!-- 默認瀏覽器地址欄中會顯示數據,method="get";而不顯示則修改爲,method="post" -->
<form action="registe" method="get">
用戶名:<input type="text" name="username"/>
<br/>
密碼:<input type="password" name="pwd"/>
<br/>
興趣愛好:讀書<input type="checkbox" name="love" value="readbook"/>
寫字<input type="checkbox" name="love" value="write"/>
打球<input type="checkbox" name="love" value="playball"/>
上網<input type="checkbox" name="love" value="online"/>
<br/>
<input type="submit" name="smt" value="提交"/>
</form>
<!-- 測試超鏈接的請求方式 -->
<a href="http://www.baidu.com">你好</a>
<br/>
<!-- 沒有傳遞參數,username接收爲空,異常爲NullPointerException -->
<!-- <a href="registe">hello</a> -->
<a href="ho">hello</a>
<br/>
<a href="registe?username=ls&pwd=123&love=ds&love=xz&id=1001">點我可訪問RegisteServlet</a>
</body>
</html>
效果圖
若在瀏覽器中輸入http://localhost:8080/servlettest/registe.html
,則如圖下顯示:
點擊超鏈接 你好
,則如圖下顯示:
點擊超鏈接 hello
,則如下圖顯示:
點擊超鏈接 點我可訪問RgisteServlet
,則如下圖顯示:
點擊表單中信息,如:輸入用戶名,密碼及選擇興趣愛好,點擊 提交
,則如下圖顯示:
數據庫 --> MySQL數據庫 – 免安裝版本的
打開命令行窗口進行操作:window+R–>cmd或者左下角搜索->cmd
命令行窗口中簡單的操作命令:
1)切換某個盤 d:回車 e:回車 f:回車
2)dir命令:等價於linux系統中的ls命令,查看當前路徑下的所有內容。
3)cd命令:進入目錄,或者返回上一級目錄
cd … 返回上一級目錄
cd xx 進入xx目錄
免安裝版本的mysql數據庫的啓動方式
(1)啓動mysql服務
通過命令行窗口的方式,進入mysql文件夾中的bin目錄中,
輸入命令:mysqld --console,該命令啓動mysql服務,服務啓動後
該命令行窗口不要關閉。
效果圖:
(2)登陸mysql數據庫
重新打開一個新的命令行窗口,同樣進入mysql文件夾中的bin目錄
輸入命令:mysql -h localhost -u root -p,沒有密碼,直接回車登陸即可。
效果圖:
登陸mysql成功:
顯示 mysql>
mysql數據庫的簡單操作
(1)先操作庫
- ① 查看所有的庫
show databases;
例:
- ② 刪除一個庫
drop database 庫名;
注意:(information_schema、mysql和test不要刪除)
例:
檢查:
- ③ 創建一個庫
create database 庫名;
例:
檢查:
- ④ 使用一個庫
use 庫名;
例:
- ⑤ 查看使用的是哪個庫
select database();
- ⑥ 查看當前使用的庫下所有的表
show tables;
注意:在哪個庫下查看
(2)在庫下操作表以及表中的數據
- ① 創建一個表
create table 表名;
例:
可查看庫下表:
代碼部分如下:
create table emp(
id int primary key,
name varchar(10),
pwd char(10),
salary double,
birthday date
);
- ② 查看錶結構
desc 表名;
例:
- ③ 關於表中數據的增刪改查操作
插入數據:
例:
另外一種插入日期的形式:
查詢數據:
查看錶中所有信息:
查看錶中id,name中信息:
修改數據:
查看是否修改:
刪除數據:
查看是否修改:
代碼部分:
insert into emp values(1, ’zs’, ‘abc123’, 30002.3, ‘2020-04-03’);
insert into emp values(2,'ls','123456',6430.32,20200404);
select * from emp;
update emp set salary=643.32 where id=2;
delete from emp where id=1;