JSP +++SERVIET總複習

1、 JSP基礎概念javascript

  1. 軟件架構

B/S架構:Browser/Server,瀏覽器-服務器 css

           最大的優勢就是:一次部署,到處訪問。html

C/S架構:Client/Server,客戶端-服務器 java

           功能、事件豐富,能夠完整的使用計算機的一系列資源。可是升級維護不方便。mysql

  1. B/S架構工做原理

採用請求+相應的工做模式進行交互。web

1.輸入打開瀏覽器,輸入網址,回車。sql

2.請求將由客戶端瀏覽器發送至WEB應用服務器,進行處理。數據庫

3.WEB應用服務器將響應的結果(html\css\js\image...)發送回客戶端瀏覽器express

4.瀏覽器渲染解析html,將頁面呈現出來。apache

  1. URL

定義:統一資源定位符。經過URL來尋找網絡資源。

格式:協議部分  主機地址  目標資源地址  參數

示例:http://www.cnblogs.com/java/articlelist.jsp?key=tomcat

解釋:協議部分:http協議

主機地址:www.cnblogs.com

資源地址:java/articlelist.jsp

參數部分:key=tomcat

   注意:http協議的默認端口是:80

  1. web服務器

是能夠向發出請求的瀏覽器提供文檔的程序。提供網上的信息瀏覽服務。

常見的WEB服務器:IISTomcatWebLogicApacheNginx...... 

  1. Tomcat

下載地址:

http://tomcat.apache.org/

目錄結構: 

1.bin目錄:用於存放tomcat的一些核心組件、啓動以及中止的命令。

     2.conf目錄:TOMCAT的配置目錄,裏面存放了tomcat的一系列配置文件。

     3.lib目錄:存放TOMCAT運行時須要的全部Jar

     4.logs目錄:存放tomcat啓動、運行過程當中產生的全部日誌文件。

     5.temp目錄:臨時目錄

     6.webapps目錄:web網站發佈的目錄

     7.work目錄:tomcat中發佈的動態網站的工做目錄。

如何修改Tomcat的默認端口:

  1. 打開Tomcat目錄,找到conf目錄下的server.xml文件;
  2. 找到配置節<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
  3. port修改成目標端口。
  4. eclipse中配置tomcat

1>.Window -> Pereferences 打開對話框

2>.展開Server節點,選擇Runtime Environment

3>.從右側點擊Add按鈕,從對話框中選擇Apache Tomcat 7.0,點擊下一步

4>.在彈出的Tomcat Server對話框中選擇以前Tomcat的解壓目錄。點擊完成便可。

  1. eclipse建立的動態網站目錄結構介紹

1>.java Resrouces -> src 目錄:存放全部的java源文件

2>.WebContent 目錄:存放網站須要的jsp頁面文件、html文件、cssjsimage等資源。

3>.build 目錄:java文件、jsp文件的編譯目錄

4>.Web Content -> WEB-INF 目錄:該目錄中的全部文件不會直接被客戶端(瀏覽器)訪問。

因此一些敏感的資源文件能夠放到本目錄。好比網站的配置文件web.xml文件就存在於該目錄。

  1. eclipse中如何發佈web站點

1>.打開Server窗口

2>.右擊Server窗口的空白區域,依次選擇:New -> Server,彈出新建服務器窗口

3>.從窗口中選擇Tomcat v7.0 Server,點擊Finishe便可。

4>.雙擊新添加的Tomcat v7.0 Server節點,便可彈出新的對話框。

從對話框中選擇Server Locations,選中第二項:Use Tomcat installation;

同時,Server Path修改成:webapps

最後Contrl + S保存。

5>.右擊Tomcat,選擇「Add And Remove

從對話框的左側選擇目標網站,點擊Add按鈕便可添加到右側。

最後點擊Finish

  1. 解決JSP中文亂碼的問題

1>.Window -> Pereferences 打開對話框,選擇General -> Content Types

從右側選擇Text -> JSP,而後在最下面的文本框中將ISO-8859-1改成UTF-8

