Java EE概念:
Java EE是一個開放的平臺,它包括的技術很多,主要包括十三種核心技術(java EE就是十三種技術的總稱)。建立一個整全的概念。
要成爲一個java EE程序員,必須掌握的技術是java,servlet,jsp。這是基礎。
只有在上面的基礎上再學 struts,hibernate,ejb,spring,webwork,jst等web框架。
J2ee的十三種技術(規範)
1. java數據庫連接(JDBC)。——JDBC定義了4種不同的驅動:1.JDBC-ODBC橋,2.JDBC-native驅動橋3,JDBC-network橋4.純java驅動。
2. Java命名和目錄接口(JNDI)(它是爲了對高級網絡應用開發中的使用的目錄基礎結構的訪問。)。
3. 企業Java Beans(Enterprise Java Beans,EJB)(它提供了一個架構來開發和配置到客戶端的分佈式商業邏輯,因此可以明顯減少開發擴展性、高度複雜企業應用的難度。)。
4. JavaServer Pages(JSPs)。
5. Java servlets(servlets提供的功能大部分與JSP相同,JSP中大部分是HTML代碼,其中只有少量的Java代碼,而servlets則相反,它完全使用Java編寫,並且產生HTML代碼。)。
6. Java IDL/CORBA(用得不多)。
7. Java 事務體系(JTA)/Java事務服務(JTS)(用得不多)。
8. JavaMail和JavaBenas激活架構(JavaBeans Activation Framework,JAF)。(JavaMail是一個用來訪問郵件服務的API)。
9. Java信使服務(Java Messaging Service,JMS)(JMS是一個用來和麪向信息的中層通信的API)。
10. 擴展標記語言(Extensible Markup Language,XML)。
11. 12. 13當前流行的及格框架 struts+hibernate+spring(ssh).
Java ee的開發環境(eclipse)
Eclipse是一個開源的、可擴展的集成開發環境,已經成爲目前最流行的j2ee開發工具。
Eclipse安裝後就可以開發java se的項目了,但不能開發java ee項目,需要安裝web開發插件(lomboz或是myeclipe)
Eclipse的官網:http://www.eclipse.org
myeclipse的官網:http://www.myeclipside.com/
在java ee的開發中有幾個重要的開發模式:
1.Model1模式 2.model2模式(model2x模式(用得少)) 3.mvc模式
一、Model1模式
Model1的基礎是jsp文件,它由一些相互獨立的jsp文件,和其它一些java class組成(不是必須的)。這些jsp從HTTPRequest中獲得所需要的數據,處理業務邏輯,然後將結果通過Response返回前端瀏覽器。
從上面分析我們可以看到model1模式可以分爲兩類:
1. Model1(純jsp技術,不帶任何java class)。
2. Model1(jsp+java class)。
Model1模式的缺點:
1. 表現層和業務層混合在一起(亂!)。
2. 在開發過程中,不利於多人協同開發。
3. 不利於後期維護。
Model1模式的優點:
1. 簡單,開發速度較快。
2. 比較適合開發小的項目。
二、model1(結合java class)開發模式,有些書上稱:mv模式,即:màmodel模型(java class,業務邏輯層),vàview視圖(jsp,界面層)。
1.一個數據庫應一個類:ConnDB.java(得到連接)。
2.數據庫中的每一張表對應兩個類:(1)UserBean.java(表示users表)類。(2)UserBeanCl.java(業務邏輯,即對users表的操作)類。
如:
login.jsp輸入數據,logincl.jsp通過調用java class(模型)處理數據,wel.jsp顯示數據。這是一種多麼完美的開發模式。
不足之處:
1. Jsp技術主要做界面,但是logincl.jsp這裏調用了java class(模型),完成對用戶驗證,顯得有點怪怪的。
2. Wel.jsp是用於顯示用戶信息(顯示數據),但,wel.jsp除了顯示數據,還調用了java
class(模型),代碼的優雅就蕩然無存了,也不得於將來的分工。
3. Servlet技術處理頁面的跳轉是最快捷和方便的,難道我們就此不用了嗎?
三、mvc開發模式:M(model模型),V(view視圖),C(controller控制器)。
MVC是一個設計模式,它強制性的使應程序的輸入、處理、和輸出分開。使用MVC應用程序分成三個核心部件:模型、視圖、控制器。它們各自處理自己的任務。
M主要由java class來做,也可以是java bean、eib等
V由jsp來做
C由servlet來做
對上的例子進行改進:
1. 增加控制器(servlet):將logincl.jsp用servlet來替代,發揮servlet充當控制中轉的優勢。
2. 在控制器(servlet)中去調用模型(model)去完成用戶驗證,並準備要顯示的用戶信息數據。
MVC開發模式的總結:
處理過程:首先控制器接收用戶的請求,並決定應該調用哪個模型來進行處理,然後調用模型來處理用戶的請求並返回數據,最後控制器用相應的視圖顯示模型返回的數據,並通過瀏覽器呈現給用戶。
Mvc模式存在的缺點:
1. 工作量增加了。
由於開發者將一個應用程序分成了三個部件,所以使用MVC同時也意味着你將要管理比以前更多的文件,這一點是顯而意見的。這樣好像我們的工作量增加了,但是請記住這比起它所能帶給我們的好處是不值一提。
2. 不適用小型項目,否則就是機關槍打蚊子。
3. 調試應用程序難度加大。
Mvc提倡模型和視圖分離,這樣也給調試應用程序帶來了一定的困難。每個構件在使用之前都需要經過徹底的測試。一旦你的構件經過了測試,你就可以毫不顧忌的重用它們了。
數據庫中用戶名是中文,中文亂碼問題(一般是要查詢數據時,有中文字符才需要轉碼):
當提交表單時,表單中有中文,也會產生亂碼。
解決中文亂碼問題,有三種方法:
1. 重新轉碼,如,有String u=”是中文”; u=new String(u.getBytes(“iso-8859-1”),”gb2312”);
2. 使用過濾器來解決[詳解]
3. 通過修改Tomcat配置servlet.xml文件[不太穩定.],具體操作如下:
<Connector port="8080" protocol="HTTP/1.1" maxThreads="150"
connectionTimeout="20000" redirectPort="8443" />改爲:
<Connector port="8080" protocol="HTTP/1.1" maxThreads="150"
connectionTimeout="20000" redirectPort="8443" URIEncoding=”gbk”/>
在<Connector>元素中增加屬性URIEncoding,其值爲”gbk,表示客戶端請求傳送來的值均以gb2312的標準來編碼,這樣在業務處理中就不需要在對其編碼進行轉換,大在簡化了程序,提高了執行效率。
當request得到的是亂碼時,可以這樣解決(一定要這樣寫):
name=new String(request.getParameter(“username”).getBytes(“ISO8859_1”),”gb2312”);
圖片鏈接邊框去掉:用<a href="#"><img src="" border="0"></a>就去掉了.
---------------------------------------------------------Servlet部分-----------------------------------------------------------
Servlet開發流程(這是servlet規範,沒有理由,只有這麼做)
1. 在%TOMCAT_HOME%\webapps下建一個文件夾如(myWebSite),然後在該文件夾下新建WEB-INF的文件夾下,寫一個web.xml(該網站的配置信息),建立一個classes的子文件夾,也可以從加的目錄ROOT下拷貝.
2. 開servlet(引入servlet-api.jar,否則編繹不了)。
3. 部署你的servlet,在web.xml文件中:添加代碼(看例子)。
<servlet>
<!--給你的servlet取名,任意的-->
<servlet-name>hello</servlet-name>
<!--指明servlet的路徑,(包名+類名)-->
<servlet-class>com.tsinghua.Hello</servlet-class>
</servlet>
<servlet-mapping>
<!--給你的servlet取名,任意的-->
<servlet-name>hello</servlet-name>
<!--這是在瀏覽器中輸入的訪問該servlet的url,任意的-->
<url-pattern>/sp</url-pattern>
</servlet-mapping>
4. 啓動tomcat,訪問你的servlet,在瀏覽器的地址欄輸入http://127.0.0.1:8080/myWebSite/hello,回車就可看到servlet的輸出。
開發servlet有三種方法
1. 實現接口servlet來編寫
2. 繼承GenericServet類(該寫了servlet接口,所以有和servlet相同的方法service)。
3. 繼承HttpServlet類(該類有doGet,doPost方法)
Servlet的生命週期
1. init()函數,用於初始化該servlet(類似於類的構造函數,該函數只會被調用一次(當用戶第一次訪問該頁面的servlet時被調用。)。)。
2. 業務邏輯函數(如:service,doGet,doPost等方法)(當用戶每訪問該servlet時,都會被調用,它有兩個參數:ServletRequest—用於獲取客戶端的信息,ServletResponse—用於向客戶端返回信息)。
3. destroy()函數,用於銷燬servlet實例(釋放內存),只有如下三種情況纔會周用(1.reload該servlet(webApps),2.關閉tomcat,3.關機)值行了這個函數後,這個網站內的所有的session和conTest都被釋放,爲空。
表單提交數據get請求和post請求的區別
1. 從安全方面看get<post,因爲get提交的數據會在瀏覽器地址欄顯示
2. 從提交的內容大小來看get<post, get提交的數據不能大於2K,面post提交的數據理論上不受限制,但是實際編程中建議不要大於64K。
3. 從請求響應速度上看get>post,get要求服務器立即響應請求,而post請求可能形成一個隊列請求。
從以上幾點看,表單提交方式(method)建議用post
在sevlet中打印的html語句,可以不加引號
同一用戶的不同頁面共享數據的四種方法
1. Cookie(小甜餅,在javax.servlet.http.*;這個包裏面)(服務器在客戶端保存用戶的信息,比如登錄名,密碼…就是cookie,數據量並不大,服務器端在需要的時候可以從客戶端讀取。)。
Cookie的使用方法:①Cookie有點像一張表,分兩列一個是名字,一個是值,數據類型都是String。②創建Cookie(在服務器端創建):Cookie
c=new Cookie(String name,String val);③將Cookie添加到客戶端:response.addCookie(c); ④讀取Cookie(從客戶端讀到服務器):Cookie[] allCookie=request.getCookies();c.getName();c.getValue();方法讀取⑤修改Cookie存在時間:c.setMaxAge(30);單位秒,爲負則該cookie不會存儲,爲0則刪除該cookie,如果不設置存在時間,那第該Cookie將不會保存。
2. sendRedirect(地址跳轉,注意中文處理)
3. Session(會話技術)(當用戶打開瀏覽器,訪問某個網站時,服務器就會在服務器內存爲該瀏覽器分配一個空間,該空間被這個瀏覽器獨佔,這個空間就是session空間,其中的數據默認存在時間爲30min,可以修改(在conf—web.xml中修改))。
Session的使用方法:①得到session:HttpSession hs=request.getSession(true);
②向session添加屬性:hs.setAttribut(String name,Object val);③從session得到某個屬性:String
name=hs.getAttribute(String name);④從session刪除掉某個性性:hs.removeAttribute(String name);⑤修改session的存在的時間:hs.setMaxInactiveInterval(20);單位秒,爲負則永遠不超時,爲0則馬上超時。
因爲session的各個屬性要佔用服務器的內存,因此軟件公司都是在迫不得已的情況下才使用。
注意:以文件—新建—窗口,的方式打開窗口,session的ID是不變的,也就是同一個session空間
4. 隱藏表單提交(form)(input type=hidden name=““ value=““),在提交該表單時,能一併提交過去。(獲取方式:req.getParameter(String name);)。
Cookie VS session
1. 存在的位置:cookie保存在客戶端,session保存在服務器端。
2. 安全性:比較而言,cookie的安全性比session要弱。
3. 網絡傳輸量:cookie通過網絡在客戶端與服務器端傳輸,而session保存在服務器端,不需要傳輸。
4. 生命週期(20分鐘爲例)①cookie的生命週期是累計的,從創建時,就開始計時,20分鐘後cookie生命週期結束,cookie就無效。②session的生命週期是間隔的,從創建時開始時計時,如在20分鐘,沒有訪問過session,那麼session信息無效,如果在20分鐘內,比如第19分鐘時,訪問過session,那麼它的生命週期將重新開始計算。③另外,關機會造成session生命週期結束,但是對session沒有任何影響。
使用ServletContext(和session一樣,但是它所有的客戶都可以訪問)。
1. 得到ServletContext實例:this.getServletContext();
2. 你可以把它想像成一張表,這個和Session非常相似:每一行就是一個屬性。添加屬性:setAttribute(String name,Object ob);
得到值:getAttribute(Stringname); 返回Object。
刪除屬性:removeAttribute(String name);
3. 生命週期:ServletContext中的屬性的生命週期從創建開始,到服務器關閉而結束。
4. 使用ServletContext:的注意事項:因爲存在ServletContext中的數據會長時間的保存在服務器,會佔用內存,因此我們建議不要向ServletContext中添加過大的數據……. 切記
Servlet操作數據庫注意事項
需要將連接數據庫的3個jar包,拷貝到tomcat服務器
具體有兩種方法可以:
(1).將.jar包拷貝到%tomcat%/lib文件夾
(2).或者在你的webapps目錄的WEB-INF文件夾下建立一個lib文件夾,然後
把3個jar包拷貝到lib文件夾下
兩種方法的區別:
第一種:所有webapps都可以使用3個jar包[公用庫]。
第二種:只有放如jar包的那個webapps能使用jar包[獨用lib庫]。
特別要注意sql 注入漏洞:用戶名和密碼不能同時查詢,可先用用戶名查出密碼,再用查出來的密碼與輸入的密碼進行比較。
分頁技術(方法)
我們先講講分頁的算法:
我們需要定義四個量,它們有各自的用處,如下:
int pageSize:每頁顯示多少條記錄
int pageNow:希望顯示第幾頁
int pageCount:一共有多少頁
int rowCount:一共有多少條記錄
說明:
pageSize是指定的(常量)。
pageNow是用戶選擇的(變量)。
rowCount是從表中查詢得到的(是個變量)。
pageCount是計算出來的,該計算式爲:
if(rowCount%pageSize==0)
{
pageCount=rowCount/pageSize;
}
else
{
pageCount=rowCount/pageSize+1;
}
然後查詢數據庫,我們可能很自然的想到,用
select 字段列表 from 表名 where id between ? and ?
但是如果表的某個id被刪除了,那麼某頁可能就會少一條記錄。
因此最終解決方法是如下語句:
select top pageSize 字段名列表 from 表名 where id not in
(select top pageSize *(pageNow-1) id from 表名)
翻頁的鏈接可以用下拉框或輸入文本
網站框架問題分析
1界面和業務邏輯放在一起(model1模式),有以下問題:
(1).有很多頁面邏輯相似(如:操作數據庫),有重複代碼(一般一段代碼重複了三次或三次以上,就應該把這段代碼封裝到一個函數裏面去)。
(2).整個框架沒有清晰的層次關係,顯得非常亂。
(3).代碼一點也不優雅,可讀性差,可維護性差。
2.進行分層(界面層、業務邏輯層)[mv模式](m—>model模型,v—>view視圖)
(1).將常用的代碼(比如邊接數據庫),封裝到類中。(現在java中javaBean一般與數據庫中表映射,充當表,如(UserBean.java(表示表),UserBeanCl.java(業務邏輯),ConnDB.java(得到連接)。))。
3.在UserBeanCl中,查詢數據庫,返回查詢結果集時,要返回ArrayList集合,而不是直接返回ResultSet,原因如下:(rs代表ResultSet的一個對象)
(1).如果返回ResultSet,那麼我們在使用ResutlSet時,是不能關閉該RestultSet相互關聯的數據庫連接等資源,從而造成資源浪費。
(2).如果返回ResutlSet,我們只能使用rs.getInt(?),rs.getString(?)…,這樣的方法來得到結果,代碼的可讀性不好,維護起來不方便。
(3).返回ArrayList集合方法(ArrayList作爲中轉,就可以儘快的關閉rs,數據庫連接,同時更能體現面向對象編程,代碼可讀性更好。)如下:
①將rs中的每一條記錄,封裝成一個UserBean對象ub。
②將封裝成一個UserBean對象ub放入到ArrayList集合中,利於管理。③從ArrayList結合中取出ub,然後使用。
Servlet中操作文件(和java 一樣)
tomcat的配置:
1. 如何修改tomcat的端口(瀏覽器默認端口:80,可以不寫)
(1) 需要啓動兩份tomcat服務器、服務佔用了8080端口時可改
(2) 修改端口方法:修改%timcat%/conf/server.xml文件中port=“8080”數據修改成你需要的端口即可。
(3) 端口號,是用兩個字節存放,範圍在1~65530,但是1~1024是有名端口,很有可能被用,所以儘量設大一些。
2. 如何設置虛擬目錄
(1) tomcat所在的磁盤空間不夠用了、爲了統一管理,希望放在某個特定的目錄下,而不是默認目錄。
(2) 修改方法:修改%timcat%/conf/server.xml文件,在適當的位置(<Host></Host>中最後)添加如下信息:<Context path=“/mysite(站點文件夾名)” docBase=“c:\mysite(站點目錄)” debug=“0”/>
3. 如何給tomcat的管理員設置密碼
(1) 修改方法:修改%timcat%/conf/tomcat-users.xml文件中可以給管理員設置密碼,密碼設置可以防止非法用戶遠程登錄到tomcat。
(2) 在默認情況下,管理員的密碼是空密碼,這樣不法分子可能遠程發佈一個站點,並在某個servlet中加入一些可怕的語句(比如重啓、關機…)。
(3) 利用密碼爲空搞破壞,步驟如下:
① 利用jdk自帶的jar工具將有破壞的站點打包成*.war文件。使用jar工具需要配置jdk的環境變量path=%JAVA_HOME%/bin; 或者在你編繹時寫入 set
path=%path%;你的jdk目錄\bin,這樣即可在任何目錄下使用jar命令,然後切換路徑到需要打包的那個文件夾目錄下;打包的命令是:jar
–cvf war 文件名 *.*
② 通過tomcat管理頁面將站點發布到tomcat
③ 訪問有破壞的代碼的servlet,這樣你就被黑了。
4. 如何設置數據源和連接池(公司常用!)(因爲JDBC連接速度太慢)沒測試出來,網上查
(1) 爲什麼使用:每次操作數據庫,需要加載驅動才能得到一根連接,然後返回結果,加載驅動是要花時間的。
(2) 解決方法:配置”連接池”與”隊列池”。”連接池”事先與數據庫連接好了,並有了幾根(可配置)連接,如果連接也中有空閒的連接,tomcat就分配給請求客戶端;如果沒有空閒的連接,請求客戶端將會在隊列池中等待(時間可配置),直到有連接。因爲直接取連接,所以速度快。
(3) 修改方法:有兩種方法(1)通過tomcat管理界面來配置(2)修改配置文件。修改%timcat%/conf/server.xml文件, 在指定的位置添加代碼即可:
//**************************************************************
<Context path="/myWebSite1" docBase="D:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\myWebSite1" debug="0">
<!--name:給數據源設置名字(jndi) auth:表示該數據源是誰管理 type:類型-->
<Resource name="xuefeng" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="xuefeng">
<!--工廠設置-->
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<!--驅動設置,該驅動放在tomcat的common/lib下,或者放在該站點自己的lib目錄下-->
<name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>
<parameter>
<!--設置url-->
<name>url</name>
<value>jdbc:microsoft:sqlserver://192.168.190.2:1433;DatabaseName=spdb</value>
</parameter>
<parameter>
<!--設置連接數據庫的用戶名-->
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<!--設置連接數據庫的密碼-->
<name>password</name>
<value>430482</value>
</parameter>
<parameter>
<!--在連接池中最大的激活連接數 -->
<name>maxActive</name>
<value>50</value>
</parameter>
<parameter>
<!--在連接池中最大的保留(空閒)連接數,用的人少時-->
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<!--客戶端在隊列池中最大等待時間,按秒計算,-1指一直等,直到有連接-->
<name>maxWait</name>
<value>-1</value>
</parameter>
</ResourceParams>
</Context>
//**************************************************************
如果要加中文註釋,則必需得在最前加如下語句:
<?xml version="1.0" encoding="gb2312"?>
//*************************************************************
(4) 如何使用:如果使用連接池的方式來連接數據庫,那麼就要這樣:
Context ctt=new javax.naming.InitialContext();
DataSource ds=(DataSource)ctt.lookup("java:comp/env/數據源的名");//粉紅//色的是:得到配置環境保護,這是固定寫法
Connection Ct=ds.getConnection();
-------------------------------------------------------jsp部分-------------------------------------------------------------
jsp的概述
jsp是servlet技術的補充,訪問jsp的過程:如果是第一次訪問,jsp文件被服務器翻譯
成一個對應的java文件(servlet),然後,再被編譯成.class文件並加載到內存中。如果是以後訪問jsp,那就直接調用內存中的jsp實例,所以,第一次訪問jsp慢,後面訪問jsp的速度就會變快了。
爲什麼會出現jsp技術?
程序員在開發過程中,發現servlet做界面非常不好àjsp
一個公式:jsp=html+java片段+jsp標籤+javascript(css)à比較綜合
jsp功能的強大是因爲可以與javabean結合使用(即:jsp作前臺(界面),javabean作後臺(邏輯層))。
Jsp+javabean的基礎上再結合servlet,就會構成mvc的開發模式,Mvc模式是目前軟件公司中相當通用的開發模式,是重點
Jsp的基本語法(冒號後面是舉例)
(1) 指令元素---用於從jsp發送一個信息到容器,比如設置全局變量,文件字編碼,引入包等,主要包括如下:
① page指令:<%@page contentType=”text/html”;charset=gb2312%>
② include指令:<%@include file=”filename”%>
③ taglib指令---這個指令允許在jsp頁面使用自定義的標籤:<myTag:yourTag num1=”123”>①①
(2) 腳本元素---在一定程度上可能理解就是java的片段scriplet
① scriplet:<%java代碼,可以和寫java一樣寫%>
② 表達式:<%=java表達式%> <%=rs.getString(1)%>
(3) Declaration聲明:<%!變量聲明 %>比如:<%!int
count=10%>
<%!函數聲明 %>比如:
<%! int jssuan(int num)
{
int result=0;
for(int i=0;i<num;i++)
{result=result+i;}
}
%>
(4) 動作元素---動作元素是使用xml語法寫的,是jsp規定的一系列標準確性動作,在容器處理jsp時,當容器遇到動作元素時,就執行相應的操作。常用的幾個如下:
① <jsp:useBean> //創建一個jvabean實例
② <jsp:setProperty> //給一個java實例設置初始值
③ <jsp:param> //給一個jsp設置參數,常常與<jsp:include>結合使用,如:
<jsp:include file=”info.jsp”>
<jsp:param name=”parameter1” value=”parameterValue”/>
<jsp:param name=”parameter2” value=” parameterValue”>
</jsq:include>
④ <jsp:getProperty> //取得一個javabean實例的成員變量
⑤ <jsp:include> //引入另外一個文件
⑥ <jsp:plugin> //使用插件
⑦ <jsp:forward> //轉發
⑧ <jsp:fallback> //
(5) jsp的九大內置對象(可以直接使用,不用創建。)
① out (是servlet中如:PrintWriter out=res.getWriter();)//向客戶端輸出數據,字節流,如:out.println(“”);
② request //接受客戶端的http請求,如:
getParameter(String name); //name表示表單的參數名
getParameterValues(String name); //使用得到是String []
setAttribute(String name,Object obj); //設置名字爲name的obj,值爲obj
getAttribute(String name); //返回由name指定的屬性值如果不存在就返回null
getCookie();
③ response //封裝jsp產生的迴應,如:
addCookie(Cookie cookie);
sendRedirect(“welcome.jsp”);
④ session(是servelt中HttpSessio類的實例)
//用於保存用戶的信息,跟蹤用戶的行爲
setAttribute(String name,Object obj);
getAttribute(String name);
⑤ application //多個用戶共享該對象,可以做計數器
⑥ pageContext //代表jsp頁面的上下文
⑦ exception //代表運行時的一個異常
getMessage();
⑧ page //代表jsp這個實例本身(使用比較少)。
⑨ config //代表jsp對應的servlet配置,可以得到web.xml中的參數
jsp與servlet的區別:
(1) jsp和servlet是對應關係:jsp文件被服務器翻譯成一個對應的servlet文件並編譯成.class文件,對應的servlet文件放在work目錄下。
(2) jsp是以servlet爲基礎的
(3) jsp文件改變時,服務器能自動重新加載該文件,不需要重啓服務器。
發送電子郵件(javamail)到用戶信箱sd
Js中驗證字符串是否爲數字:(1)可以Math.round(num)!=num (2)使用正則表達式
做項目(網上商城):
一.系統分析與設計:
1.需求分析:
i.系統描述:[系統可以做什麼];
電子商聲場包括兩個基本本部分,一個是前臺銷售程序,一個是後臺管理程充。
用戶可以在前端瀏覽,搜索商品,能夠看到最新的公告(如活動、物價商品),
用戶可以使用購物車購買商品,可以對入入購物車的商品進行處理,如修改數據量,從購物車中去除商品等,用戶購完商品必須到服務檯結帳,也叫下定單,用 戶下完訂單,可以打印或E-mail保留訂單,以便收到商品時查對;
後臺管理程序,商家在此管理本企業的相關信息發佈,錄入,更改商品細信息,訂單查詢處理,並管理在商城裏註冊的用戶。
ii.角色(按照類來劃分用戶):
1.前端用戶
2.系統管理員:可以細化爲:商品和公告管理者:訂單管理者
iii.用例識別:
在角色的基礎上,可以識別出與角色相關的用例。
前臺用戶:
系統管理員:
2.用例圖
3.功能模塊
做項目的步驟:
1. 界面(模仿)。
2. 數據庫(表的設計)[界面(功能)--à猜出表來??](用戶表和商品表)。
3. 建立web工程,testShopping
4. 一步一步的畫當前流程圖
5. 開始寫主頁面(index.jsp)[界面用dw,界面我使用”死去活來”法,即先是靜態的,然後才連接數據庫,把它寫活。],在dw中我們建html--à在myeclips中我們建立jsp。在開發界面時,我們使用table+css方式佈局。在table+css方式佈局中,常駐用的一個技巧是:在某行列中嵌入一個表格,可做精確佈局。
CSS:是層疊樣式表:控制網頁的字體、顏色、大小、背景、邊框……。
先會用,再會做。(flash,javascript,ps)
6. 把靜態的頁面向動態的頁面修改[死去活來法]。
7. Mvc 模式寫 model和servlet部分的開發。
8. HashMap的集合
a. hashmap就像一張表
b. key值是不能重複
c. key值和value值,可以是java的object類型
hashmap充當購物車是很好
key值-------à書的id
values值-------à書的數量
hashmap提供了一堆好的函數
select * from goods goodsId in(1,2,3,5)
9. 對購物車可以增加,刪除,清空,修改數量
爲了讓servlet得到貨物的id 的數量,可使用隱藏表單
10. a.設計訂單(怎麼設計???)
表的設計:如設計定單表:如果設計爲如下:
定單表(orders)
|
ordersId
(訂單號)
|
userId
(用戶id)
|
goodsId
(商品id)
|
Nums
(數量)
|
orderDate
(時間)
|
payMode
(付款方式)
|
isPayed
(付款否)
|
totallPrice
(總價)
|
1
|
3
|
5
|
3
|
2007-8-9
|
貨到付款
|
否
|
890
|
1
|
3
|
4
|
4
|
2007-8-9
|
貨到付款
|
否
|
890
|
1
|
3
|
3
|
3
|
2007-8-9
|
貨到付款
|
否
|
890
|
1
|
3
|
2
|
4
|
2007-8-9
|
貨到付款
|
否
|
890
|
以上訂單表,很容易操作,但是出現在數據冗餘。
解決方法是:把重複的字段,單拿出來做一張表(訂單表),把不重複的字段單拿出來做一張表(訂單細節表)。如下圖,兩個表
訂單表(orders)
|
ordersId
(訂單號)
|
userId
(用戶id)
|
orderDate
(時間)
|
payMode
(付款方式)
|
isPayed
(付款否)
|
totallPrice
(總價)
|
1
|
2
|
2007-8-9
|
貨到付款
|
否
|
890
|
訂單細節表(orderDetail)
|
ordersId(訂單號)
|
goodsId(商品id)
|
Nums(數量)
|
1
|
5
|
3
|
1
|
4
|
4
|
1
|
3
|
3
|
1
|
2
|
4
|
這是就很好的解決了:
數據表的設計模式:表和表之間有多對多的關係時,就應當使用中間表來解決數據冗餘的問題。
總結:通過定單細節表,把訂單表和貨物表的多對多的關係,簡化成了一對多的關係,從機達到解決數據冗餘的問題。
批量操作數據庫:new Statement().addBatch(“sql語句”);
|