jsp的概念
概念:java server page 一種運(yùn)行在服務(wù)端的語(yǔ)言
作用:可以寫java代碼,實(shí)現(xiàn)動(dòng)態(tài)頁(yè)面
特點(diǎn):java代碼嵌套在html中,html嵌套在java中,先編譯后執(zhí)行
jsp執(zhí)行順序
用戶第一次訪問(wèn)頁(yè)面的的時(shí)候,服務(wù)器會(huì)將對(duì)應(yīng)的jsp翻譯成java代碼,編譯成class文件,并且放在work目錄下面
jspservice()在用戶每次訪問(wèn)的時(shí)候都會(huì)調(diào)用,在這個(gè)方法里面,通過(guò)out.write()將前面代碼輸出要瀏覽器中。
jsp基本語(yǔ)法
三種語(yǔ)法
1.jsp表達(dá)式
<%=1+1%>
<%=new Date()%>
本質(zhì):out.write(內(nèi)容);
可以寫任何有返回值的語(yǔ)句,但是不能寫";"
相當(dāng)于System.out.println();可以寫什么,這就就可以寫什么
2.jsp腳本片段
<%
int a=10;
out.write(a);
%>
本質(zhì):就是將這些java代碼原模原樣的復(fù)制到了_jspservice()里面
可以寫多行java代碼,必須有";"
函數(shù)里面可以寫什么,這里就可以寫什么
3.jsp聲明
<%!
int a=10;
public void show(){
System.out.println("hello jsp");
}
%>
本質(zhì):就是將這些java代碼原模原樣的復(fù)制到類里面,就是定義了類的成員
可以寫多行java代碼,必須有";"
類中可以寫什么,這里就可以寫什么
注釋
<%--jsp注釋:不會(huì)輸出到瀏覽器上面--%>
<!-- 前端的注釋:會(huì)輸出到瀏覽器上面 -->
三大指令
JSP指令是告訴引擎如何處理JSP頁(yè)面中的其余部分
基本語(yǔ)法
<%@ 指令 屬性="屬性值",屬性="屬性值"...%> 例如: <%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
-
page指令
- import 導(dǎo)包
- pageEncoding 頁(yè)面編碼
- contentType 瀏覽器編碼
- errorPage 錯(cuò)誤頁(yè)面
- isErrorPage 是否為錯(cuò)誤頁(yè)面
include指令
- taglib指令 <%@ taglib prefix="前綴" uri="標(biāo)簽庫(kù)地址"%>
九大隱式對(duì)象
1.request請(qǐng)求
- 獲取請(qǐng)求參數(shù)
String header=request.getHeader("accept-language");//獲取請(qǐng)求頭
String uri=request.getRequestURI();//獲取uri
String method=request.getMethod();//獲取請(qǐng)求方式
- 保存信息
request.setAttribute("key",object);
- 轉(zhuǎn)發(fā)
request.getRequestDispachter("user.jsp").forward(request,response);
- 設(shè)置編碼
get請(qǐng)求方式:
//方式一:
new String("key".getBytes("iso-8859-1"),"utf-8");//get亂碼問(wèn)題
//方式二:
//或者在tomcat的server.xml文件中的Connector標(biāo)簽中添加屬性URIEncoding="utf-8"
post請(qǐng)求方式:
request.setCharacterEncoding("utf-8");//post亂碼問(wèn)題
2.response響應(yīng)
//1、重定向:告訴瀏覽器重新訪問(wèn)某個(gè)地址
response.sendRedirect("login.html");
//2、向?yàn)g覽器寫出數(shù)據(jù)
response.getWriter().write("登錄失敗");
response.getWriter().write("<script>alert('登錄失敗');location='login.html'</script>");
//response.getOutputStream().write("hello".getBytes());
//3、添加響應(yīng)頭
response.addHeader("Content-Type", "text/html; charset=UTF-8");//添加編碼格式
response.addHeader("aa", "bb");//添加自定義的響應(yīng)頭信息
response.addHeader("refresh", "3;url='https://www.baidu.com'");//3秒鐘跳轉(zhuǎn)頁(yè)面
response.setStatus(302);//通過(guò)狀態(tài)碼實(shí)現(xiàn)重定向
response.setHeader("location", "https://www.baidu.com");//通過(guò)location告訴瀏覽器重定向的地址
request和response區(qū)別
在頁(yè)面跳轉(zhuǎn) 1、request地址欄不發(fā)生變化 2、response地址欄發(fā)生變化
在保存信息 1、request可以保存信息 2、response不可以保存信息
Cookie(不屬于九大隱式對(duì)象)
概念:將原本服務(wù)端保存的信息轉(zhuǎn)到客戶端去保存
好處:
- 降低了服務(wù)器保存用戶信息的壓力。
- 跟蹤用戶,了解行蹤。
創(chuàng)建
Cookie cookie=new Cookie("key","value");//創(chuàng)建
response.addCookie(cookie);//發(fā)送給客戶端
常用的方法 setMaxAge(秒);
- 60,cookie保存到硬盤中,在生命時(shí)間內(nèi)都有效
- =0,刪除指定cookie
- <0,瀏覽器會(huì)話結(jié)束即失效(默認(rèn))
-setPath(路徑); - 訪問(wèn)的路徑包含了設(shè)置的路徑,則cookie會(huì)被傳輸會(huì)服務(wù)器。例如:setPath("/Servlet/shop"); - 訪問(wèn)/Servlet/shop/PurchaseServlet,cookie會(huì)被傳輸會(huì)服務(wù)器,訪問(wèn)/Servlet/user/UserServlet,cookie不會(huì)別傳輸會(huì)服務(wù)器。
Cookie的獲取
Cookie[] cookies=request.getCookies();//獲取所有的cookie
for(Cookie c:cookies){
if("name2".equals(c.getName())){
System.out.println(c.getValue());
}
}
3、session(銀行開(kāi)戶獲得銀行卡號(hào))
什么是session
session是保存在客戶端的一個(gè)回話對(duì)象,用來(lái)標(biāo)示一個(gè)唯一用戶
session的原理
作用:
保存數(shù)據(jù),保存數(shù)據(jù)的范圍是一個(gè)會(huì)話
常用方法:
session.setAttribute("key","value");//保存內(nèi)容
session.getAttribute("key");//獲取內(nèi)容
session.removeAttribute("key");//刪除內(nèi)容
4、application
作用:
保存數(shù)據(jù):保存數(shù)據(jù)的范圍是整個(gè)應(yīng)用
常用方法:
application.setAttribute("key","value");//保存內(nèi)容
application.getAttribute("key");//獲取內(nèi)容
application.removeAttribute("key");//刪除內(nèi)容
5、pageContext
作用: 1、保存數(shù)據(jù) 2、獲取其他域?qū)ο?/p>
常用方法:
session.setAttribute("age", 20);
application.setAttribute("age", 21);
pageContext.setAttribute("age", 18);
request.setAttribute("age", 19);
pageContext.findAttribute("age");//按照域?qū)ο髲男〉酱蟮姆秶M(jìn)行查找
jsp動(dòng)作標(biāo)簽
jsp:include標(biāo)簽
useBean
<!-- 創(chuàng)建javabean對(duì)象 -->
<jsp:useBean id="book1" class="com.hemi.bean.Book"></jsp:useBean>
<!-- 將表單中的所有name獲取出來(lái),然后自動(dòng)的封裝到對(duì)象的屬性中 -->
<jsp:setProperty name="book1" property="*"></jsp:setProperty>
<!-- 給對(duì)象屬性賦值 -->
<jsp:setProperty name="book" property="bookname" value="三國(guó)"/>
<!-- 獲取對(duì)象屬性值 -->
<jsp:getProperty property="bookname" name="book"/>
登錄
1、創(chuàng)建User
2、編寫UserDao ,調(diào)用BaseDao
3、編寫UserService,調(diào)用UserDao
4、編寫login.jsp
5、編寫doLogin.jsp - 獲取參數(shù)
調(diào)用userService中的方法
判斷返回的User是否為空
如果為空,跳轉(zhuǎn)login.jsp
如果不為空,保存user對(duì)象到session,并且重定向到user.jsp