2>.選擇General -> Workspace

從右側最下面,選擇text file encoding,改成:UTF-8

3>.選擇Web -> JSP Files節點

從右側Encoding選擇ISO 10646/Unicode(UTF-8)

最後點擊OK便可。

  1. JSP

JSP(Java  Server  Pages)JSP是運行在服務器端的Java頁面。使用HTML嵌套Java代碼實現。

  1. JSP中編寫JAVA代碼

1>.  <% ... %>

在裏面能夠寫多行java代碼,每行用分號結尾。注意:不能定義方法。

2>.  <%! ...  %>

在裏面只能定義全局變量和方法。

3>.  <%= ... %>

向頁面輸入內容。等價與<% out.write("abc"); %> == <%= "abc" %>

  1. 若是在jsp頁面中導入其餘的包

page指令中添加屬性import,值爲包名。

<%@ page import="java.util.*" %>

  1. 配置默認頁

例如,將index.jsp配置成默認頁。

1>.打開web.xml文件,修改welcome-file-list;

2>.在第一個節點中添加<welcome-file>index.jsp</welcome-file>

注意:每次web.xml被修改之後,要重啓Tomcat

  1. getpost的區別

1.get會將參數跟到url地址後面;post則不會。

2.get提交的數據有大小限制,Post則不會。

3.get提交不安全,post提交安全。

4.get方式有利於Url傳播,post則不利於url傳播。

  1. Http狀態碼

200    請求成功

404    請求的資源不存在

500    服務器內部錯誤

302    重定向

2、 JSP九大內置對象

  1. 請求對象:request

request.getRemoteAddr()   獲取客戶端的IP地址。

request.setAttibute(String, Object)  存儲數據

Object request.getAttribute(String)  獲取數據

String = request.getParameter("參數名");  獲取參數的單個值

String[] s = request.getParameterValues("參數名");獲取參數的多個值

注意:只有在同一次請求中存儲的數據才能共享。

  1. 輸出對象:out
  2. 響應對象:response

轉發和重定向

重定向:客戶端會前後發送2次請求到服務器。

response.sendRedirect("welcome.jsp");

重定向是客戶端行爲。

轉發:客戶端向服務器發送一次請求,服務器端再請求另一個頁面地址,最後將結果響應給客戶端

request.getRequestDispatcher("login.jsp").forward(request, response);

轉發是服務器行爲。

  1. 應用程序對象:application

application是服務器開闢的一塊共享數據存儲區域。全部的會話都可以從application讀寫數據。

application中存儲的數據永遠有效(服務器關閉時數據纔會失效)。

applicaton.setAttribute(String key, Object value);//存或修改數據

Object applicaton.getAttribute(String key); //讀取數據

applicaton.removeAttribute(String key);//移除數據

  1. 會話對象:session

客戶端第一次向服務器發送請求之後,會話就會創建。當把瀏覽器關閉掉,從新再打開瀏覽器,就算是另外一次新會話了。服務器會爲每個會話創建單獨的數據存儲區域。

session中存儲的數據有有效期的限制。session默認超時時間爲30分鐘。

更改默認超時時間有兩種方式:

方式一:經過配置修改

web.xml文件中調整session失效時間:

<session-config>

        <session-timeout>30</session-timeout>

</session-config>

方式二:經過Java代碼修改

session.setMaxInactiveInterval30*60;//以秒爲單位

session其餘方法介紹

1.session.setAttribute(String key, Object value);//存或修改

2.Object session.getAttribute(String key); //讀取數據

3.session.removeAttribute(String key);//移除數據

4.session.invalid();//設置session失效(會話失效而且該會話全部存儲的數據都將丟失)

  1. 頁面上下文對象:pageContext
  2. 頁面對象:page
  3. 配置對象:config
  4. 異常對象:exception

3、 Cookie介紹

1>.cookie將數據存儲客戶端計算機。

Cookie cookie1 = new Cookie(String, String);

向客戶端寫cookie,使用responseresponse.addCookie(...);

