1.1 JSP簡(jiǎn)介
1.1.1 JSP概述
- JSP概述
- 全稱是Java Server Pages,他和Servlet一樣滑绒,也是Java所提供的一門用于開發(fā)動(dòng)態(tài)WEB資源的技術(shù)店诗,
- JSP也是JavaEE的規(guī)范之一混埠,JSP的底層其實(shí)就是Servlet霉翔。
- JSP的特點(diǎn)
- 編寫JSP就像編寫HTML一樣
- JSP和HTML的區(qū)別
- HTML只能向客戶端提供靜態(tài)數(shù)據(jù)
- JSP技術(shù)允許我們?cè)陧?yè)面中嵌套Java代碼咖为,從而可以向客戶端提供動(dòng)態(tài)的數(shù)據(jù)
1.1.2 JSP與Servlet的區(qū)別
- Servlet本身的缺點(diǎn)
- 每一個(gè)Servlet都需在web.xml進(jìn)行配置
- 顯示html元素的時(shí)候非常麻煩
- jsp = html + java + jsp自身的東西 本質(zhì)Servlet
- 02-08年 基本上開發(fā)全部都是用jsp 可讀性非常(html里面加了java代碼)
- 缺點(diǎn) :?jiǎn)渭兊膉sp頁(yè)面不適合做這種大型項(xiàng)目
1.2 JSP的原理
- 原理:
- 一個(gè)JSP文件第一次被客戶端訪問(wèn)時(shí)(也包括JSP文件修改后的第一次被訪問(wèn)),WEB服務(wù)器會(huì)把JSP文件翻譯成一個(gè)Servlet帘皿,
- 客戶端訪問(wèn)JSP文件东跪,其實(shí)訪問(wèn)的就是JSP文件翻譯后的Servlet,
- JSP的底層原理其實(shí)就是Servlet鹰溜。
- 一些對(duì)Servlet和jsp理解
- jsp本質(zhì)是一個(gè)Servlet,他的運(yùn)行也需要容器(tomcat)支持
- 在jsp和Servlet文件中都可以編寫java和html代碼,不同的是
- Servlet雖然可以動(dòng)態(tài)的生成頁(yè)面內(nèi)容,但是更加偏向于邏輯的控制
- jsp最終被轉(zhuǎn)換成 Servlet 在jvm里面執(zhí)行,在jsp里面雖然可以編寫java代碼,但是他更加偏向于頁(yè)面內(nèi)容的展示
- 在MVC架構(gòu)模式中,C通常是由Servlet充當(dāng),V通常是由jsp充當(dāng)
1.3 JSP入門案例
在網(wǎng)頁(yè)上顯示當(dāng)前時(shí)間
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@ 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>
<h1>hello JSP</h1>
<%
//腳本片段
//向客戶端發(fā)送當(dāng)前的系統(tǒng)時(shí)間
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String now = sdf.format(new Date());
//使用內(nèi)置對(duì)象out虽填,可以把數(shù)據(jù)發(fā)送給客戶端
out.println(now);
%>
</body>
</html>
1.4 JSP默認(rèn)編碼設(shè)置
在入門案例案例中可以看到三個(gè)編碼屬性
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
- contentType服務(wù)器端發(fā)給客戶端的內(nèi)容編碼的設(shè)置(與response.setContentType("")作用是相同)
- pageEncoding 當(dāng)前jsp頁(yè)面本身的編碼
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- 是告訴瀏覽器 生成的頁(yè)面(這個(gè)頁(yè)面是用來(lái)展示服務(wù)器發(fā)來(lái)的數(shù)據(jù)) 所使用的格式和編碼,瀏覽器會(huì)根據(jù)此來(lái)調(diào)用相應(yīng)的字符集來(lái)顯示網(wǎng)頁(yè)內(nèi)容
- http-equiv類似我們http的頭部協(xié)議,他回應(yīng)瀏覽器一些有用的信息,以幫助瀏覽器正確和精確的顯示網(wǎng)頁(yè)內(nèi)容
- 建議:工作空間 項(xiàng)目 外加jsp頁(yè)面 都設(shè)置成UTF-8
- 步驟:window - preference -搜索jsp 把Encoding改成UTF-8即可
1.5 模版元素&腳本片段
- 模版元素
- JSP頁(yè)面中的HTML標(biāo)簽,CSS樣式奉狈,以及JS都稱之為JSP的模版元素,模版元素定義了頁(yè)面的結(jié)構(gòu)和外觀涩惑,
- JSP翻譯后的Servlet中仁期,模版元素會(huì)被輸出流對(duì)象直接發(fā)送到客戶端。
- 腳本片段
- JSP頁(yè)面中可以嵌套Java代碼,Java代碼要定義在JSP的腳本片段中跛蛋,也就是<%%>里面熬的,
- JSP頁(yè)面中可以有多個(gè)腳本片段,
- 多個(gè)腳本片段之間赊级,可以嵌套文本押框,嵌套HTML的標(biāo)簽,嵌套其他的JSP元素理逊。
- 注意: 不能在腳本片段里面定義方法,因?yàn)榉椒ú荒芮短锥x
- 總結(jié)
- 模板元素其實(shí)就是頁(yè)面上一堆的html代碼
- 在html中添加java代碼,java代碼就是腳本片段
- 代碼事例
<%@ 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>
<%
HttpSession s = request.getSession();
Object username = s.getAttribute("username");
%>
<h1>itheima</h1>
<%
if(null == username){
%>
<a href="LoginUI.jsp">登錄</a>
<%
}else{
%>
<a href="OUT.jsp">注銷</a>
<%
}
%>
<hr />
</body>
</html>
1.6聲明
- 在JSP頁(yè)面里定義方法橡伞,定義成員變量等,<%! %>
- 注意:不能在聲明里面寫語(yǔ)句
- 平時(shí)也很少去定義成員變量 ,他是有線程安全問(wèn)題 用處不大
<%@ 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>
<!--聲明方法 -->
<%!
public int sum(int a,int b) {
return a + b;
}
%>
<%
int result = sum(1,2);
out.println(result);
%>
</body>
</html>
1.7腳本表達(dá)式
- 在JSP頁(yè)面中將數(shù)據(jù)發(fā)送到客戶端晋被,替代JSP頁(yè)面里的輸出語(yǔ)句兑徘,
格式:<%=變量/常量/表達(dá)式%> //1 + 1
注意:在腳本表達(dá)式中不可以寫分號(hào)
總結(jié): 用syso輸出的語(yǔ)句,都可以用腳本表達(dá)式輸出
代碼實(shí)例
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//要使用腳本表達(dá)式將當(dāng)前系統(tǒng)時(shí)間發(fā)送到客戶端
//獲取當(dāng)前系統(tǒng)時(shí)間
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String now = sdf.format(new Date());
%>
<!-- 腳本表達(dá)式 -->
<%=now %>
<%="<h1>hello JSP</h1>" %>
<%=1 + 1 %>
</body>
</html>
1.8 注釋
HTML的注釋:
Java代碼的注釋://,/**/
腳本片段的注釋:<%-- --%>
-
注意:
- HTML的注釋:被注釋的文本和代碼,會(huì)翻譯到Servlet中,然后發(fā)送到客戶端
- java的注釋:被注釋的文本和代碼,會(huì)翻譯到Servlet中,不會(huì)發(fā)送到客戶端
- jsp的注釋: 被注釋的文本和代碼,不會(huì)翻譯到Servlet中,不會(huì)發(fā)送到客戶端
建議使用第三個(gè) 功能最強(qiáng)大 什么都可以注釋,也不會(huì)翻譯最后html中
1.9 總結(jié)
- 模板元素: Html + css + js 對(duì)于模板元素,會(huì)被翻譯到out.println(參數(shù));
- 腳本片段;java 原樣復(fù)制到翻譯后的java文件里面,復(fù)制到service方法 <% %>
- java聲明;翻譯到類中,方法外,成員的位置上,可以用來(lái)定義成員變量,成員方法<%! %>
- 腳本表達(dá)式:翻譯到out.println(參數(shù)),注意不能有分號(hào) <%= %>
- 注釋:HTML的注釋 java的注釋 jsp的注釋 <%-- --%>