jsp技術(本質是一個servlet)html
jsp腳本和註釋java
jsp腳本:一、<%java代碼%>:翻譯到service方法內部web
二、<%=java變量和表達式%>:翻譯到service方法內部out.print()數據庫
三、<%!java代碼%>:翻譯成service的成員內容設計模式
<% int i=0; System.out.println(i); %> <%=i %> <%! String str ="nihao China"; %> <%=str %>
jsp註釋:一、html註釋:<!--註釋內容--> ,可見範圍 jsp源碼、翻譯後的servlet、頁面 顯示html源碼服務器
二、java註釋://單行註釋 /*多行註釋*/ ,可見範圍 jsp源碼 翻譯後的servletcookie
三、jsp註釋:<%--註釋內容--%> ----- 可見範圍 jsp源碼可見session
註釋通常是給開發人員本身看的,因此選用可見範圍最少的註釋方法,用jsp註釋架構
jsp運行原理:jsp本質就是一個servletmvc
運行過程:jsp在第一次被訪問時會被Web容器翻譯成servlet,第一次訪問---->helloServlet.jsp---->helloServlet_jsp.java---->編譯運行
被翻譯後的servlet在Tomcat的work目錄中能夠找到
jsp指令:page指令(通常系統本身寫好),errorPage和isErrorPage指令,錯誤調轉
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="/error.jsp"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true"%>
include指令:靜態包含(直接把網頁內容複製到本頁)
<%@ include file="/header.jsp" %>
taglib指令:標籤庫指令
jsp9大內置對象
out request response config page pagecontext application session exception
out:輸出流類型,有out緩衝區(默認8kb),裏面的東西再存到response緩衝區
aaaaaaaaaaaa <div>nihao</div> out.write("bbbbbbb"); <%out.write("bbbbbbb"); response.getWriter().write("cccccc"); %> <%="dddddddd" %>
輸出順序爲 c a b d
pageContext:jsp頁面的上下文對象,一個域對象,能夠向指定的其餘域中存取數據
<% request.setAttribute("name", "zhangsan"); pageContext.setAttribute("name", "lisi",pageContext.REQUEST_SCOPE); pageContext.setAttribute("name", "wangwu",pageContext.SESSION_SCOPE); pageContext.setAttribute("name", "wangrongchen",pageContext.APPLICATION_SCOPE); %> <%=request.getAttribute("name") %> <%=pageContext.getAttribute("name",pageContext.SESSION_SCOPE) %> <!-- findAttribute()若是域中有同名的key,會從小到大搜索域中的值 --> <%=pageContext.findAttribute("name") %>
四大域的做用範圍:
pageContext:當前jsp頁面
request域:一次請求
session域:一次會話
application域:整個web應用
jsp標籤:
動態包含(本質是跳轉)
<jsp:include page="/header.jsp"></jsp:include>
請求轉發
<jsp:forward page="/demo05.jsp"></jsp:forward>
EL技術:寫在jsp頁面內部,減小jsp腳本的編寫
做用:從四大域中取出數據
<% pageContext.setAttribute("name", "張銳"); request.setAttribute("name", "王榮成"); session.setAttribute("name", "董斌"); application.setAttribute("name", "韓凱"); %> ${pageScope.name } ${requestScope.name } ${sessionScope.name } ${applicationScope.name } ${name }
<% request.setAttribute("name", "王榮臣"); Student stu = new Student(); stu.setId(1); stu.setName("王榮臣"); stu.setFace(true); session.setAttribute("Student1", stu); Student stu2 = new Student(); stu2.setId(2); stu2.setName("韓凱"); stu2.setFace(true); Student stu3 = new Student(); stu3.setId(3); stu3.setName("董斌"); stu3.setFace(false); ArrayList<Student> studentlist = new ArrayList<Student>(); studentlist.add(stu2); studentlist.add(stu3); application.setAttribute("StudentList", studentlist); %> ${name } ${Student1.name } ${StudentList[1].name }
EL11大內置對象(瞭解)
<%request.setCharacterEncoding("utf-8"); %>
${param.username }......${param.pwd }
${header['User-Agent'] }
<% Cookie cookie = new Cookie("name","aaa"); response.addCookie(cookie); %> ${cookie.name.value }
<% Student s1 = new Student(); s1.setName("小豬佩奇"); session.setAttribute("s1", s1); %> ${1+2 } <!-- empty判斷的是域中是否有該對象,若是有,返回false,若是沒有,返回true --> ${!empty s1 } ${s1==null?true:false }
JSTL技術:jsp標準標籤庫,業務邏輯功能(if和for),通常使用核心庫就能夠
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!-- test後面必須接true或false --> <c:if test="${1==1 }"> xxxxxxxx </c:if> <!-- 普通for循環 --> <c:forEach begin ="0" end="5" var="i"> ${i } </c:forEach> <!-- 加強for --> <c:forEach items="${StudentList }" var="stu"> ${stu.name }......${stu.face } </c:forEach> <% Student stu2 = new Student(); stu2.setId(2); stu2.setName("韓凱"); stu2.setFace(true); HashMap<String,Student> map= new HashMap<String,Student>(); map.put("name", stu2); map.put("age", stu2); session.setAttribute("xiaonaigou", map); Map<Student,Map<String,Student>> m = new HashMap<Student,Map<String,Student>>(); m.put(stu2,map); session.setAttribute("m", m); %> <!-- 加強for遍歷map集合 --> <c:forEach items="${xiaonaigou }" var="entry"> ${entry.key } ${entry.value } </c:forEach> <!-- 加強for遍歷map中套用的map的集合 --> <c:forEach items="${m }" var="entry"> ${entry.key} <c:forEach items="${entry.value }" var="entry1"> ${entry1.key } ${entry1.value } </c:forEach> </c:forEach>
開發模式:開發過程當中總結出的「套路」,約定俗成的設計模式
web開發的設計模式:mvc
model:模型 javabean實體類 封裝數據
view:視圖 jsp 頁面顯示
controller:控制器 servlet 獲取數據---對數據進行封裝---傳遞數據--- 指派顯示的jsp頁面
javaEE的三層架構:服務器開發
web層:與客戶端交互
service層:業務處理
dao層:與數據庫進行交互