獲取客戶端的cookie,使用requestrequest.getCookies();

2>.Cookie也有生命週期(有效期),經過cookie.setMaxAge(int seconds)

若是seconds=0,表示當關閉瀏覽器後,cookie自動失效;

若是seconds<0,表示從客戶端刪除cookie

若是seconds>0,表示cookie失效的具體時間。

注意:JSESSIONID是系統系統添加的一個cookie,每次會話建立後JSESSIONID就會添加到cookie中。

3>.對於一些不敏感(不重要)的業務數據,而且數據量較小,就能夠存儲到cookie中。

4>.cookiesessionapplication在存儲數據方面的差別。

相同點:

cookiesessionapplication均可以存儲數據。

不一樣點:

1.sessionapplication都是把數據存儲到服務器端;

2.cookie將數據存儲到客戶端;

3.session是用戶會話級別,不一樣用戶不能共享數據;application是全局的,全部用戶共享數據。

4.sessionapplication會對服務器形成壓力,而cookie不會。

4、 JSP亂碼問題(java後臺亂碼)

JSP默認採用ISO-8859-1編碼,該編碼不支持中文等字符。因此須要在後臺設置編碼格式。

GET方式發送請求時的編碼解決方案:

第一種:String title = request.getParameter("advtitle");

    String title1 = new String(title.getBytes("ISO-8859-1"), "UTF-8");

第二種:在tomcatconf->server.xml中修改Connector,增長URIEncoding屬性。

<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

POST方式發送請求時的編碼解決方案:

    request.setCharacterEncoding("UTF-8");

    response.setCharacterEncoding("UTF-8");

5、 JDBC

1.基本概念

定義:Java DataBase Connectivityjava數據庫鏈接技術。

用途:用於實現java程序和各類數據庫(Oracle|Mysql|Sql Server...)的操做。

JDBC提供了一組類和接口(API),它們位於java.sql以及javax.sql包中。

2.JDBC訪問數據庫的步驟

1>.加載驅動程序

首先將驅動的jar包文件拷貝到web項目的lib目錄中

Class.for("驅動程序類");//加載驅動程序

2>.獲取鏈接對象

鏈接字符串:jdbc:mysql://127.0.0.1:3306/newsdb?user=root&password=123456

Connection connection = DriverManager.getConnection("鏈接字符串");

3>.建立Statement,執行SQL語句

Statement stmt = connection.createStatement();

int count = Statement.executeUpate(String sql);

注意:

executeUpdate方法處理的SQL包括DML(insert|update|delete)和DDL(Create|ALTER|DROP)

        executeUpate()方法的返回值爲int

insert|update|delete返回值爲大於0的值,表示成功

create|alter|drop返回值永遠爲0

Statement.executeQuery(String sql);

注意:

executeQuery方法處理的SQL包括DQL(select)

4>.返回ResultSet結果或者數據庫受影響的行數

ResultSet set = stmt.executeQuery();

while(set.next()==true){

    //循環一次取一條

    set.getString(arg0);//取字符串

    set.getInt(arg0);//取整數

    set.getDouble(columnLabel);//double

set.getFloat(columnIndex);//float

set.getDate(columnIndex);//取年月日

set.getTime(columnIndex);//取時分秒

set.getTimestamp(columnIndex)//取年月日時分秒     

}

5>.關閉鏈接

connection.close();

3. SQL注入

  用戶輸入一些特殊的字符,讓程序中動態拼接的SQL語句,改變原來執行的含義,最終獲取非預期的結果。

  致使SQL注入的緣由就在於:程序中的SQL語句是經過字符串動態拼接的。

  例如:

String sql = "select * from userinfo where username='"+uname+"' and password='"+upass+"'";

若是uname = zhangsan     upass = 123456,那麼上述sql變量的值爲:

select * from userinfo where username='zhangsan' and password='123456'

若是uname = 1' or 1=1 or '1     upass = 123456,那麼上述sql變量的值爲:

select * from userinfo where username='1' or 1=1 or '1' and password='123456'

