SCWCD笔记转载 。(都是看似简单 其实实用的基础)
来源:互联网 发布:js 设置div id 编辑:程序博客网 时间:2024/05/21 03:28
Cloud's SCWCD 1.4 筆記
1:The Servelt Technology Model1. HttpServlet class:
public class MyServlet extends HttpServlet {
public void init() throws ServletException { }
//只執行一次
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }
// 如果被overwrite時有可能不會呼叫doXXX()的method,要留意題意的陷阱
protected void doXXX(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }
// XXX代表Get,Post...etc
//不見的程式中一定要寫這個method,不寫的話它會繼承GeneralServlet.doXXX()
public void destroy() { }
//只執行一次
}
POST method可用來處理上傳檔案的問題。
OPTIONS method可以列出目前處理的HTTP method為何(ex:TRACE,GET,POST)。
GET、PUT、HEAD method有idempotent的特質。
3. HTML FORM預設使用 HTTP GET request
4. ServletResponse的method
void setContentType(String type)
PrintWriter getWriter() //取得 response 的 text stream 傳送字元資料
ServletOutputStream getOutputStream() //取得 response 的 binary stream 傳送任何資料
HttpServletResponse的method
void addHeader(String headerName, String value)
void addIntHeader(String headerName, int value)
void addDateHeader(String headerName, long millisecs)
void sendRedirect(String newURL)
void sendError(int status_code)
void sendError(int status_code, String Message)
void setStatus(int sc)
void setStatus(int sc, String Message)
void addCookie(Cookie cookie) //輸入的參數型別是Cookie,要留意題意的陷阱
跟HTTP protocal相關的method屬於HttpServletResponse,其它的methods通通是屬於ServletResponse
5. ServletRequest的method
String getParameter(String paramName)
String[] getParameterValues(String param)
Enumeration getParameterNames()
BufferedReader getReader() //取得 request 的 text stream 可用來接收表單上傳的文字檔案
ServletInputStream getIutputStream() //取得 request 的 binary stream 可用來接收表單上傳的任何檔案
HttpServletRequest的method
String getHeader(String headerName)
int getIntHeader(String name)
long getDateHeader(String name)
Enumeration getHeaders(String name)
Enumeration getHeaderNames()
Enumeration getHeaderValues(String headerName)
public Cookie [] getCookies() //傳回的是Cookie的陣列,要留意題意的陷阱
跟HTTP protocal相關的method屬於HttpServletRequest,其它的methods通通是屬於ServletRequest
6. Servlet life-cycle:
Load class --> Creates instance of class --> calling the init method --> calling the service method --> calling the doXXX method --> calling the destroy method
7. 繼承GenericServlet的class必需實作service() method
繼承HttpServlet的class可以不實作service()、doXXX() method
2: The Structure and Deployment of Web Applications
1. 要背web.xml中紅字部份的義意與用法
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd”
version=”2.4”>
<display-name>A Simple Application</display-name>
<context-param>
<param-name>Webmaster</param-name>
<param-value>webmaster@mycorp.com</param-value>
</context-param>
<jsp-config>
<taglib>
<taglib-uri>...</taglib-uri>
<taglib-location>...</taglib-location>
</taglib>
<jsp-property-group>
<url-pattern>...</url-pattern>
<el-ignored>true/false</el-ignored> //設成true時,JSP若有EL expression會被當作純文字來處理
<scripting-invalid>true/false</scripting-invalid> //設成true時,JSP若有scripting的語法會使JSP在Compile成Servlet時產生translation error
<include-prelude>...</include-prelude>
<include-code>...</include-coda>
<is-xml>true/false</is-xml>
</jsp-property-group>
</jsp-config>
<servlet>
<servlet-name>catalog</servlet-name>
<servlet-class>com.mycorp.CatalogServlet</servlet-class> or <jsp-file>/test.jsp</jsp-file>
<init-param>
<param-name>catalog</param-name>
<param-value>Spring</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<security-role-ref>
<role-name>MGR</role-name>
<role-link>manager</role-link>
</security-role-ref>
</servlet>
<servlet-mapping>
<servlet-name>catalog</servlet-name>
<url-pattern>*.*</url-pattern> //要了解url-pattern的設定方式
</servlet-mapping>
<security-role>
<role-name>manager</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<web-resource-name>SalesInfo</web-resource-name>
<url-pattern>/salesinfo/*</url-pattern>
<http-method>GET</http-method>
//可以0到多個<http-method>,當0個時,代表外界沒有人可以用http的方法存取設限的資料(其餘方法如forward,include可被內部程式叫用)
</web-resource-collection>
<auth-constraint>
<role-name>manager</role-name>
//可以0到多個<role-name>或是設成"*",當設成"*"時所有人都可以存取,當設成<auth-constraint/>,沒有人可以存取
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE/CONFIDENTIAL/INTEGRAL</transport-guarantee>
//NONE implies HTTP;CONFIDENTIAL,INTEGRAL imply HTTPS
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC/FORM/DIGEST/CLIENT-CERT</auth-method>
//當<auth-method>為FORM時才需設定<form-login-config>
<form-login-config>
<form-login-page>/formlogin.html</form-login-page>
<form-error-page>/formerror.html</form-error-page>
</form-login-config>
//當<auth-method>為FORM時才需設定<form-login-config>
</login-config>
<session-config>
<session-timeout>30</session-timeout> //單位是分鐘,當值 <= 0 時表示不會自動 timeout
</session-config>
<mime-mapping>
<extension>pdf</extension>
<mime-type>application/pdf</mime-type>
</mime-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file> //一個至多個<welcome-file>,被叫用時照設定時的先後順序
</welcome-file-list>
<error-page>
<error-code>404</error-code> or <exception-type>...</exception-type>
<location>/404.html</location>
</error-page>
<filter>
<filter-name>Example Filter</filter-name>
<filter-class>examples.ExampleFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Example Filter</filter-name>
<servlet-name>FilterMe.jsp</servlet-name> or <url-pattern>/myContext/*</url-pattern> //<url-pattern>的優先權高於<servlet-name>
<dispatcher>REQUEST/INCLUDE/FORWARD/ERROR</dispatcher> //一個至多個<dispatcher>
</filter-mapping>
<listener>
<listener-class>Listener 的類別名稱</listener-class> //一個至多個<listener-class>,要注意多個listener時的寫法
</listener>
<listener>
<listener-class>Listener 的類別名稱</listener-class>
</listener>
</web-app>
3: The Web Container Model
1. 只有request scope的資料在傳送時是thread safe
2. Filter class
public class TimingFilter implements Filter
{
public void init(FilterConfig filterConfig) throws ServletException
{
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException,IOException
{
chain.doFilter(request, response); //這行的程式非必填的程式碼,也可以不寫
}
public void destroy()
{
}
}
3. listener class
分成三類:ServletContextListener,HttpSessionListener,ServletRequestListener
注意Method的不同處:HttpSessionListener.sessionCreated(...),ServletContextListener.contextInitialized(...),ServletRequestListener.requestInitialized(...)
4. attribute listener class
分成三類,名稱上相似:都叫XXXAttributeListener
提供的Method名稱一樣:attributeAdded(...),attributeRemoved(...),attributeReplaced(...)
5. HttpSessionAttributeListener.某個Method(HttpSessionBindingEvent e)
HttpSessionBindingListener.某個Method(HttpSessionBindingEvent e)
二者輸入參數的型別都必為HttpSessionBindingEvent
6. HttpSessionBindingListener的使用不需在web.xml裡作宣告 ,要很清楚HttpSessionBindingListener的使用方式
7. listener本身是個Interface,所以可以實作一個class繼承多個不同的listener
8. HttpSessionActivationListener被使用在多個JVM的環境下
9. RequestDispatcher rd=request.getRequestDispatcher(相對或絕對路徑)
RequestDispatcher rd=getServletContext().getRequestDispatcher(絕對路徑) //如果設成相對路徑還是可以Compile,return值是null
10. RequestDispatcher ServletRequest.getRequestDispatcher(String path) //來自ServletRequest,不是HttpServletRequest
RequestDispatcher ServletContext.getRequestDispatcher(String path) 4: Session Management
1. HttpSession的method
Object getAttribute(String name)
void setAttribute(String name, Object value)
void removeAttribute(String name)
Enumeration getAttributeNames()
void invalidate()
boolean isNew()
void setMaxInactiveInterval(int seconds) //單位是秒,當值 < 0 時表示不會自動 timeout
2. HttpServletRequest.getSession(false)在取得HttpSession時,如果HttpSession不存在,不會自動產生,會return null
3. Sesssion tracking mechanisms:Cookies,SSL Sessions,URL Rewriting 4. HttpServletResponse的URL rewriting Method
String encodeURL(String url)
String encodeRedirectURL(String url)
5: Web Application Security
1. Web Application Security的特質有四種:
(a)authentication(認証)
(b)authorization(授權)
(c)data integrity(資料完整性):指資料從發送方傳送到接收方,在傳送過程中資料不會被篡改。
(d)confidentiality(私密性):指除了資料接收方以外,其他人不會存取到這個敏感性資訊的能力及權限。
2. HttpServletRequest中與驗証使用者相關的Method
String getRemoteUser()
java.security.Principal getUserPrincipal()
boolean isUserInRole(String role)
3. Authentication types有下列四種
BASIC:傳輸的資料不加密(不安全),不需自訂輸入帳號與密碼的Form(Browser會pop up一個輸入的表單)
DIGEST:傳輸的資料加密(安全),不需自訂輸入帳號與密碼的Form(Browser會pop up一個輸入的表單)
FORM:傳輸的資料不加密(不安全),要自訂輸入帳號與密碼的Form
CLIENT-CERT:用Public Key Certificate的機制(安全)
6: The JavaServer Pages (JSP) Technology Model
1.
撰寫JSP的註解文字 directives <%@ 標準指令 %> A JSP directive.
設定JSP網頁整體組態 (6.2) declarations <%! 宣告式 %> A Java declaration that becomes part of the servlet class.
宣告JSP內所使用的變數或方法 scriptlets <% 程式碼 %> Java code that is inserted in the jspService method.
撰寫任何JAVA程式碼 expressions <%= 運算式 %> Java code that generates text printed to the response stream.
相當於out.print(運算式); ACTIONS/TAGS <jsp:動作項目 屬性="值"/> XML-based tags that perform dynamic actions while generating the response. There are three fundamental variations:
1. An emtpy tag. Notice the '/' at the end of the tag.
<my:tag attr='value' />
2. A tag with a body.
<my:tag>
<%-- JSP code --%>
</my:tag>
3. Nested tags, use standard HTML/XML nesting rules.
<my:tag1>
<my:tag2>...</my:tag2>
</my:tag1>
目的在減少JAVA程式碼 EXPRESSION LANGUAGE ${ EL-expr } A rich language for generating "presentation content".
'${' is the opening token of an EL expression and '}' is the closing token.
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %> (使用tag file時才要用tagdir的屬性)
<%@page import="java.util.*"%> <jsp:directive.標準指令 屬性="值"%>
<jsp:directive.page import="java.util.*"> DECLARATION <%! 初始宣告 %>
<%! int i=1;%> <jsp:declaraction>
初始宣告
</jsp:declaration> <jsp:declaraction>
int i=1;
</jsp:declaration> SCRIPTLET <% JAVA程式 %>
<% if (X>0)
{
result=true;
}
%>
<jsp:scriptlet>
JAVA程式
</jsp:scriptlet>
<jsp:scriptlet>
if (X>0)
{
result=true;
}
</jsp:scriptlet> EXPRESSION <%= 運算式 %>
<%= new Date()%>
<jsp:expression>
運算式
</jsp:expression> <jsp:expression>
new Date()
</jsp:expression> COMMENT <%-- JSP註解 --%> <!-- 使用HTML註解-->
4. JSP page life cycle(JSP的本質是Servlet):
JSP page translation --> JSP page compilation --> load class --> create instance --> call the jspInit method(可以被改寫)--> call the _jspService method(不能被改寫) --> call the jspDestroy method(可以被改寫)
5.
6.
- 此法效能較好
- 只能使用原有request參數,不能靠Query String增加參數
- 會自動UPDATE
- RunTime可使用<jsp:param name="" value=""/>來傳遞參數
7. include directive不能指向 servlet,include action, forward action 可以指向 servlet
8.
JSP轉譯成Servlet的class
public class MyServlet_jsp extends XXXXXX{
public void jspInit() { }
// 這個Method繼承自javax.servlet.jsp.JspPage這個interface
//只執行一次,可以在JSP檔案中用declaration的方式改寫
public void _jspService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }
//這個Method繼承自javax.servlet.jsp.HttpJspPage這個interface
//不能在JSP檔案中改寫
public void jspDestroy() { }
//這個Method繼承自javax.servlet.jsp.JspPage這個interface
//只執行一次,可以在JSP檔案中用declaration的方式改寫
}
10. 下列的JSP DECLARATION是合法的
<%!
Hashtable ht = new Hashtable();
{
ht.put("max", "10"); // { }拿掉會導致Compile error
}
%>
7: Building JSP Pages Using the Expression Language (EL)
1.
Implicit objects provided by the expression language
Implicit Object
Content
applicationScope
A collection of scoped variables from applications scope pageScope
A collection of all page scope objects requestScope
A collection of all request scope objects sessionScope
A collection of all session scope objects pageContext
The javax.servlet.jsp.PageContext
object for the current page initParam
A collection of all application parameter names param
A collection of all request parameters as strings paramValues
All request parameters as collections of strings header
HTTP request headers as strings headerValues
HTTP request headers as collections of strings cookie
A collection of all cookies 2. EL operators: property access (the . operator), collection access (the [] operator).
. operator只能用在物件型別為Map或JavaBean,[] operator則無任何限制
3. EL operators中比較需要注意之處
Relational :
==
, eq
, !=
, ne
, <
, lt
, >
, gt
, >=
, ge
, <=
, le
Empty : ${!empty param.Add}
Conditional : A ? B : C
4. EL function的寫法package mypkg;
public class MyLocales {
...
public static boolean equals( String a, String b ) { //必為 public static
return a.equals(b);
}
}
5. EL function在xxx.tld中的宣告方式
<function>
<name>equals</name>
<function-class>mypkg.MyLocales</function-class>
<function-signature>boolean equals( java.lang.String, java.lang.String )</function-signature>
</function>
6. EL expression的出題陷阱
${10 * 1.5} //結果是15.0
${123 / 0} //結果是Infinity
${0 / 0} //結果是NaN
${"" + 1} //結果是1
${" " + 1 } //產生Exception
${123 % 0} //產生Exception
${0 % 0} //產生Exception
8: Building JSP Pages Using Standard Actions
1.
class="完整的package.類別名稱 "
type=" id屬性值的變數型別 "
scope=" 存取範圍 " />
<jsp:useBean id="cs" class="scwcd.CsClass" scope="page" />
相當於:
<%@ page import="scwcd.*" %>
<% CsClass cs=new CsClass(); %>
scope 可以是
application (相當ServletContext 物件),
session (相當HttpSession 物件 ),
request (相當ServletRequest 物件),
page (相當PageContext 物件) jsp:setProperty <jsp:setProperty name="JavaBean的變數名稱"
property="欲設定的JavaBean屬性名稱"
param="HTTP請求所傳的參數名稱"
value=" 參數的數值"/>
<jsp:setProperty name="cs" property="*" />
自省機制Introspection:
1.可用( property="*")全部設完JavaBean所有方法
2 但是對應的HTTP <form>中的個數與名稱都要一致 jsp:getProperty <jsp:getProperty name="JavaBean的變數名稱"
property="欲設定的JavaBean屬性名稱" />
<jsp:getProperty name="cs" property="name" />
相當於:
<%=cs.getName(); %>
JavaBean: 目的 - 1.減少JSP中Java程式碼 2.REUSABLE 3.便於網頁維護開發
規定 - 1.他是public類別 2. constructor無參數 3.(g)setXXX()符合命名規則
初始化- 若是scope中的Name Space無相同id名稱, 才會new instance (和初始化)
<jsp :useBean id="cs" class="scwcd.CsClass" scope="page">
<jsp:setProperty name="cs" property="name" />
</jsp:useBean>
2.
Standard Action
<jsp:forward page="Banner.jsp" />
1.<% RequestDispatcher rd=
request.getRequestDispatcher("相對或絕對路徑");
rd.forward(request,response);
%>
2. <% pageContext.forward("Banner.jsp"); %> jsp:include <jsp:include page="欲加入的JSP或HTML" />
<jsp:include page="include.jsp" />
1.<% RequestDispatcher rd=
request.getRequestDispatcher("相對或絕對路徑");
rd.include(request,response);
%>
2. <% pageContext.include("include.jsp"); %> jsp:param <jsp:param name="參數名" value="參數值" />
<jsp:forward page="Banner.jsp">
<jsp:param name="Wellcome" value="Hello" />
</jsp:include>
<% String title=request.getParameter("Wellcome"); %>
//scwcd.Person是scwcd.Employee的super class,利用此方法可以達到polymorphic的效果
4. 在<jsp:useBean ... />中
If type is used wtihout class,the bean must already exit.不然會產生exception.
If class is used(with or without type) the class must Not be abstract or interface,and must have a public no-arg constructor
<jsp:useBean id="mybean" beanName="my.app.MyBean" type="my.app.MyBean" />,beanName只能與type同時出現
5. <% out.flush() %>
<jsp:forward .../>
此種寫法會使forward失效,不被執行,而且不會產生exception
9: Building JSP Pages Using Tag Libraries
1. JSTL的Core Tag Library
<c:out value="${username}" escapeXml="false" /> //要了解escapeXml代表的義意
<c:set var="four" scope="session" value="${3+1}" />
<c:remove var="dommed" scope="session" />
<c:catch var="e"> //var的值可以在catch block之外被使用,<c:catch>的功能與try...catch寫法中的catch相似
... Program code that may throw an exception ...
</c:catch>
<c:if test="${e != null}"> The caught exception is <c:out value="${e}"/> </c:if>
<c:if test="${e == null}"> No exception was thrown </c:if>
<c:choose>
<c:when test="${error1}"> Error1 </c:when> //一定要有test這個attribute
<c:when test="${error2}"> Error2 </c:when>
<c:when test="${error3}"> Error3 </c:when>
<c:otherwise> Otherwise </c:otherwise> //不能有test這個attribute,此外<c:otherwise>這個tag非必需
</c:choose>
<c:forEach items="${user.medicalConditions}" var="aliment">
<c:out value="${aliment}"/> //如果這行改成<%=aliment %>會產生exception,不能用scriptling來存取<c:forEach>中的值
</c:forEach>
<c:forTokens items="a;b;c;d" delims=";" var="current">
<c:out value="${current}"/>
</c:forTokens>
<c:url value="buy.jsp"> //<c:url>的功能是url rewriting,不是url encoding,url帶參數時要用範例中的寫法
<c:param name="stock" value="IBM"/>
</c:url>
<c:import context="/other" url="/directory/target.jsp"/> //可以import其它Web application的的資料
<c:param name="first" value="one"/>
<c:param name="second" value="two"/>
</c:import>
<c:redirect context="/brokerage" url="/buy.jsp"> //可以redirect其它Web application的的資料
<c:param name="stock" value="IBM"/>
</c:redirect>
2. <c:set target="${myDog}" property="dogName" value="可魯" />
target必需放Object,不能是String。利用此法可以設定Bean的property。
10: Building a Custom Tag Library
1. tag file與simple tag相似,tag file在執行前會先被轉換成simple tag才被執行。二者在接收到新的request時都會產生新的instance。二者的body content設定都不能設為JSP
2. tag support與body tag support相似,二者都只產生一個instance被多個request共用(跟Servlet的架構相似)
3. classic tag
simple tag用getJspContext() method取得 implicit variable
5. 抓取parent tag的method
Tag getParent()
static Tag findAncestorWithClass (Tag from, java.lang.Class klass)
6. Simple tag class的寫法
public class MySimpleTag extends SimpleTagSupport
{
StringWriter sw = new StringWriter();
public void doTag() throws JspException, IOException
{
getJspContex().getOut().write(sw.toString());
getJspBody().invoke(null);
}
}
Tag support class的寫法(body tag support class的寫法與它相似)
public class MyTag extends TagSupport
{
public int doStartTag() throws JspException{
...
return SKIP_BODY/EVAL_BODY_INCLUDE;
}
public int doAfterBody() throws JspException{
...
return SKIP_BODY/EVAL_BODY_AGAIN ;
}
public int doEndTag() throws JspException{
...
return SKIP_PAGE/EVAL_PAGE;
}
}
要了解simple tag與classic tag二者在寫法上的不同處
7. Tag file的寫法
<%@ attribute name="fontColor" required="true" rtexprvalue="true" %>
<%@ tag body-content="empty/tagdependent/scriptless"%>
<font color="${fontColor}"><jsp:doBody/></font><br>
Tagfile可以使用的directives: taglib, include, tag, attribute, variable.
8. tag class在xxx.tld的宣告方式
<uri>...</uri>
<tag>
<name>callEJB</name>
<tag-class>com.example.web.tags.EJBCallTagHandler</tag-class>
<body-content>empty/tagdependent/scriptless/JSP</body-content>
//設成empty時,如果JSP檔裡的tag body卻包含資料,會在執行時產生Exception
//設成scriptless時,如果JSP檔裡的tag body卻包含scripting的敘述,會在執行時產生Exception
//設成tagdependent的話表示不作任何處理,直接將本體內容傳給標籤庫,由標籤庫自行處理本體內容
<attribute>
<name>user</name>
<required>true/false/yes/no</required> //設成true時,如果JSP檔裡面沒有設定這個attribute會在執行時產生Exception
<rtexprvalue>true</rtexprvalue> //設成false時,如果JSP檔裡面有rtexprvalue的寫法會在執行時產生Exception
</attribute>
</tag>
9. SkipPageException stops only the page thata directly invoked the simple tag
10. Simp tag life cycle
Load class --> Instantiate class --> call setJspContext() method --> call setParent() method --> call attribute setters(不一定會執行) --> call setJspBody()(不一定會執行) --> call doTag()
11. classic tag life cycle
Load class --> Instantiate class --> call setPageContext() method --> call setParent() method --> call attribute setters(不一定會執行) --> call doStartTag() --> call doAfterBody() --> call doEndTag()
12. SimpleTag在xxx.tld中的<body-content>設定不能設為JSP,body content不可以使用sriptlet的語法
Tag file的<%@ tag body-content="..."%>不能設為JSP,body content不可以使用sriptlet的語法
13. <prefix:sometag>
<jsp:attribute name='attrA'>val1</jsp:attribute> //不能寫成<jsp:attribute name='attrA' value='val1' />,要注意
</prefix:sometag>
14. public class MyTag extends TagSupport
{
public int doStartTag() throws JspException{
if(somecondition)
{
return EVAL_BODY_INCLUDE;
}
else
{
PageContext.forward(...) or PageContext.include(...) //有些考題會在這部份作陷井,要注意
}
}
...etc
}
15. If we extend BodyTagSupport, then we use BodyTagSupport.getPreviousOut() to get the "previous" or "enclosing" JspWriter.
16. 如果tag class被包在jar file裡面。在使用tag class之前不需在web.xml作taglib的設定。只要在JSP檔裡宣告<%@ taglib prefix...etc %>就可以使用這個tag
11: J2EE Patterns
1. Business Delegate Pattern(參照HeadFirstSevlet&JSP p:746)
2. Service Locator Pattern(參照HeadFirstSevlet&JSP p:747)
3. Transfer Object Pattern(參照HeadFirstSevlet&JSP p:748)
4. Intercepting Filter Pattern(參照HeadFirstSevlet&JSP p:749)
5. MVC Pattern(參照HeadFirstSevlet&JSP p:750)
6. Front Controller Pattern(參照HeadFirstSevlet&JSP p:751)
12: 雜七雜八無法分類的部份
1. Servlet與Filter class寫法相似,二者在web.xml的設定方式亦相似
2. EL function與tag class二者在xxx.tld的設定方式相似
3. 要能分出下面三者的差異
<%@ include file="myTest.jsp" %> //Static的include方式
<jsp:include page="myTest.jsp"/> //dynamic的include方式
<c:import url="/myTest.jsp" context="/OtherSite"/> //dynamic的include方式,而且可以inlcude不同Web application的資料
4. 在Deployment Descriptoer中呼叫的先後順序:listener->filter->servlet
5. Both - GenericServlet class and ServletContext interface, provide methods log(String msg) and log(String, Throwable) that write the information to a log file.
6. JSP Page directive中比較少見的attribute:language,extends,buffer,autoFlush,info
7. java.net.URL ServletContext.getResource()
java.io.InputStream ServletContext.getResourceAsStream()
8. ServletException provides the getRootCause() method that returns the wrapped exception. It's return type is Throwable, so you have to cast it to appropriate business exception type.
9. <servlet-mapping>
<servlet-name>XServlet</servlet-name>
<url-pattern>*.x</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>YServlet</servlet-name>
<url-pattern>/y/*</url-pattern>
</servlet-mapping>
/y/test //執行YServlet /y.x //執行XServlet /y/test.x //執行YServlet.This is because an extension mapping is considered ONLY if there is no path matching. /y/x //執行YServlet /y/test.jsp //執行YServlet
要了解HeadFirstSevlet&JSP p:588的考題練習
10. Request URL = protocol://host:port + contextpath + requestpath + pathinfo
註:紅字部份是特別要注意的考題陷井
- SCWCD笔记转载 。(都是看似简单 其实实用的基础)
- 看似简单的 fgets() 其实很不简单(坑爹的C语言)
- tf.transpose函数的用法讲解(多维情况,看似复杂,其实也简单)
- 看似简单的scanf
- 看似简单的TextView
- 人类无法抗拒的10种心理,学会它,就能控制其它人,看似邪恶的东西,其实已经被广泛使(转载)
- c基础,看似简单实则值得思考的问题
- DXLib 主页,简单翻译(我其实看不懂,都是瞎掰的)
- 【转载】即时通讯实现其实挺简单的
- 看似简单的小问题
- 看似简单的if-else
- 看似简单的if语句
- 看似简单的小麻烦
- 看似积极,其实焦虑。
- 看似没事,其实很忙
- 其实每个人都是幸福的
- 一个简单实用的遗传算法c程序(转载)
- 一个简单实用的遗传算法c程序(转载)
- ASP.NET Ajax程序设计—阅读笔记
- 简单的密码验证控件
- sybase 优化 之增加 cache
- 欣赏 11个完美的商业网站布局
- 解剖Google搜索原理 The Anatomy of a Large-Scale Hypertextual Web Search Engine
- SCWCD笔记转载 。(都是看似简单 其实实用的基础)
- 一个三级联动的问题 大虾帮忙啊
- 不会中毒的浏览器:Mozilla Firefox(火狐浏览器) 官方简体中文正式
- 什么是双核处理器
- TQ招聘VC++程序员,应届生也可,关键有水平
- 泛型与反射
- XML 和 Java 技术: 数据绑定的多种用法
- How to use .net Remoting
- java中内部类的研究