程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> jsp/java web基礎知識回顧

jsp/java web基礎知識回顧

編輯:關於JSP

因為太長時間沒有做java web開發了,所以寫這邊隨筆用來簡單回顧一下jsp/java web的相關知識

1.tomcat中server.xml,<Context>表示一個web應用上下文路徑;
 docBase:指明一個Web應用所在的物理文件夾名
  path:定義Web應用的上下文路徑名,上下文路徑第1個字符一般為“/”。
 reloadable:此屬性取值為“true”時,表示讓Catalina監控Web應用中WEB-INF\classes文件夾和WEB-INF\lib文件夾下文件的變化
2.tomcat默認的虛擬主機是localhost,它默認的Web應用發布文件夾是webapps。在此文件夾下發布的Web應用通過URL即可直接訪問,不需要在<Context>中進行配置
3.Servlet將java代碼與網頁設計混合寫在一起,不利於維護。JSP網頁版面的設計與維護,比Servlet要直觀和容易。JSP頁面最終會被JSP服務器編譯成一個Servlet程序來運行。
4.JSP采用“先編譯後執行”的工作方式。一個JSP網頁首次被訪問時,Web服務器執行編譯操作.(多線程運行)
5.<% 符合Java語言的Java語句 %>
6.jsp執行過程:
         servlet
request->*.jsp->jsp parser->*.java->jsdk(servlet分析器)->*.class->執行->response
7.html注釋<!-- --> jsp注釋<%-- --%>
 jsp聲明<%!...%>,聲明後的變量,方法或類都是jsp編譯後的Servlet的類內成員
8.Tomcat把<%  %>標記內的Java代碼段放在Servlet實現類 _jspService()方法的try{}內,所以在<%%>內定義的變量屬於局部變量,並且作用范圍僅限於try{}內。如果有多個<%  %>標記,則按出現的先後順序轉譯到try{}內。
9.jsp表達式<%= expression %>,編譯後Servlet為:out.println(expression);
10.jsp指令元素<%@ 指令元素  屬性="值"  %>,主要包括三個:include、page和taglib;主要供JSP容器使用,為JSP容器提供相關的頁面屬性信息,用於指示JSP容器如何正確地翻譯代碼,或者執行特定的操作
 include:文件包含,是在JSP容器把JSP網頁翻譯成Servlet程序時,將指定文本文件的內容嵌入Servlet程序中,替換include指令
   <%@ include file="" %> 靜態綁定
 page:用於設置當前JSP頁面的屬性
  默認情況下已經被加入到當前JSP頁面的類,包括java.lang.*;、java.servlet.*;、java.servlet.jsp.*; java.servlet.http.*;
  isThreadSafe,表示生成的servlet是否是線程安全的;如果true的話,表示線程安全,JSP容器會以多線程方式運行JSP頁面 www.2cto.com
11.jsp動作組件:JSP動作組件是一些XML語法格式的標記,被用來控制Web容器的行為
 <jsp:include>動態包含
 <jsp:forward>使程序從當前頁面跳轉到另一個目標頁面運行,浏覽器地址欄不會發生任何變化;forward動作語句後的代碼不能執
 行(已經帶著request請求跳轉到其他頁面了)
 <jsp:param>,用來用於傳遞參數信息 www.2cto.com
 <jsp:plugin>,插入一個applet或Bean
 < jsp:setProperty>:設置JavaBean的屬性
 < jsp:getProperty>:輸出某個JavaBean的屬性
 < jsp:useBean>:尋找或者實例化一個JavaBean