4.如何避免程序中被SQL注入?

使用參數化查詢。具體來講,就是在程序中儘可能不要使用Statement類,而採用PreparedStatement類。

StatementPreparedStatement的父類。

//SQL語句中,每個參數使用?做爲佔位符

String sql = "select count(*) from userinfo where username=? and userpass=?";

PreparedStatement stmt = conn.prepareStatement(sql);

stmt.setString(1, username);

stmt.setString(2, userpass);

ResultSet set = stmt.executeQuery();

6、 分層開發

1.分層開發

  在項目實際開發過程當中,會將整個項目從上到下劃分爲界面層、業務邏輯層、數據層。

  三層開發是項目開發實踐中典型的開發模式。

  目的:實現高內聚、低耦合。

2.各層功能

  界面層

    功能:負責數據展現,蒐集用戶輸入。即和用戶進行交互的層。

          界面層通常是指jsp頁面、html頁面等。

  業務邏輯層

    功能:負責處理功能模塊的業務邏輯,以及界面層和數據層的數據流轉。

    添加類的原則: 

        根據功能模塊來添加類。好比有用戶管理模塊,那麼則能夠添加UserManagerService類。

  數據層

    功能:和數據庫進行交互。

          通常在數據層會編寫SQL語句;JDBCHibernatemybatis

    添加類的原則: 

        每張數據表均添加一個對應的數據操做類。好比用戶表userinfo,則添加UserInfoDao類。

  實體層

    針對數據表建立出來的實體類;+ 用戶自定義的一些實體類

3.各個層之間的調用關係

  界面層  調用  業務邏輯層; 

  業務邏輯層  調用  數據層;  

  數據層  操做  數據庫; 

  注意:調用的意思,就是在代碼中建立對應的類對象,而後經過對象調用方法。

4.分層開發的優缺點

  優勢: 

  1、開發人員能夠只關注整個結構中的其中某一層;

  2、能夠很容易的用新的實現來替換原有層次的實現;

  3、能夠下降層與層之間的依賴;

  4、利於各層邏輯的複用。

  缺點: 

  1、下降了系統的性能

  2、增長了程序的複雜度

  3、有時會致使級聯的修改。

7、 Servlet

1.Servlet基本概念

每個jsp頁面就是一個java類,該類繼承自:HttpJspBase -> HttpServlet

因此說一個jsp頁面本質上就是一個servlet

Servlet的使用步驟

    1>.定義Servlet 

       添加一個普通的Java類,而後繼承HttpServlet類。

       最後重寫doGetdoPost方法。

   以get方式發送的請求進入doGet方法處理;以Post方式發送的請求進入doPost方法處理。

    2>.web.xml中配置servlet

<servlet>

  <servlet-name>welcome_servlet</servlet-name>

  <servlet-class>jsp_charpter3_0908.Welcome</servlet-class>

</servlet>

<servlet-mapping>

  <servlet-name>welcome_servlet</servlet-name>

  <url-pattern>/welcome.html</url-pattern>

</servlet-mapping>

       注意:每一個servlet都要配置兩個xml節點:servletservlet-mapping 

             兩個節點中servlet-name必須同樣; 

             url-pattern:用於指定映射的url地址

2.Content-Type

  內容類型,通常是指網頁中存在的Content-Type,用於定義網絡文件的類型和網頁的編碼。

決定文件接收方將以什麼形式、什麼編碼讀取這個文件。

  常見的Content-Type

    text/css                層疊樣式表

    text/javascript         js代碼

    text/html               html代碼

    text/plain              純文本

    image/jpeg              圖片jpg

    application/msword      word文檔

    application/vnd.ms-excel     excel文檔

    application/json

    response.setContentType("content-type");

3.基於註解配置Servlet

  在添加的Servlet類上面添加註解:WebServlet

  name:設置servlet的名稱

  urlPatterns:設置servletUrl映射地址

  示例: 

      @WebServlet(name="delete_goods", urlPatterns={"/goods/delete.html"})

      public class AddGoods extends HttpServlet{...}

