Servlet:html
①字符集問題:
②身份驗證:
③統一的輸入輸出:相似母版,重寫ServletResponeceWraper的getWriter,使用緩存流。
而後輸出時,分析stringWriter ,重構html結構。
緣由:以前的方式存在兩個問題:
①目錄結構混亂
②程序可能將printwriter關閉,致使下邊的輸出中止。
前端
解決方法:filter 過濾器
特色:
①過濾方向是雙向的
②request和response,chaine
③配置web.xml
④默認只過濾client的請求
<dispatcher>request</dispatcher> 默認狀態
<dispatcher>forward</dispatcher>內部轉發也過濾
<dispatcher>include</dispatcher>
修飾模式(裝配模式)
實現接口,成員爲其實現類的對象,增長其餘數據。
①ServletResponeceWraper就是這樣一個類,
②咱們繼承其類,便可完成。java
listener
===監聽生命週期的事件==
建立:*Init ①服務器啓動時,加載公用數據。
銷燬:*Destroy web
=============================
ServletContextListener
HttpSessionListener :購物車collection<Product>;
ServletRequestListener
=============================
ServletContextAtrributeListener
HttpSessionAtrributeListener
ServletRequestAtrributeListener
=============================spring
JSP與Servlet的對比:
①實質都是Servlet,應用服務器將其翻譯,轉換成java,而後使用。tomcat/work/catalina/...
②servlet更適合業務處理,jsp更適合視圖,即顯示數據express
JSP:
1、語法:
①.jsp的後綴
②存在位置:webapps下,web-inf外的路徑下
③直接訪問,無須web.xml配置
④當jsp首次訪問時,服務器將jsp翻譯成java文件,而後javac成執行文件apache
2、元素:
1>腳本元素:
①聲明腳本 <%! 聲明體%> 成員變量
②表達式腳本 <%= 表達式 %> 編譯在service方法中,當局部變量與成員變量重複時,因此優先使用普通腳本中的變量。
③普通腳本 <% %> 在service方法中,變量是局部變量 能夠編寫除了函數聲明外的任何java代碼
2>指令元素:
1.頁面指令:<%@page 屬性="值" 屬性2="值2" ...%>
對jsp頁面描述說明
①contentType="text/html"
contentType="text/html;character-set"
②import 導包、類
<%@page import="java.util.*"%>
默認,已導入:java.lang.*,javax.servlet.*,javax.servlet.http.*,javax.servlet.jsp.*
③isErrorPage="true|false"
④errorPage="URI"
⑤session="true" 是否使用session,默認true
⑥language="java"
2.包含指令:
靜態包含:<%@ include file="url"%> 靜態包含,編譯前包含緩存
3、隱含對象
不須要new,直接使用的一組對象,tomcat自動建立
只能在<%=%>、<% %>中使用。
1.request
type:HttpServletRequest
method:getParameter
setAttribute
getAttribute
getSession
getMethod
getRequestURL:全球資源定位
getRequestURI:主機資源定位
getContextPath:應用名
2.session
type:httpSession
method:setAttribute
getAttribute
removeAttribute
isNew:第一次訪問true,以後是false
3.out
type:javax.servlet.jsp.jspWriter
4.exception
注意:只能在error.page中使用
5.responce:
6.application
type:javax.servlet.ServletContext
setAttribute()
getAttribute()
removeAttribute()
7.page
type:java.lang.Object
表明當前jsp對象
8.config
type:javax.servlet.servletConfig
9.pageContext
type:javax.servlet.jsp.PageContext
①獲取其餘8個隱含對象
pageContext.getRequest();
②做用域:表明請求中的一個頁面,其做用域只是一個請求中的一個頁面對象
③能夠直接獲取其餘3個做用域中的屬性:依次從小到大查找
Object o = pageContext.findAttribute();
getAttribute(name,scope)
④include|forward
4、EL表達式:express language 表達式語言
1>語法:${ name } 按照從小到大的順序在四個做用域中查,找名字爲name的命名屬性
2>做用:計算表達式,且輸出${param.name} == <%= request.getParameter(「name」 ) %>
3>基本運算:${ empty a } :a若是爲空返回true ,不然返回false
4>簡化獲取做用域中的命名屬性:
②看成用域中存在重名變量時,能夠在EL中明確指定查找的做用域:
5>做用域:pageSope/requestScope/sessionScope/applicationScope
6>若是屬性是對象,可使用點語法。
7>獲取Client的數據:${param.age} 等價於 request.getParameter(age);
8>獲取Cookie的數據:${cookie.JSESSIONID.value}
等價於:Cookie cookies = request.getCookies();
遍歷;
9>隱含對象:
5、JSTL :java standard tag library apache提供的
tomcat
4、靜態包含和動態包含(相似靜態庫和動態庫)
<%@include file=「fun.jsp」%>
靜態包含指令,用於將目標文件的源代碼包含到本頁面中
至關於進行了一次拷貝粘貼操做,被包含的目標文件不會生成獨立的servlet源碼
若是被包含的多個文件中有重名的變量,會出現變量衝突服務器
<jsp:include page=「header.jsp」 />
動態包含指令,用於將目標文件的輸出結果和本頁面合併在一塊兒
被包含的目標文件獨立運行,會生成獨立的servlet文件
因爲只是進行結果的合併,不存在變量衝突
參數傳遞:
動態包含參數傳遞:當前jsp對象向被包含對象傳遞參數,使用getparameter("name")獲取便可
<jsp:include page=「/common/header.jsp」>
<jsp:param name=「a」 value=「123」/>
<jsp:param name=「b」 value=「456」/>
</jsp:include>
<jsp:forward page=「sub/b.jsp」>
<jsp:param name=「a」 value=「1」/>
<jsp:param name=「b」 value=「2」/>
</jsp:forward>
5、Java標準標籤庫 JSTL java standt tag libary
①引入包文件:jstl.jar 和 standard.jar
②標籤做用域scope
page : pageConetxt
session : HttpSession
application : ServletContext
框架學習:
1、Hibernate框架:
2、Struts2框架:1.struts.xml<package name="user" namespace="/User" extends="struts-default"> <action name="Login"> <result>/login.jsp</result> </action> <action name="Welcome" class="com.yiibai.user.action.WelcomeUserAction"> <result name="SUCCESS">/welcome_user.jsp</result> </action> <action name="Hello"> <result>/WEB-INF/page/hello.jsp</result> </action></package>①package的namespace不寫,則爲默認命名空間,找不到的action都會在默認命名空間下尋找②action: name:action的名字,區分大小寫,請求中能夠不添加action的後綴 class:默認是"ActionSupport" method:默認是"execute" 搜索順序: ①請求url中尋找,如未找到,跳至上一級,繼續①,若是找到,則處理返回 ②若是根命名空間下還未找到,則到默認命名空間尋找 ③若是找到,則報錯③result: name:默認"SUCCESS" 3、spring mvc框架1.spring mvc是spring框架的一部分,即在spring框架下的mvc的具體處理和實現2.執行過程: 1.request->dispacherServlet 2.dispacherServlet -> handlerMapping 根據註解、xml 3.handlerMapping -> dispacherServlet 返回handlerExcutionExplain(Handler) 4.dispacherSerlet -(handler)> handlerAdapter 5.handlerAdapter -> 執行handler 6.handlerAdapter —> dispacherServlet 返回ModelAndView 7.dispacherServlet -(ModelAndView)> Viewresolver 8.Viewresolver -> dispacherServlet 返回物理View 9.dispacherServlet 填充model,視圖渲染,相應結果 3.組件: 1.前端控制器 DispatcherServlet (不須要開發,配置便可) 做用:Controller,接受請求,相應結果,即轉發器dispacher 2.處理器映射器 HandlerMapping (不須要開發) 做用:根據請求url,根據註解、查找handler 3.處理器適配器 HandlerAdapter (不須要開發) 做用:按照特定規則,執行handler 注意:編寫handler按照adapter的要求編寫 4.處理器 Handler (須要按照adapter進行開發) 5.視圖解析器 View resolver 做用:根據邏輯視圖,解析成真正的視圖 6.視圖 View (jsp freemaker pdf excel)(須要開發)