韓順平j2ee學習筆記與心得

 

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.reloadservlet(webApps)2.關閉tomcat3.關機)值行了這個函數後,這個網站內的所有的sessionconTest都被釋放,爲空。

表單提交數據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的使用方法:①得到sessionHttpSession 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的各個屬性要佔用服務器的內存,因此軟件公司都是在迫不得已的情況下才使用。

注意:以文件—新建—窗口,的方式打開窗口,sessionID是不變的,也就是同一個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操作數據庫注意事項

需要將連接數據庫的3jar包,拷貝到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>

<!--驅動設置,該驅動放在tomcatcommon/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的概述

  jspservlet技術的補充,訪問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(serveltHttpSessio類的實例) //用於保存用戶的信息,跟蹤用戶的行爲

      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語句”);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章