4.其餘

  如何在Servlet中獲取session

  HttpSession session = request.getSession();

8、 EL表達式

  1. 基本概念

全名:Expression Language,即表達式語言。

做用:它提供了在 JSP 中簡化表達式的方法,讓Jsp代碼更加簡化。代替JSP頁面中複雜的JAVA代碼。

語法:EL表達式老是用大括號括起,並且前面有一個美圓符($)前綴:${expression}

  1. .[].運算符 

n EL 提供.[]兩種運算符來存取數據。

n 點號操做符容許使用一個Map鍵或一個bean屬性名來訪問值。

例如:使用${foo.bar}能夠獲得bar屬性的值。

注意:放在點號操做符右邊的東西必須遵循Java的標識符命名規則!

n []操做符比點號功能更強大,由於利用[]能夠訪問數組和List

例如,若是musicList是一個ArrayList,能夠用${musicList[0]}${musicList["0"]}來訪問列表的第一個值。

注意:當要存取的屬性名稱中包含一些特殊字符,如.?等並不是字母或數字的符號,就必定要使用 []

例如:${user.My-Name}應當改成${user["My-Name"] }

若是要動態取值時,就能夠用[]來作,而.沒法作到動態取值。

例如:${sessionScope.user[data]}data 是一個變量。

  1. EL隱式(隱含)對象

n 與範圍有關的隱含對象

pageScoperequestScopesessionScope applicationScope

EL中,這四個隱含對象只能用來取得範圍屬性值,即getAttribute(String name),卻不能取得其餘相關信息。例如:咱們要取得session中儲存一個屬性username的值,java代碼爲:session.getAttribute("username")。而在EL中則使用下列方法:${sessionScope.username}。若是獲取的對象爲null,使用el表達式則不會輸出null,可是經過getAttribute會在頁面中輸出Null

${...Scope.name} 也能夠這樣寫${name}

此時el會依次從pageScope>requestScope>sessionScope>applicationScope中查找name

n 與輸入有關的隱含對象

與輸入有關的隱含對象有兩個:paramparamValues,它們是EL中比較特別的隱含對象。

例如:咱們要取得用戶的請求參數時,能夠利用下列方法:

request.getParameter(String name)request.getParameterValues(String name) 。

EL中則可使用paramparamValues二者來取得數據。 

語法格式爲:${param.name}${paramValues.name}

  1. 其餘隱含對象

1>.cookie

   例:要取得cookie中名稱爲userCountry的值,可使用${cookie.userCountry}來取得它。

2>.headerheaderValues

   header 儲存用戶瀏覽器和服務端用來溝通的數據 

   例:要取得用戶瀏覽器的版本,可使用${header["User-Agent"]}

  1. EL運算符

1>.算術運算符有五個:+-*$/div%mod 

2>.關係運算符有六個:==eq!=ne<lt>gt<=le>=ge

3>.邏輯運算符有三個:&&and||or!not

4>.其它運算符有三個:Empty運算符、條件運算符、()運算符 

   例:${empty param.name}${A?B:C}${A*(B+C)} 

  1. 其餘

JSP頁面中能夠動態的啓用或者禁用EL表達式

     <%@ page isELIgnored="true"%> 表示是否禁用EL語言,TRUE表示禁止.FALSE表示不由止.JSP2.0中默認的啓用EL語言.

9、 JSTL

  1. JSTL簡介

JSP標準標籤庫(JSTL)是一個JSP標籤集合,它封裝了JSP應用的通用核心功能。

JSTL支持通用的、結構化的任務,好比迭代,條件判斷,XML文檔操做,國際化標籤,SQL標籤。 除了這些,它還提供了一個框架來使用集成JSTL的自定義標籤。

根據JSTL標籤所提供的功能,能夠將其分爲5個類別。

n 核心標籤

n 格式化標籤

n SQL 標籤

n XML 標籤

n JSTL 函數

  1. JSTL 庫安裝

