內置表示不需要new便可直接使用。
一、基礎知識
1.緩沖區:IO最原始是一個一個字節的讀取,這就像吃米飯的時候一粒一粒的吃,很沒有效率,這時候就有了碗,一碗一碗的吃,豈不痛快。
2.Get提交不能超過2k,安全性不高,查詢、搜索時做,效率高,Post提交的信息在Html header里,信息量大,在注冊、修改、上傳時候。
二、out內置對象
向客戶端輸出信息,是JspWriter的對象,常用的有println、flush和clear和clearbuffer,后兩者的區別是,潛着在flush調用后會拋出異常,前者不會....拋出異常部分后面的代碼都不會被執行,還有getBufferSize(緩沖區大小,如果不設置則為0),getRemaining(緩沖區剩余大小),isAutoFlush(緩沖區滿時是否自動刷新)。
三、Request對象
是HttpServletRequest的實力,客戶端請求完成之前,一直存在。
1 <%@ page language="java" contentType="text/html; charset=utf-8"%>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
3 <html>
4 <head>
5 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
6 <title>Insert title here</title>
7 </head>
8 <body>
9 <form name="regiserForm" action="mainPage.jsp" method="post">
10 <table>
11 <tr>
12 <td>姓名</td>
13 <td>
14 <input type="text" name="userName">
15 </td>
16 <tr>
17 <tr>
18 <td>愛好</td>
19 <td>
20 <input type="checkbox" name="favourite" value="羽毛球">羽毛球 21 <input type="checkbox" name="favourite" value="籃球">籃球 22 <input type="checkbox" name="favourite" value="網球">網球 23 <input type="checkbox" name="favourite" value="足球">足球 24 </td>
25 </tr>
26 <tr>
27 <td colspan=2>
28 <input type="submit" value="提交">
29 </td>
30 </tr>
31 </table>
32 </form>
33 </body>
34 </html>
這是注冊頁面,第一點需要注意的是
<%@ page language="java" contentType="text/html; charset=utf-8"%>
charset在contentType里面(看冒號),單獨寫的話提示找不到屬性。第二點是布局問題,名字和input分別占用一個td,工兩個td,所以下面的提交是colspan=2。

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<% request.setCharacterEncoding("UTF-8"); String userName= request.getParameter("userName"); String[] favourite = request.getParameterValues("favourite"); out.println("姓名   "+userName); out.print("愛好"); for (int i=1; i<favourite.length; i++) { out.println("   "+favourite[i]); } %>
</body>
</html>
由於頁面編碼方式都是UTF-8,但是參數傳輸方式默認是ISO-8859-1,所以現瀏覽器里的結果是亂碼。在接受參數之前加入
request.setCharacterEncoding("UTF-8");

下面測試Get傳遞參數
1 <!-- 直接這樣會出現空指針異常,因為並沒有傳遞愛好屬性,而mainPage直接去獲取愛好,所以空指針,因此需要判斷一下 -->
2 <a href="mainPage.jsp?userName=李四">測試Get方法(URL傳參數)</a>
..........................
request.setCharacterEncoding("UTF-8"); String userName= request.getParameter("userName"); out.println("姓名   "+userName); if(request.getParameterValues("favourite")!=null) { String[] favourite = request.getParameterValues("favourite"); out.print("愛好"); for (int i=1; i<favourite.length; i++) { out.println("   "+favourite[i]); } }
按理說這種方式傳遞中文不論地址欄還是現實的結果都會是亂碼,但是我這竟然沒有,如果有的話
<Connector port="9999" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
配置Tomcat下的server.xml,第一個Connector,可以修改端口號,同事最后加入URIEncoding這個屬性。或者
String str= request.getParameter("userName");
String userName = new String(str.getBytes("ISO-8859-1"),"UTF-8");
還有一種就是為Connector 節點添加useBodyEncodingForURI="true" 屬性即可。
還可以在request對象里setAttribute('"password","123456")下面通過getAttribute("password")來獲得,原來是getParameter。
getContentType:或者MIME類型
getProtocol:協議類型和版本號
getServerPort:服務器端口號
getRemoteAddr:客戶端的IP地址



真是的IP地址因為是動態IP,所以找不到真是的。
