20200303
一、基礎知識介紹
Web應用程序:就是在瀏覽器里運行的程序,網站也可認為是一個小型web應用程序。
軟件架構:
B/S(Browser/Server)模式:瀏覽器/服務器模式,web應用程序就屬於B/S模式。
C/S(Client/Server)模式:客戶機/服務器模式,比如:QQ。
二、搭建Java web的開發環境
1、安裝JDK,JDK就是JAVA的開發工具包。
2、安裝Tomcat,web服務器軟件,主要用於網站的發布。PHP的常用的web服務器軟件是Apache,微軟的web服務器軟件是IIS。
3、安裝eclipse,集成開發環境(IDE)。
4、在eclipse中新建web項目
操作:"File"->"New"->"Dynamic web project"
項目的結構介紹:
Java Resource:放java程序的目錄,其中src里存放自己寫的java程序
build:主要放java程序編譯后class文件。
WebContent:站點根目錄,主要存放前端的資源和jsp文件。
5、新建一個jsp頁面
jsp頁面的組成:html代碼和java程序片組成。
在jsp頁面嵌入java代碼的三種方式:
Java程序片:<% %>
Java表達式:<%= %>
Java成員變量:<%! %>
java成員變量的生命周期為Tomcat的運行周期,就像Java類的靜態變量一樣,可被多個該類的對象所共享。
三、jsp頁面常見的內置對象
out,request,response,cookie,session,application
所謂內置對象就是直接在頁面中使用,不需要通過類來創建的對象。
1、out
out對象主要向瀏覽器輸出內容,它的主要方法是print(),println(),write()
2、request
請求對象,主要用來封裝客戶端的請求,包括客戶端的操作系統、瀏覽器、URL和發送數據。
常用的方法:
request.setCharacterEncoding("UTF-8") //設置請求對象的字符編碼,防止中文亂碼
request.getParameter("參數名") //獲得請求里的某個參數的值
request.getParameterValues("參數名") //獲得某個參數的多個值,返回的是一個字符串數組。
前端知識補充:
表單的中常用的控件
表單:<form method="請求方式" action="處理請求的服務器端地址">
請求方式:
GET:發送的數據是附在URL后面,在地址欄輸入地址或點鏈接都是GET請求。
POST:通常表單提交的請求最好是POST
文本框:<input type="text" >
id:給瀏覽器用的,name:是給服務器的
密碼框:<input type="password" >
提交按鈕:<input type="submit" >
重置按紐:<input type="reset" >
單選按紐:<input type="radio">
復選框:<input type="checkbox">
下拉列表:
<select name="...">
<option value="值1">值1</option>
...
</select>
3、response
響應對象,是由服務器對用戶請求作出的響應。
常用方法:
response.sendRedirect("地址") //重定向到某個頁面
例:response.redirect("login.jsp"); //跳轉到login.jsp頁面
response.setHeader("頁面文件頭的屬性名","頁面文件頭的屬性值")
例:response.setHeader("refresh","3;url=loginSuccess.jsp"); //3秒后跳轉login.jsp頁面
response.setContentType("響應內容打開的應用程序類型");
例:response.setContentType("application/msword"); //用本地的word打開響應內容
4、Session
會話,是指客戶端與服務器的一次會話,它的生命周期從用戶訪問網站開始直到離開網站。服務器為每一個訪問用戶創建session對象,每個用戶的session對象互不相同。
常用方法:
session.setAttribute("鍵名",鍵值) //鍵值的類型是Object類型
session.getAttribute("鍵名") //獲得session對象里面指定鍵名的鍵值,該方法返回類型為Object
session.removeAttribute("鍵名") ///從session對象里移除指定的元素
session.invalidate() //讓session失效,一般在用戶退出的時候使用
session的生存期限取決於下面幾個因素:
1)用戶是否關閉瀏覽器 2)是否調用了invalidate()方法 3)是否達到最長的"發呆"時間
5、application
應用程序對象,web服務器啟動后就會產生application對象,直到web服務器關閉,在此期間application對象可被所有的用戶所共享。
常用方法:
application.setAttribute("鍵名",鍵值)
application.getAttribute("鍵名")
application.removeAttribute("鍵名")
application和session的區別:
session跨頁面共享數據,但每個用戶的session數據各不相同,屬於用戶級的。
application跨頁面、跨用戶共享數據,屬於應用程序級的。
6、Cookie類
//強調一下,cookie不是jsp內置對象,只是它是web常用的技術,所以也放在這一塊寫了。
cookie是在客戶端保存一些文本信息,例如在保存用戶的用戶名和密碼,以便下次訪問這個網站時,直接從本地硬盤讀取相應的信息,封裝在請求對象里,服務器可從請求對象里獲得cookie信息。
常用操作:
(1)創建一個Cookie對象
Cookie c1=new Cookie("鍵名","鍵值"); //只能存儲文本型數據
(2)獲取cookie對象的鍵和值
cookie對象.getName() //獲得 cookie對象的鍵名
cookie對象.getValue() //獲得cookie對象的鍵值
(3)獲取某個cookie對象
請求對象里有多個cookie對象,如何來獲得指定的cookie對象?
//比如找鍵名為"username"的Cookie對象的值。
String userNameValue=""; Cookie[] cookies=request.getCookies();//獲取請求對象里的所有Cookie對象 for(Cookie c:cookies){ if(c.getName().equals("username")){ userNameValue=c.getValue(); break; } } //userNameValue就是鍵名為username的Cookie對象的值
四、JavaBean
Java類的一個實例,通常是實體類的一個對象,實體類一般是專門用來存儲數據的,一般要用公開的getter()和setter()方法。一般對應數據庫中的一張表。業務類一般用來處理業務邏輯的。
1、JSP的動作標記
(1)usebean
格式:<jsp:usebean id="bean的名字" class="bean的類名" scope="范圍" ></jsp:usebean>
功能:如果在指定的范圍(隱含對象:request,session,application)內,沒有對象,JSP就會創建一個bean,如果有的話,就取這個對象。
(2)getProperty
格式:<jsp:getProperty name="bean的名字" property="屬性名" />
功能:取bean的屬性
(3)setProperty
格式:<jsp:setProperty name="bean的名字" property="屬性名" value="屬性值" />
練習一:
1、新建一個產品類Product(實體類)
2、新建一個產品服務類ProductService(業務類)
添加一個方法getProducts(),獲得所有產品
3、新建jsp頁面ProductList.jsp,呈現所有產品。
練習二:利用session技術實現添加產品功能
1、設計一個添加產品的表單ProductForm.jsp
2、接收並處理輸入的產品數據的頁面AddProduct.jsp
3、修改並完善數據展示頁面ProductList.jsp
JSP的指令標記
<%@ page import ...%> //頁面指令
<%@ taglib prefix="c" ...%> //jstl標簽庫指令
<%@ include file="" %> //包含指令
五、 Servlet
概念:它就是Java程序,設計目的是開發動態web資源。
sevrlet是接口,HttpServlet實現Servlet接口的類,我們寫的Servlet程序是繼承HttpServlet,需要重寫兩個方法,一個doGet();另一個doPost();
創建Servlet程序
helloWorld(camel命名法)
HelloWorld(pascal命名法)
ASP
JSP(Java Server Page)
Servlet最常用的是作控制器(Controller),接收請求,調用業務類的方法處理數據,發送數據到視圖(JSP)。
MVC
M:Modal(模型)
V:View(視圖)
C:Controller(控制器),Servelt
六、EL和JSTL
EL(表達式語言)
可以在jsp頁面直接使用隱含對象(pageContext,request,session,application)
格式:${表達式}
例如:${product.name}
JSTL:JSP Standard Tag Libray(JSP標准標簽庫)
html標簽:<div>
jsp標簽:<jsp useBean...>
jstl標簽:<c:forEach ...>
使用jstl
(1)下載jstl的jar包,復制到WEB-INFO目錄下。
(2)在使用jstl的jsp頁面中,加入指令標記引入核心庫,
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
引用jstl的目的是為了團隊協作開發,前后端分離。
0407練習一:
設計一個添加產品表單,表單數據提交給Servlet程序處理后,將數據發送給jsp頁面並顯示。
1.設計一個添加產品的表單ProductForm.html
2.新建一個Servlet程序AddProductServlet1.java
3.新建視圖ProductView.jsp頁面展示Servlet傳過來的數據
七、Java訪問MySQL數據庫
MySQL適合中小型項目,Oracle適合中大型應用程序。
Java使用mysql
(1)下載mysql的驅動
(2)訪問mysql數據庫
(一)使用MySQL CLI訪問mysql數據庫
c:/>mysql -u <用戶名> -p<密碼>
常見的命令:
mysql>show databases; //顯示所有的數據庫
mysql>use <數據庫> //使用數據庫
mysql>show tables; //顯示當前庫下的所有表
mysql>desc <表名> //查看表結構
mysql>create database <數據庫名> //創建數據庫
mysql>create table <表名>(<列的定義>,...)
例:
create table product(
id int auto_increment primary key, //auto_increment是自動編號
name varchar(255), //產品名稱
price float, //產品價格
image varchar(255) //產品圖片
);
(二)Java連接MySQL
1、java連接MySQL8.x數據庫
驅動下載: mysql-connector-java-8.0.16.jar
//1.加載mysql數據連接驅動 Class.forName("com.mysql.cj.jdbc.Driver"); //8.0 //2.連接數據庫 Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/eshop?useSSL=false&serverTimezone=UTC", "root", "root");
//說明:8.0一定要帶上參數serverTimezone=UTC
2、Java連接MySQL5.x數據庫
驅動下載:mysql-connector-java-5.1.39-bin.jar
//1.加載mysql數據庫的驅動 Class.forName("com.mysql.jdbc.Driver"); //2.連接數據庫 Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/eshop","root","root");
3、Java連接MySQL8.0數據庫,但驅動是5.x
驅動下載:mysql-connector-java-5.1.39-bin.jar
(1)修改mysql8.0的加密規則
進入windows命令行窗口,在dos提示符下輸入:mysql -u root -proot
出現mysql命令提示符"mysql>",再輸入以下命令:
mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY 'root' PASSWORD EXPIRE NEVER; -- 密碼永不過期 mysql>ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; --改成5.x加密規則 mysql>FLUSH PRIVILEGES; --刷新權限 mysql>alter user 'root'@'localhost' identified by 'root'; --最終修改root用戶的密碼
說明:
8.x和5.x的區別是加密規則不同:
5.X版本是:default_authentication_plugin=mysql_native_password
8.x版本就是:default_authentication_plugin=caching_sha2_password
(2)Java連接MySQL的主要代碼
//1.加載mysql數據庫的驅動 Class.forName("com.mysql.jdbc.Driver"); //2.連接數據庫 Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/eshop","root","root");
Java讀取MySQL數據庫中的數據的步驟:
1、建立數據庫連接Connection
2、通過Connection對象創建語句對象Statement
3、由Statement對象執行查詢,獲得結果集ResultSet
4、對結果集進行遍歷。
Java對數據庫進行寫入操作步驟:
1、建立數據庫連接Connection
2、通過Connection對象創建語句對象Statement或預編譯的語句對象PrepareStatement
3、執行語句對象Statement或預編譯的語句對象PrepareStatement
練習一:訪問NBA所有的球隊
1、建立球隊的數據模型(實體類)Team
2、建立業務邏輯類TeamService
3、建立控制轉發的Servlet類GetTeamsServlet
4、建立視圖TeamList.jsp
study數據庫在騰訊雲上的連接信息:
數據庫地址:jdbc:mysql://sh-cdb-qego3b2a.sql.tencentcdb.com:61551/study
用戶名:student
密碼:student
練習二:訪問NBA所有的球員
1、建立球員的數據模型(實體類)Player
2、建立業務邏輯類PlayerService
3、建立控制轉發的Servlet類GetPlayersServlet
4、建立視圖PlayerList.jsp
study數據庫在騰訊雲上的連接信息:
數據庫地址:jdbc:mysql://sh-cdb-qego3b2a.sql.tencentcdb.com:61551/study
用戶名:student
密碼:student