Apache Tomcat安裝JSTL 庫步驟以下:

Apache的標準標籤庫中下載的二進包(jakarta-taglibs-standard-current.zip)

下載地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

下載jakarta-taglibs-standard-1.1.1.zip 包並解壓,將standard.jarjstl.jar文件拷貝到/WEB-INF/lib/下。

注意:使用任何庫,必須在每一個JSP文件中的頭部包含<taglib>標籤。

  1. 核心標籤

核心標籤是最經常使用的JSTL標籤。引用核心標籤庫的語法以下:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

標籤             描述

<c:out>         用於在JSP中顯示數據,就像<%= ... >

<c:set>         用於保存數據

<c:remove>         用於刪除數據

<c:catch>         用來處理產生錯誤的異常情況,而且將錯誤信息儲存起來

<c:if>             與咱們在通常程序中用的if同樣

<c:choose>         自己只當作<c:when><c:otherwise>的父標籤

<c:when>         <c:choose>的子標籤,用來判斷條件是否成立

<c:otherwise>     <c:choose>的子標籤,接在<c:when>標籤後,當<c:when>false時被執行

<c:import>        檢索一個絕對或相對 URL,而後將其內容暴露給頁面

<c:forEach>    基礎迭代標籤,接受多種集合類型

<c:forTokens>    根據指定的分隔符來分隔內容並迭代輸出

<c:param>        用來給包含或重定向的頁面傳遞參數

<c:redirect>    重定向至一個新的URL.

<c:url>        使用可選的查詢參數來創造一個URL

forEach標籤講解

<c:forEach var="" items="" varStatus="" begin="" end="" step=""></c:forEach>

【參數解析】:

         Ivar設定變量名用於存儲從集合中取出元素。

         IIitems指定要遍歷的集合。

         IIIvarStatus設定變量名,該變量用於存放集合中元素的信息。    

         IVbeginend用於指定遍歷的起始位置和終止位置(可選)。

         Vstep指定循環的步長。

varStatus4個狀態屬性】: 

index:當前循環的索引值    

count:循環的次數   

frist:是否爲第一個位置   

last:是否爲最後一個位置

  1. 格式化標籤

JSTL格式化標籤用來格式化並輸出文本、日期、時間、數字。引用格式化標籤庫的語法以下:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

標籤                  描述

<fmt:formatNumber>  使用指定的格式或精度格式化數字

<fmt:formatDate>      使用指定的風格或模式格式化日期和時間

<fmt:formatDate value="${xx}" pattern="dd/MM/yyyy hh:mm aa"/>

10、 過濾器

1.過濾器

概念:過濾器能夠動態地攔截請求和響應,以變換或使用包含在請求或響應中的信息。

    過濾器就是一個實現了Filter接口的Java類。

    在客戶端的請求訪問後端資源以前,攔截這些請求。 

    在服務器的響應發送回客戶端以前,處理這些響應。

2.如何使用過濾器

1>.定義一個類,實現接口Filter

2>.重寫initdestroydoFilter方法。

n init(FilterConfig arg0)方法在初始化過濾器時被調用,在生命週期內只執行一次。

n doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)

攔截請求的核心方法。

//參數1:請求對象

HttpServletRequest request = (HttpServletRequest)req;

//參數2:響應對象

HttpServletResponse response = (HttpServletResponse)resp;

//參數3:過濾器鏈   chain 

n destroy()方法,在過濾器被銷燬時調用。

3.課堂案例

n 編碼過濾器:解決post提交時,中文亂碼問題

n 權限過濾器:解決未登陸狀態下,拒絕訪問系統資源。

@WebFilter(filterName="login_filter", urlPatterns={"/*"})

public class AuthFilter implements Filter {

 

@Override

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)

