最後一個暑假java web
1.swing美化包下載好的jar拖拽到項目下,右鍵構建路徑,,,,選定美化包的class復制限定名,在mian方法後面new的loginframe前面try的後面粘貼美化包去掉後綴雙引號括起來再百度UIManager(UIManager.setLookAndFeel("......."))
2.背景圖在new的jpanel後編寫 ,所以不能直接new本身jpanel要new一個主類(2017.7.6 30分40秒) sas覆蓋paintComponent()。然後把新建的MyBgJpanel類代替前面new的JPanel 。
背景圖片要放在對應的包下面。
button添加圖片也是拖到包下,然後icon classpath。
3.textField.getText().trim();事件監聽;
char型數組要變為String直接括起來然後在前面new String;
JOptionPane.showMessageDialog(parentComponent, message);彈出框,第一個是容器中相對位置,null是在中間。 當你需要調用的變量在後面則需要全局變量,main方法下調用。
正則表達式驗證:^[a-zA-z][a-zA-Z0-9_]{2,9}$用戶名由 3-10位的字母下劃線和數字組成。不能以數字或下劃線開頭。只能已字母開頭。允許全部是字母。
matches()方法驗證是否符合正則表達式,if語句括號前面加!表示非
4.Jradiobutton男女共組互斥,model自建選擇項
DBUtil連接數據庫的工具類,靜態方法加載驅動,Class.forName("com.mysql.jdbc.Driver");
數據庫連接有三個數據:url地址,用戶名,密碼; 三個數據都要寫自己的,導Connection包要導sql的
連接不能返回空。
5.vo類一定要implements Serializable
Connection conn=DBUtil.getConnection();獲取connction
try {
//1.獲取Connection
conn = DBUtil.getConnection();
//2.根據Connection創建語句對象
st = conn.createStatement();
//3.語句執行sql語句
String sql = "select * from dept";
rs = st.executeQuery(sql);
//4.按行遍歷結果集,每行都封裝到一個Dept對象中
while(rs.next()){
Dept dept = new Dept();
dept.setDeptno(rs.getInt("deptno"));
dept.setDeptname(rs.getString("deptname"));
dept.setDeptloc(rs.getString("deptloc"));
list.add(dept);
}
} catch (Exception e) {
// TO DO 自動生成的 catch 塊
throw e;
}finally{
//5.釋放資源
DBUtil.close(conn,st,rs);
}
return list;
6.if(e.getButton()==3){//右鍵刪除
7.dao層子包下都是實現類。
8.Box box=new Box();第一個Box是數據類型,第二個是變量名,Box()是類創建的對應對象。
9.String s1,s2,s3 = "abc", s4 ="abc" ;
s1 = new String("abc");
s2 = new String("abc");
那麽:
s1==s2 是 false //兩個變量的內存地址不一樣,也就是說它們指向的對象不 一樣,
故不相等。
s1.equals(s2) 是 true //兩個變量的所包含的內容是abc,故相等。
return -1;意思是返回錯誤碼。方法中不能插入數據。主函數調用方法插入數據。
最小化或還原所有窗口 Windows + D;如果只要當前窗口最小化,先按Alt+空格,然後按N;
private私有的只有當前類可以訪問。getxxx()表示得到屬性,setxxx()表示對屬性進行測試。
css排版js動態效果jquery是js的框架,再加上html 網站頁面。
html超文本標記(標簽)語言
瀏覽器兼容問題:瀏覽器解析方式不一樣;
html編寫軟件:sublime,emmet插件
../代表上一級路徑;
form表單
form裏面的action表示將表單提交給誰。帶#表示提交給自己。
method表示提交方式:get post。
colspan表示可以橫跨的列數
框架集frameset
rows cols
px像素 此src網頁,*代表網頁其他位置高度,亂碼的原因可能是名稱空格了
css2和h4搭配class類,id是強調唯一性
組合#,id也要用#
內嵌標優先限度最高
link標簽link:css
margin外邊距
<div class="div7"><div class="lanmu4" style="">欄目名稱</div>
垂直居中:line-height: 35px;把行高即文字區域設成和ul一樣高
text-decoration下劃線list-style: none;點點
:hover{}觸碰變色 solid實線
position:relative;left:-40%;實現居中的li向左邊浮動。
background-repeat:repeat no-repeat repeat-x repeat-y background-image:url(圖片地址) ;如果圖片小很多個填滿,repeat設置只填一個。
background-position:定位,比如定位到整張背景圖的購物車小圖標。
line-height只對文字起作用,對圖片無效,所以如果僅用line-height是無法實現你的目的的,肯定要用到其他,比如給img添加margin-top:20px,或者vertical-align:-50%
padding-top:26px;設置form文本框的距離高度,類似margin-top;
dl標簽 dt圖片 dd文字
position默認static正常的布局absolute絕對定位
ul{
position: absolute;
bottom: 10px;
right: 10px;
}
relative相對定位可以屏幕左上方也可以父容器為參考點默認00 標簽寫在父容器,在子容器寫px位置fixed類似絕對布局,常用於廣告
{
position:fixed;
top:15px;
right:2px;}
<h1 onclick="this.innerHTML=‘謝謝!‘">請點擊該文本</h1> 點擊變成謝謝
onblur 事件會在對象失去焦點時發生
onsubmit 事件會在表單中的確認按鈕被點擊時發生。
var username_str = document.getElementById("username").value;獲取用戶名
//對字符串進行非空和正則表達式的驗證
if(username_str==null || ""==username_str){//後者是字符串為空。
<div class="login">
<fieldset>
<legend>登錄MEITAO.COM</legend>
<td align="right">郵箱:</td>表單右對齊
onload 事件會在頁面或圖像加載完成後立即發生
setTimeout()
未來的某時執行代碼
clearTimeout()
取消setTimeout()
<script>
count = 3;
window.onload = countPage;
function countPage(){
//每隔一秒 count--,同時將count的值給span
count--;
var span = document.getElementById("count");
span.innerText = count;
var t= setTimeout("countPage()",1000);
//當count==0時,應該退出setTimeout
if(count==0){
clearTimeout(t);
//跳轉到主界面
location.href = "8.html";
}
}
</script>
</head>
<body>
登陸成功,稍後計時<span id="count">3</span>秒後進入主頁
</body>
</html>
顯示一個鐘表
<html>
<head>
<script type="text/javascript">
function startTime()
{
var today=new Date()
var h=today.getHours()
var m=today.getMinutes()
var s=today.getSeconds()
// add a zero in front of numbers<10
m=checkTime(m)
s=checkTime(s)
document.getElementById(‘txt‘).innerHTML=h+":"+m+":"+s
t=setTimeout(‘startTime()‘,500) 因為程序運行要占用所以是500?
}
function checkTime(i)
{
if (i<10)
{i="0" + i}
return i
}
</script>
</head>
<body onload="startTime()">
<div id="txt"></div>
</body>
</html>
alt 如果圖像不能顯示,則用alt中的文本代替顯示
要打script先打<這樣可以快捷輸入。
lacation.href="網站地址"
DOM 對象 (document object model)文檔對象模型
document方法 getElementById()返回對擁有指定 id 的第一個對象的引用。 getElementsByName()返回帶有指定名稱的對象集合。 getElementsByTagName()返回帶有指定標簽名的對象集合。write() writeln()
HTMLElement--Node --Element
DOM樹 根節點-- 節點類型:元素節點nodeType=1(根元素節點)、文本節點3、屬性節點2、註釋節點8
node節點 常用屬性:nodeName nodeValue nodeType parentNode firstChild lastChild childNodes attibutes
常用方法:創建xx createElement createTextNode createAttribute
添加xx appendChild insertBefore setAttributeNode() setAttribute("屬性名","屬性值")
刪除xx removeChild() removeAttribute("屬性名");
document對象 表單對象 style對象 表格對象
如:document.body
document.form的名字.表單元素的名字
小結:form的名字.elements["表單元素的名字"]
elements集合 包含表單中所有元素的數組。
window.onload是一個事件,當文檔加載完成之後就會觸發該事件
value 屬性規定在表單被提交時被發送到服務器的值。
<option> 與 <option/> 之間的值是瀏覽器顯示在下拉列表中的內容,而 value 屬性中的值是表單被提交時被發送到服務器的值。
註釋:如果沒有指定 value 屬性,選項的值將設置為 <option> 標簽中的內容。
select add()方法 向下拉列表添加一個選項。
ava Naming and Directory Interface (JNDI)
JNDI API被用於執行名字和目錄服務。它提供了一致的模型來存取和操作企業級的資源,如DNS和LDAP、本地文件系統,後者在應用服務器中的對象。
JSP(Java Server Pages) java服務器頁面
JSP頁面由HTML代碼和嵌入其中的Java代碼所組成。服務器在頁面被客戶端所請求以後對這些Java代碼進行處理,然後將生成的HTML頁面返回給客戶端的瀏覽器。
Java Servlet
Servlet是一種小型的Java程序,它擴展了Web服務器的功能。作為一種服務器端的應用,當被請求時開始執行,這和CGI Perl腳本很相似。Servlet提供的功能大多與JSP類似,不過實現的方式不同。JSP通常是大多數HTML代碼中嵌入少量的Java代碼,而servlets全部由Java寫成並且生成HTML。
軟件架構的模式
C/S模式 client/server
socket+流 通過TCP/IP協議進行通信
android 或 ios APP 通過HTTP協議進行通信 (現在的主流 html5)
B/S模式 broswer/server b瀏覽器
輸入http://域名(服務器主機的ip):端口號(80)/網頁資源
比較 C/S B/S 優劣勢
C/S 先必須安裝一個客戶端、軟件更新比較麻煩、訪問速度較慢
B/S 需要一個瀏覽器,服務器壓力大,最大的問題是安全性問題
tomcat web應用服務器
網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個socket。
建立網絡通信連接至少要一對端口號(socket)。socket本質是編程接口(API),對TCP/IP的封裝,TCP/IP也要提供可供程序員做網絡開發所用的接口,這就是Socket編程接口;HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網絡通信的能力。
Tcp ip協議
Transmission Control Protocol/Internet Protocol的簡寫,中譯名為傳輸控制協議/因特網互聯協議,又名網絡通訊協議,是Internet最基本的協議、Internet國際互聯網絡的基礎,由網絡層的IP協議和傳輸層的TCP協議組成。TCP/IP 定義了電子設備如何連入因特網,以及數據如何在它們之間傳輸的標準。協議采用了4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求。通俗而言:TCP負責發現傳輸的問題,一有問題就發出信號,要求重新傳輸,直到所有數據安全正確地傳輸到目的地。而IP是給因特網的每一臺聯網設備規定一個地址。
HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議。它可以使瀏覽器更加高效,使網絡傳輸減少。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內容首先顯示(如文本先於圖形)等。
HTTP是客戶端瀏覽器或其他程序與Web服務器之間的應用層通信協議。在Internet上的Web服務器上存放的都是超文本信息,客戶機需要通過HTTP協議傳輸所要訪問的超文本信息。HTTP包含命令和傳輸信息,不僅可用於Web訪問,也可以用於其他因特網/內聯網應用系統之間的通信,從而實現各類應用資源超媒體訪問的集成。
我們在瀏覽器的地址欄裏輸入的網站地址叫做URL (Uniform Resource Locator,統一資源定位符)。就像每家每戶都有一個門牌地址一樣,每個網頁也都有一個Internet地址。當你在
http功用
瀏覽器的地址框中輸入一個URL或是單擊一個超級鏈接時,URL就確定了要瀏覽的地址。瀏覽器通過超文本傳輸協議(HTTP),將Web服務器上站點的網頁代碼提取出來,並翻譯成漂亮的網頁。
http協議:
超文本傳輸協議 ,www(底層也是Tcp)
發展歷史 1.0 --傳輸靜態網頁 html
1.1--可以請求動態技術的網頁 jsp php asp.net/asp(掌握http://主流)
2.0--https://,s表示security安全
狀態碼status code 200表示響應成功 4xx 404表示資源沒有找到 5XX 服務器處理時代碼運行異常 500
Myeclipce jsp要在網頁上運行,放在workplace不行的,要放tomcat webapps目錄下,這個過程叫部署和發布
不能ctrl cv 首先選定項目,點擊圖示
進去後點擊add添加服務器,裏面有個myeclipcetomcat是myeclipce自帶的tomat。 me_tcat
就是myeclipce下的tomcat。
成功部署
這樣查看部署文件的位置
部署後要啟動
右鍵服務第一個選項進去修改端口
Web—inf服務器端的核心文件夾
.web應用程序結構
META-INF--context.xml 數據庫連接池的配置文件
WEB-INF---lib文件夾:當前項目所需要的jar包 classes
web.xml:web描述符文件 歡迎頁 統一異常頁error-page servlet
註意:放在web-inf下的資源,瀏覽器直接請求訪問不到,但是可以通過服務器內部轉發
Web項目的jar包都放在lib中
Supperclass是父類標準
接口標準,下面的是方法覆蓋不勾選
做一個映射,因為servlet不同於一般的java,它可以通過瀏覽器訪問的。所以需要對外提供一個訪問地址(第三行那個url 隨便寫個)
Servlet java類實現servlet標準接口
覆蓋的方法init表示初始化 destroy表示正在銷毀servlet,因為此類產生對象用完了需要銷毀 service方法是請求訪問該servlet時,需要響應的內容就在這裏。
重部署 ,就是刷一下服務器,剛剛寫的就刷出來了
刷一次網頁就會回調一次service方法但是init只會調用一次
http://localhost:8080/calDemo1/Demo1
加一個構造方法,和init一樣只會啟動一次
關閉服務器,destroy就會啟動
這是servlet的一整個生命周期
servlet:指定一個url地址進行訪問一個java類
不需要提交數據就不需要給name select標簽下拉框 action應該提交給控制層
這裏可以看url地址 servlet和servlet-mapping(映射)name要一樣
把/calServlet復制到cal的action中/要省掉,因為基本路徑已經有了
Vo:java的一個vo對象
Web項目改名:右鍵項目,最下面,輸入web
進化MVC
視圖層(view)、控制層(control) 業務邏輯層 數據訪問層 數據層(Model)
www.pconline.com.cn太平洋電腦網,一般都是用來下載軟件的。
購物車可以放section?裏面而就不必做表放數據庫裏面。
Ctrl加鼠標左鍵選取文件夾
通過服務器業務層(servlet)獲取連接對象的實例然後釋放返回業務層再給客服端,如果請求過多效率就會很低,所以需要連接池
在連接池中一次new很多個連接對象出來,來一個請求就找一個空閑的。忙碌的做完之後變為空閑但不會被銷毀,等待下一個請求。沒有連接池的話會被銷毀。
連接池都是大家用java寫的jar包,主流有.第三方DBCP連接池
第三方C3P0連接池還有阿裏巴巴druid。
在tomcat中查看端口:打開conf中server.xml。
DataSource數據源 configurations配置 context上下文
DBUtil中tomcat連接池千萬不能使用main方法或者junit方法去測試這個getConnection()因為main方法啟動的是java虛擬機,和tomcat沒有關系,根本拿不到連接池。
窗口最下面那個so tomcat配置自己裝的。
.impl實現類
select @@basedir as basePath from dual查詢mysql路徑
DButil工具類中連接數據庫的url地址還有用戶名密碼應該放在屬性文件當中,因為他們有可能改動,Java項目在項目名下面新建,web項目在src或者web-inf
,因為放在src下文件會被保存在web-inf的classes文件下。
下面新建
Java項目是這樣直接new FileInputStream
Web項目在類路徑下加載InputStream inStream = DBUtil2.class.getClassLoader().getResourceAsStream("db.properties");
Mvc的c:servlet,進行業務邏輯處理,對數據庫進行操作
註釋 <!--客戶端註釋,瀏覽器源碼可見 --> <%-- 服務器端註釋,瀏覽器源碼不可見--%>
taglib--標簽庫jstl
核心標簽庫 c
<%@ taglib %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
采用c:forEach循環遍歷request值域中的集合
<c:forEach var="obj2" items="${list}">
${obj2}<br/>
</c:forEach>
web服務器收到客戶端的HTTP請求,會針對每一次請求分別創建一個用於代表請求的request對象和代表響應的response對象。
1.要得到客戶機提交過來的數據,只需要找request對象就行了。
2、要向客戶機輸出數據,只需要找response對象就行了。
通訊錄:
Mvc 瀏覽器發出url請求再經過控制層servlet的一系列請求跳轉到視圖層(jsp)(跳轉方式有兩種,常用是高效率的服務器內部轉發)
項目第一步 需求分析和概要設計(創建數據庫)
<jsp:forward page="findAllServlet"></jsp:forward> page中的是url地址,jsp跳轉也可以用location
<script>
window.onload = function(){
//location.href="findAllServlet";
location.href="findAllServlet";
};
</script>
接口父類沒有那麽子類就應該有
Port端口forword跳轉
源碼一模一樣可以調用,比如doPost方法下面源碼和doGet方法一樣,可以在doPast方法下面寫上 doGet(request,response);
<div align="center"><img src="2008081801331242.gif"/></div>
Web項目圖片要放webroot的images下面
!--是html註釋也就是客戶端註釋,%--是jsp註釋也就是服務器端註釋,客戶端看不到服務器端註釋
控制層要做的四件事情:1.獲取請求參數 2.對參數進行驗證 3.調用業務層 4.根據業務層返回值進行跳轉。
服務層為什麽要寫接口類? 為了方便擴展和重用
接口提供了一個公用的方法提供方。 接口是用來規定子類的行為的。
舉個例子吧 , 比如有個需求, 需要保存客戶信息, 有些客戶從網站來, 有些從手機客戶端來, 有些從後臺管理系統錄入, 假設不同來源的客戶有不同的處理業務流程, 這個時候我定義接口來提供一個保存客戶的方法, 然後不同平臺實現我這個保存客戶的接口, 以後保存客戶的話, 我只用知道這個接口就可以了, 具體調用哪個方法 去實例化具體你需要用的類,這也就是JAVA的多態的體現。 而如果你不用接口的話 , 首先我需要哪個方法 我就去實例化哪個類, 冗余很高, 其次擴展很差。 接口就是一個規範, 其子類都會有他提供的方法。 統一管理。
在java中不允許一個類繼承多個多個父類,但是要實現“一個類繼承多個類的功能”就可以用接口,一個類實現多個多個接口從而間接實現多重繼承。
服務層中的list<>(public加返回值list加findAll()裏面沒有參數,然後拋出異常)裏面的是封裝類,封裝對象寫在vo中,封裝對象都要實現序列化接口
在業務層調用dao層實現查詢所有,dao需要數據庫連接類獲取對象和實例,這往往寫成一個util工具類。
測試數據庫連接類是否成功主函數調用下靜態方法就可以了。
初級的時候獲取到數據庫的連接對象,然後由連接對象(Connection)得語句對象(Statement)然後得到一個結果集(ResultSet),寫完後還要釋放資源。中級就引入一個封裝了jdbc的工具jar包(commons-dbutils-1.7.jar common一般都是阿帕奇公司出品),這個jar包的核心類是QueryRunner。Constructors構造方法,有參數就是有參構造,沒有就是無參構造,
先用無參的new出來
最後一個暑假java web