内置表示不需要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,所以找不到真是的。