12 jsp隱含對象
 簡化程序設計,JSP規范定義了常用的8個隱含對象(implicit objects),這些隱含對象不需要在JSP頁面中用new關鍵字來創建,而是
 由Servlet容器來創建與管理,並傳遞給JSP頁面的Servlet實現類使用。
 out(JspWriter),requeset(HttpServletRequest),response(HttpServletResponse),session(HttpSession),application(ServletContext),
 exception(Throwable),config(ServletConfig),page(Object),pageContext(PageContext)

 out.print()/out.println();out.write()?PrintWriter?

 request.getParameter()/getParameterNames()/getParameterValues()/
 兩個JSP/Servlet程序間要交換數據時,可通過request作用范圍變量來實現(getAttribute/setAttribute)
 [forward方式跳轉,會傳遞request,超鏈接與在浏覽器地址欄輸入該頁面地址的訪問方式一樣,都是重新發送一個請求到鏈接頁面]
 getRequestDispatcher("''),轉發器,獲得目標資源的轉發器,通過轉發器將當前Servlet程序的request和response對象轉發給目標資源,並跳轉至目標資源上運行程序,這樣,目標資源就可通過request對象讀取上一資源傳遞給它的request屬性
 removeAttribute()/setCharacterEncoding()/getProtocol/getRemoteAddr()/

 response.flushBuffer()/setBufferSize()/getWriter(PrintWriter)/setContentType()/setCharacterEncoding()/sendError()/setHeader()/sendRedirect("")/
 response通過文件輸出流實現下載

 application對象被同一個上下文(同一個web應用)中的所有jsp/servlet程序共享,tomcat服務器開啟的時候即被創建;
 application訪問web.xml中配置的<Context-param>/getInitParameter("")/attribute相關方法/log()/

 config常用於給一個Servlet程序傳送初始化參數

 exception,JSP頁面在運行時發生異常,系統會生成一個異常對象

 page對象表示“當前”Servlet程序對象,類似於Java中的“this”關鍵字

 pageContext獲取其他隱含對象/轉發跳轉或包含
13 會話跟蹤-
 Cookie/response.addCookie()/request.getCookies()/
 URL重寫實現參數傳遞/隱藏表單域實現參數傳遞/

 HTTP協議是一種無狀態的協議,客戶端每次打開一個Web 頁面,它就會與服務器建立一個新的連接,發送一個新的請求到服務器,服務器處理客戶端的請求,返回響應到客戶端,並關閉與客戶端建立的連接。當客戶端發起新的請求,那麼它重新與服務器建立連接,因此服務器並不記錄關於客戶的任何信息。

 session-session會話,通常把從登錄進入系統到注銷退出系統之間所經歷的時間,稱為一次session通信周期;jsp中的Session會話:一次會話由客戶打開一個浏覽器開始到關閉浏覽器或退出會話結束,用戶重新打開1個浏覽器並重新輸入url,或訪問2個web應用都是開啟不同的會話;session隱含對象由Web服務器創建,並存儲在服務器端;一次會話會創建一個session對象,在一次會話期 間,web應用內的所有程序共享一個session對象
 attribute相關方法/isNew()/getId()/invalidate()/setMaxInactiveInterval()/
14 Servlet/ServletConfig/->GenericServlet->HttpServlet
 servlet工作流程-(1)客戶機將請求發送到服務器。
    (2)服務器上的Web容器實例化Servlet。
    (3)Web容器將請求信息發送到 Servlet。
    (4)Servlet 創建一個響應,並將其返回到Web容器。
    (5)Web容器將響應發回客戶機。
    (6)服務器關閉或Servlet空閒時間超過一定限度時,調用destory()方法退出。
  生命周期-創建實例->init()->service()->destroy()
  init()-兩種方式init()/init(ServletConfig config){super.init(config)}
  sevice(HttpServletRequest req,HttpServletResponse resp)

  Servlet體系結構是建立在Java多線程機制之上的,當兩個或多個線程同時訪問同一個Servlet時,可能會發生多個線程同時訪問同一資源的情況,數據可能會變得不一致。對於Servet中成員變量,並發訪問時需要采取線程同步的措施確保線程安全

  destroy()-服務器刪除servlet實例調用,程序員可以覆寫它完成,關閉數據庫連接等清理工作
15.Servlet API-javax.servlet和javax.servlet.http
 javax.servlet.GenericServlet--獨立於協議
 javax.servlet.HttpServlet,--嵌入了對Http協議的支持

 把數據傳遞給客戶端
  在Servlet中,可以通過直接向輸出流寫入數據來生成HTML頁面;使用PrintWriter把數據發送回客戶端
  PrinteWriter out=response.getWriter();out.println(“<HTML>Inside HTML</HTML>”);
  在開始進行任何輸出之前,必須使用setContentType()方法指定MIME類型
  response.setContentType(“text/html,charset=gb2312”);
16.訪問servlet,需要在web.xml進行配置
 <servlet>
   <servlet-name>First</servlet-name>
  <servlet-class>com.servlet.FirstServlet</servlet-class>
 </servlet>
 <servlet-mapping>
   <servlet-name>First</servlet-name>
  <url-pattern>/first</url-pattern>
 </servlet-mapping>
17.WEB-INF\classes目錄存放Servlet類文件
 WEB-INF\lib目錄存放Web應用程序所使用的Java庫文件(JAR文件)
18.web.xml中<servlet>定義的<init-param>可以通過servlet的getInitParameter()方法或者getServletConfig().getInitParameter()方法
19.過濾器Filter鏈式
 request->filter1->filter2....->目標資源
 response <-   ..filter<-

 javax.servlet.Filte接口
  init()
  doFilter(ServletRequest request, ServletResponse response,FilterChain chain)過濾器的業務邏輯代碼在doFilter()方法內實現
  {     ...程序段1...
   chain.doFilter(request, response);
   ...程序段2...
  }
  destroy()
 javax.servlet.FilterConfig接口
 javax.servlet. FilterChain接口
 
 web.xml配置
 <filter>
  <filter-name>
  <filter-class>
  <init-param>
 </filter>
 <filter-mapping>
  <filter-name>
  <url-pattern>//需要過濾的url
  <dispatcher>//過濾請求類型
 </filter-mapping>

 過濾器的過濾執行次序與他在web.xml中定義的次序一致
20 偵聽器主要偵聽Servlet容器中的事件,所偵聽的事件發生後,容器激活偵聽器,執行預定的操作。偵聽器偵聽的事件主要是JSP
隱含對象application、session、request對象上發生的事件,主要有隱含對象的創建與銷毀事件,相關作用范圍變量的創建、修改和銷
毀事件。
 web.xml:
 <listener>
  <listener-class>
 </listener>

 javax.servlet.ServletRequestListener接口,主要偵聽request隱含對象的創建與銷毀事件
 ServletRequestAttributeListener接口,偵聽request屬性的變化
 javax.servlet.http.HttpSessionListener接口,偵聽上下文中session對象的創建與銷毀事件
 javax.servlet.http. HttpSessionAttributeListener接口,偵聽session屬性的變化
 javax.servlet.ServletContextListener接口,偵聽Web應用Sevlet上下文的初始化事件和銷毀事件
 javax.servlet.ServletContextAttributeListener接口 ,偵聽application屬性事件
21.JavaBean
 javabean即pojo類,plain old java objects,簡單的java對象
 jsp中使用JavaBean
  1.<% %>內new
  2.jsp動作<jsp:useBean><jsp:setProperty><jsp:getProperty>
   注意userBean中class(找不到則創建新的)和type的區別,還有scope
 利用外部的javabean,文件上傳,email,poi等
22.數據庫訪問-jdbc
 tomcat\conf\context.xml中配置數據庫連接池<Context>
 javax.sql.DataSource

 java.sql.Blob blob = rs.getBlob("");
 byte[] bytes = blob.getBytes(,);
23.MVC
 struts1.x
  controller-ActionServlet/Action
  struts-config.xml
  ActionServlet讀取Struts-config.xml中的ActionMapping對象,每個ActionMapping對象實現了一個請求到一個Action對象之間的映
  射。Action對象會調用javabean完成業務操作.
 流程:login.jsp->submit->login.do->web.xml->servlet(ActionServlet,struts自帶)->讀取struts-config.xml->action/actionform
 (表單bean)->execute()
24.EL與JSTL
 EL表達式引入EL表達式語言目的之一是為JSP頁面計算;訪問和打印數據提供方便,盡可能減少JSP頁面中的Java代碼,使JSP頁
 面更簡潔、更易於開發和維護

 EL表達式語言的基本語法為: ${表達式}
 EL表達式通過“.”算符訪問JavaBean中的屬性,${JavaBean名.屬性名}

 JSTL的全稱是JSP標准標記庫(JSP Standard Tag Library,JSTL),它是SUN公司為簡化JSP頁面設計而提出的一種技術規范;

 *.properties文件稱為資源文件,在資源文件中,以“key=value”的形式存儲一個變量及它的值,一行寫一對“key=value”;方便消息的集中存儲和管理 ;方便消息的國際化

 

摘自  I want to fly higher
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved