1. 程式人生 > >最後一個暑假java web

最後一個暑假java web

map bject puts 進化 背景圖片 是否 輸入 正則表達式 ppi

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一樣高

&nbsp;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