throws IOException, ServletException {

//參數1:請求對象

HttpServletRequest request = (HttpServletRequest)req;

//參數2:響應對象

HttpServletResponse response = (HttpServletResponse)resp;

//排除登陸

String url = request.getRequestURL().toString();

if(url.toLowerCase().contains("login.html")){

//繼續後續操做

chain.doFilter(request, response);

return;

}

 

//判斷是否已經登陸

if(request.getSession().getAttribute("user")==null){

//跳轉到登陸

response.sendRedirect(request.getContextPath() + "/login.html");

}else{

//繼續後續操做

chain.doFilter(request, response);

}

}

 

@Override

public void destroy() {

}

 

@Override

public void init(FilterConfig arg0) throws ServletException {

}

}

 

n 獲取請求消耗的時間的過濾器:查看系統中的性能瓶頸點。

4.過濾器的應用場合: 

n 身份驗證過濾器(Authentication Filters)。

n 數據壓縮過濾器(Data compression Filters)。

n 加密過濾器(Encryption Filters)。

n 觸發資源訪問事件過濾器。

n 圖像轉換過濾器(Image Conversion Filters)。

n 日誌記錄和審覈過濾器(Logging and Auditing Filters)。

n MIME-TYPE 鏈過濾器(MIME-TYPE Chain Filters)。

n 標記化過濾器(Tokenizing Filters)。

11、 文件上傳

1.JSP中實現文件上傳

  1>.解決方案:Apache提供的文件上傳組件。

  2>.將下面的兩個jar包拷貝到lib目錄。

     commons-fileupload-***.jar

     commons-io-***.jar

  3>.修改jsp頁面中的form標記

     method屬性必定要設置爲post

     將enctype屬性的值設置爲multipart/form-data

     注意:enctype="multipart/form-data"form表單將以二進制流的形式提交到web服務器。

           以後,就不能再經過request.getParameter("...")來獲取參數值了,好鬱悶... 

Tomcat7配置數據源

JDBC的操做中,打開和關閉數據庫鏈接,是最耗費數據庫資源的,咱們能夠在服務器上存放必定量的數據庫鏈接,每當程序要鏈接數據庫時,就將這些連接給它們,而一旦程序退出數據庫操做時,要將這些連接返回給服務器。

數據庫鏈接池負責分配、管理和釋放數據庫鏈接。這項技術能明顯提升對數據庫操做的性能。

下圖是數據源的基本概念:

 

1:經過Connection Pool 管理數據庫鏈接

2:經過Data Source 去管理Connection Pool

3: Data Source JNDI Tree 綁定

JNDI配置方式

如今來說一下如何到服務器上對 Data Source 進行配置?

服務器: Tomcat 7

數據庫:MySQL

  1. 將下面的代碼添加到Tomcat服務器上conf/context.xml中的<Context></Context>標籤中

<Resource

       name="jdbc/shopping"

       auth="Container"

       type="javax.sql.DataSource"

       maxActive="100"

       maxIdle="30"

       maxWait="10000"

       username="root"

       password="root"

       driverClassName="com.mysql.jdbc.Driver"

       url="jdbc:mysql://localhost:3306/shopping"

/>

上下文context.xml中的參數的解析以下:

n name屬性是數據源名稱,一般採起jdbc/**.

n driverClassName屬性是驅動程序名稱。

n usernamepassword,數據庫名稱和密碼

n url:訪問的數據庫路徑。其中url的內容組成解析上篇博客中已經分析

n maxActive屬性是併發鏈接的最大數。設置爲0則無限制。

n maxWait屬性是等待鏈接的最大鏈接的時間。

n maxIdle屬性是鏈接池中空閒的鏈接的個數。

  1. 添加jar

JDBC驅動程序mysql-connector-java-5-bin.jar放置在%TOMCAT_HOME%\lib和應用的WEB-INF\lib

  1. 經過JAVA代碼使用JDNI獲取數據庫鏈接對象

注意:在查找時須要對名稱進行定位:java:comp/env

Connection conn = null;

try {

Context context = new InitialContext();

DataSource dataSource = (DataSource)context.lookup("java:comp/env/jdbc/shopping");

conn = dataSource.getConnection();

} catch (NamingException e) {

e.printStackTrace();

}

相關文章
相關標籤/搜索