一、jsp第一行pageEncoding改爲utf-8
<% %>中間放置Java腳本
jsp聲明<%! JAVA代碼 %>
jsp表達式<%=表達式或變量%>
jsp文件的頭部使用樣式爲
<%@ page language="java" %>
<%@ page contentType="text/html; charset=GB2312"%>
JSP三種命令指令分別是page、include、taglib
(1)page指令
功能:設定整個JSP網頁的靜態屬性。
(2)include指令
功能:include指令用來向當前頁面插入一個靜態文件的內容。這個文件可以是JSP、HTML、文本或是Java程序。
(3)taglib指令
功能:使用標籤庫定義新的自定義標籤,在JSP頁面中啓用定製行爲。
1.tomcat服務器的安裝及使用
http://127.0.0.1:8080/ssss/index.html
http://localhost:8080/ssss/index.html兩者等價
webapps 發佈路徑(tomcat7.0-conf-server.xml)
myeclipse設置
1.tomcat屬性
2.發佈路徑(一般情況下不用設置)
3.servers窗口
4.自定義運行參數 (在工程上右擊-run as-run configurations-myeclipse server application雙擊-選擇服務器等)
2.jsp頁面/web.xml設置
@page @include @taglib
jsp:include 包含 jsp:forward 轉向
jsp內置對象(和servlet中對象的對應關係)
1.request 瀏覽器請求(地址/參數/頭部/客戶機信息)(req)
2.response 迴應(指定編碼,內容類型,內容)到瀏覽器 (resp)
3.out 插入當前輸出 write("");(resp.getWriter)
4.congfig 獲取web.xml裏,當前頁的初始參數(getServletConfig().getInitParameter(name)//獲取當前的配置文件 getServletContext().getInitParameter(name))//獲取全局的配置文件
5.session 服務器會話變量map集合(request.getSession)
6.application 服務器全局變量map集合,獲取web.xml裏,當前程序的初始參數。而不是當前頁的初始參數(getServletContext().setAttribute)
7.pagecontext 頁上下文 包含和該頁相關所有內容(getServletContext())
8.page (this)
9.exception 編譯指令page 的isErrorPage 屬性爲true時,該對象纔可以使用
el表達式 不能放到動態腳本中使用
1.便捷取值(el對象的值/jsp對象的值)
2.不能執行方法
3.在jsp頁面都有效
4.${erer.er}
用戶值 (常用 request param session) scope指的是範圍
1.頁變量pageScope <%=val%>
jstl set標籤 ${pageScope.val}
2.請求參數 連接url參數/form標籤 錄入控件的name和value屬性
兩種方式 1.request.getParameter(name)
2.${param.name}
3.request值棧 有效範圍:目標界面
request.setAttribute("key","val") 值棧設置
request.getAttribute("key") 值棧獲取
4.session值棧 有效範圍:當前連接會話
session.setAttribute(name,value);
或HttpSession sessions=request.getSession();
sessions.setAttribute("key","val");
sessions.getAttribute("key");
5.application值棧 有效範圍:當前web應用/全局
application.setAttribute(name,object);
application.getAttribute(name,object);
6.cookit客戶端值 存放在客戶端
Cookie[] cs= request.getCookies();//cookie的獲取
response.addCookie(cookie);//cookie的設置
3.jsp標籤庫 jstl標籤庫/el表達式
JSTL標籤庫(java通用標籤庫 替換掉所有動態腳本) prefix(別名 隨便起)
核心庫 邏輯語句/賦值/輸出
<c:if test="${name==null}"></c:if>
<c:set var="name" value="${param.name}"></c:set>
<c:out value='${name}'></c:out>
循環語句
<c:forEach var="row" items="${sessionScope.rs.rows }" varStatus="s">
<c:out value="${s.count}"></c:out><c:out value="${row.name}"></c:out><br>
</c:forEach>
sql庫
sql:setDataSource
sql: query
例子
index.jsp 文件中的問題
1.jsp嵌入式 循環顯示前端腳本
<td><%=rs.getInt(1)%></td>
out.write("<td>"+rs.getInt(1)+"</td>");
2.url拼接
<a href="a.jsp?cmd=page&page=<%=pro%>">
3.分頁顯示
定義頁號變量,在翻頁時都能訪問 通過頁號計算 first行 max行
1.通過session
2.通過url param
3.sql limit 分頁查詢
4.使用sqlHelper類
edit.jsp
1.新增修改使用同一個jsp頁(修改時有id)
2.使用<input type="hidden" name="cmd" value="add"> //cmd id
3.使用<from action="a.jsp" method="post"> //post/get區別
a.jsp實際應寫成 room.jsp(表是room表)
1.將單個表的數據管理放置在一起
2.加入cmd標識參數,區別各類操作
3.中文轉碼 name=new String(name.getBytes("ISO-8859-1"),"utf-8");
4.重定向 response.sendRedirect("index.jsp");
5.前端數據到後端只有提交服務器
後端數據到前端,動態腳本/el嵌入 (後端數據可以輕易插入到前端,而前端數據必須經過提交、換頁、回來才能把數據插入到後端)
4.servlet (實質上和*.jsp文件是一樣的)
servlet
1. 創建 class 繼承 HttpServlet
2. 實現 doget dopost 把super.doget() 移除
3. 註冊到 web.xml
重定向
1.response.sendRedirect("index.jsp?name=11");//url重定向(地址欄中的路徑會改變) 不攜帶數據
2.攜帶全部數據轉發指定頁
RequestDispatcher r=req.getRequestDispatcher("index.jsp");)//定義
r.include(req,resp);//轉向方法一 包含指定頁輸出 (地址欄中的路徑不會改變)
r.forward(req,resp);// 方法二 只顯示指定頁輸出
session 存放在服務器
sessionID
session跟蹤
1.url跟蹤 index.jsp:jsessionid=1234
2.cookie跟蹤
屬性:
setMaxInactiveInterval 設置會話週期
setAttribute
getAttribute
removeAttribute
cookie 存放在客戶端瀏覽器緩存裏
resp.addCookie(new Cookie("name",name));
1.可設置路徑範圍
2.Cookie c= new Cookie("name",name) //自創建開始計時秒數,自動刪除
c.setMaxAge(10);
3.獲取req.getCookies() 只能通過循環遍歷查詢
4.可在前端直接調用
前端發向後端 提交
1.url重定向 url拼裝 只支持get
(1)<a href> html重定向
換頁,不需額外處理立即換頁
list,jsp?pageno=<%=page%>拼裝
(2)location href="",reload() js重定向
經onclick事件,執行js方法,處理之後換頁
location.href="list.jsp?pageno="+page;
2.form標籤提交 表單提交(新增/修改,對用戶錄入的數據提交)
支持post,支持文件,url安全,數據量大
hidden,可加入非顯示的父帶數據(id,cmd)
3.ajax提交 json串提交/返回
(1)提交校驗信息(密碼,用戶名存在)
(2)非換頁的得到數據,使用js填充數據
(3)js富客戶端框架(ext js/jQueryUI)
後端發向前端
1.使用HttpServletResponse getWriter() 直接輸出html(不推薦)
2.將輸出數據的值加入值棧,重定向到jsp頁面作爲模板,使用el嵌入數據
3.ajax,json獲取,使用HttpServletResponse getWriter()直接輸出 json 字符串
過程
1.前端腳本發出請求(url,form,ajax)發給web服務器
2.web服務查詢web,xml,查找 class
沒找到:1.找jsp頁面,編譯成servlet 類
2.404錯誤
找到:執行servlet類 輸入請求信息
3.類(class)解析獲取請求內的信息
4.根據請求信息查詢數據庫/其他的處理
5.返回查詢/處理的結果
1.數據集 將數據集轉爲list<對象>,放入值棧,採用req.getRequestDispatcher,指定模板頁轉向 2.標誌 將數據直接放入值棧
3.圖像/文件 使用getoutputstream寫入流
4.json 使用getWriter寫入字符
5.html 使用getWriter寫入字符
6.後端數據的顯示
1.數據集 使用jstl,el嵌入html
2.標誌 使用el嵌入html標籤中
3.圖像 <img src="pic"/>
4.json $.getJSON $.ajax
5.html 什麼也不做
7.將執行的結果(是靜態頁面),發送到客戶端瀏覽器(瀏覽器不能執行動態腳本)
8.瀏覽器解析html,顯示頁面信息
jsp:1.jstl 邏輯語句
2.el 取值
3.servlet/jsp 後端頁面 servlet必須註冊到web.xml
4.filter (攔截請求)引用接口 必須註冊到web.xml
5.listener (服務啓動狀態監聽)引用接口 必須註冊到web.xml
mvc是開發模式 來完成 jsp頁面
m:model模型 v:view視圖 c:controller控制器
引申:mvp p:presente
數據管理3層 bll dao >>model
model view controller(biz,service,bll)
5.listener/filter
亂碼問題:1.當前頁面編碼方式
2.請求的編碼(1.url請求的編碼 2.tomcat內部接收數據的編碼 3.數據庫編碼(my.ini編碼、建表編碼))
3.返回請求時的restore編碼