對jsp基礎的一些掌握和概括
先看當我們創建jsp文件時,eclipse自動生成的jsp代碼。
之後,我們再添加一些代碼,如圖所示。
如上圖所示,JSP的頁面元素包括: HTML, java代碼(腳本Scriptlet),指令,註釋。
a.腳本Scriptlet,網頁中的java代碼可以分爲如下三類。
i. 主要用來定義書寫局部變量,java語句等
<%
局部變量、java語句
%>
ii.主要用來定義全局變量和方法
<%!
全局變量、定義方法
%>
iii.可以用來輸出變量值,而且不需要加分號,前兩種和普通的java語句一樣,需要加分號
<%=輸出表達式 %>
demo 代碼如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%!
public String name="";
public void show()
{
name="hello jsp method";
}
%>
<br/>
<%
String name1="hello param";
out.print("name1:"+name1+"<br/>") ;
show();
out.print("name:"+name) ;
%>
<br/>
<%="name3:"+name1 %>
</body>
</html>
訪問該項目文件如圖
注意:如果此時服務已經啓動,修改web.xml、配置文件、java 等(後端服務器相關的代碼或者配置)需要重啓tomcat服務,但是如果修改 Jsp\html\css\js ,不需要重啓,注意,out.println()不能回車; 要想回車:“<br/>”,即out.print() 和<%= %> 可以直接解析html代碼
b.指令
page指令
<%@ page ....%>
page指定的屬性:
language:jsp頁面使用的腳本語言,在這裏一般是java
import:導入類
pageEncoding:jsp文件自身編碼
contentType:瀏覽器解析jsp的編碼
例如:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.Date" %>
利用import屬性導入一個包爲java.util.Date
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.Date"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
時間:
<%
out.print(new Date());
%>
<br/>
<%="時間:"+new Date()%>
</body>
</html>
訪問該項目文件如圖
c.註釋,註釋分爲以下三種。
html註釋:<!-- --> , 可以被客戶 通過瀏覽器查看源碼 所觀察到
java註釋:// /*...*/ 不可以被客戶 通過瀏覽器查看源碼 所觀察到
jsp註釋:<%-- --%> 不可以被客戶 通過瀏覽器查看源碼 所觀察到
demo代碼如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.Date"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- html 註釋 -->
<%
//java註釋
/*
java註釋
*/
%>
<%--jsp註釋 --%>
</body>
</html>
訪問該項目文件,並在瀏覽器查看源代碼如圖
JSP九大內置對象(自帶的,不需要new 也能使用的對象)。
out:輸出對象,向客戶端輸出內容。
request:請求對象;存儲“客戶端向服務端發送的請求信息”。
request對象的常見方法:
String getParameter(String name) :根據請求的字段名key (input標籤的name屬性值) ,返回字段值value (input標籤的value屬性值)
String[] getParameterValues(String name): 根據請求的字段名key ,返回多個字段值value (checkbox)
void setCharacterEncoding("編碼格式utf-8") :設置post方式的請求編碼 (tomcat7以前默認iso-8859-1,tomcat8以後改爲了utf-8)
getRequestDispatcher("b.jsp").forward(request,response) ; :請求轉發 的方式跳轉頁面 A - > B
ServletContext getServerContext():獲取項目的ServletContext對象
示例:
註冊和顯示
register.jsp
<%@ 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=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="show.jsp" method="get">
用戶名:<input type="text" name="uname" /><br/>
密碼:<input type="password" name="upwd"/><br/>
年齡:<input type="text" name="uage"/><br/>
愛好<br/>
<input type="checkbox" name="uhobbies" value="足球"/>足球、
<input type="checkbox" name="uhobbies" value="籃球"/>籃球、
<input type="checkbox" name="uhobbies" value="乒乓球"/>乒乓球<br/>
<input type="submit" value="註冊">
</form>
</body>
</html>
show.jsp
<%@ 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=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//設置編碼
request.setCharacterEncoding("utf-8") ;
//獲取值
String name = request.getParameter("uname") ;
int age = Integer.parseInt(request.getParameter("uage") ) ;
String pwd = request.getParameter("upwd") ;
//通過該方法返回一個字符串數組
String[] hobbies = request.getParameterValues("uhobbies") ;
%>
註冊成功,信息如下:<br/>
姓名:<%=name %><br/>
年齡:<%=age %><br/>
密碼:<%=pwd %><br/>
愛好:<br/>
<%
//判斷拿到的值是否爲null,以免報NullPointerException
if(hobbies !=null)
{
for(String hobby :hobbies)
{
out.print(hobby +" ");
}
}
%>
</body>
</html>
訪問該項目文件,
此時觀察到地址欄發生了變化,是因爲我們表單的提交方式設置爲get,該方式的地址欄信息一般如下!
連接/文件?參數名1=參數值1 & 參數名2=參數值2 & 參數名1=參數值1 。
get提交方式: method="get" 和 地址欄 、超鏈接(<a href="xx">)請求方式 默認都屬於get提交方式
我們將form表單的提交方式改爲post,可以觀察到:
get與post請求方式的區別:
a. get方式 在地址欄顯示 請求信息 (但是地址欄能夠容納的 信息有限,4-5KB;如果請求數據存在大文件,圖片等 會出現地址欄無法容納全部的數據而出錯) ;post不會顯示。
b. 文件上傳操作,必須是post。
推薦使用post
統一請求的編碼 request。
get方式請求 如果出現亂碼,解決:
a.統一每一個變量的 編碼 (不推薦)
new String( 舊編碼,新編碼);
name = new String(name.getBytes("iso-8859-1"),"utf-8");
b. 修改server.xml ,一次性的 更改tomcat默認get提交方式的編碼 (utf-8)
建議 使用tomcat時, 首先在server.xml中 統一get方式的編碼.. URIEncoding="UTF-8"
<Connector connectionTimeout="20000" port="8888" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8/>
tomcat7 :默認編碼格式爲: (iso-8859-1)
tomcat8 :默認編碼格式爲:(utf-8)
post方式請求 如果出現亂碼,解決:
request.setCharacterEncoding("utf-8") ;
還剩七個內置對象:分別是:
session 會話對象
appliation 全局對象
response 響應對象
pageContext JSP頁面容器
config 配置對象(服務器配置信息)
page 當前JSP頁面對象(相當於java中的this)
exception 異常對象
後面一一複習使用!