JSP內建對象介紹__JSP

來源:互聯網
上載者:User
一、內建對象介紹
內建對象不能在<%!    %>中使用。

內建對象 所屬類
pageContext javax.servlet.jsp.PageContext
request javax.servlet.http.HttpServletRequest
response javax.servlet.http.HttpServletResponse
session javax.servlet.http.HttpSession
config javax.servlet.ServletConfig
application javax.servlet.ServletContext
out javax.servlet.jsp.JspWriter
page java.lang.Object
exception java.lang.Throwable

為了便於查文檔,一定要記住所屬的類;(在JAVA SE的文檔中是沒有這些類的,需要下載Java EE文檔);

JSP的內建對象在JSP中非常重要,這些內建對象是由WEB容器建立出來的,所以使用者不用自己建立。

在JSP產生的Servlet類中可以清楚的看到這些內建對象的建立,不過需要注意的是exception一般是不會建立的,只有當JSP頁面是錯誤頁面才會建立,即只有JSP包含isErrorPage="true"時才建立exception對象;


主要的幾個內建對象有:

(1)request  :    javax.servlet.http.HttpServletRequest,表示客戶請求。

        具體用法:request.getParameter("name")等。

(2)response:javax.servlet.http.HttpServletResponse,表示伺服器回應。

(3)pageContext:javax.servlet.jsp.pageContext,表示JSP頁面。

(4)session:javax.servlet.http.HttpSession,表示一次會話。

(5)application:javax.servlet.servletContext,表示所有使用者共用資訊。

(6)out:javax.servlet.jsp.jspWriter,寫入頁面內容。

(7)page:表示一個頁面的執行個體。

(8)config:javax.servlet.servletConfig,表示設定檔資訊。

二、4種屬性範圍

(1)page範圍(pageContext):一頁中有效,跳轉即無效。

(2)request範圍:伺服器跳轉有效,用戶端跳轉無效。

(3)session範圍:跳轉有效,新開瀏覽器無效。

(4)application範圍:所有使用者有效,重啟伺服器無效。

這四個對象有3個方法:

(1) void setAttribute(String key,Object o);    //設定屬性

(2) Object getAttribute(String key);      //取得後要向下轉型。

(3) void removeAttribute(String key);   //刪除屬性

注意:在getAttribute之後一定要轉型。

舉例:

pageContext.setAttribute("name","xiazdong");    //只能在單個頁面中進行儲存

String name = (String)pageContext.getAttribute("name");      //換了一個頁面後就無法取得

注意:儘可能在滿足功能的前提下,將屬性設定的儲存範圍儘可能的小。這樣能夠提高效能; 三、request對象


注意:request.getSession()能夠取得Session對象;

request對象是接收用戶端發來的資訊,而用戶端發來了頭資訊、內容、傳遞方式、cookie。

常用方法:

(1)request.getParameter(String name):取得name元素的值。  取得來源:(1)地址修正(2)表單提交

(2)Enumeration enu = request.getParameterNames():取得全部的參數的名稱,通過迭代器遍曆。

補充:Enumeration的用法:

enu.hasMoreElements();

enu.nextElement();

(3)String[] strs = request.getParameterValues(String name):用於取得比如checkbox的多項選擇。

(4)Enumeration enu = request.getHeaderNames():獲得全部頭資訊的名字。

(5)String str = request.getHeader(String name):獲得名字為name的頭資訊的內容。

(6)String str = request.getMethod():獲得是post或get.

(7)request.setCharacterEncoding(String ):統一request的編碼。 比如伺服器的JSP版面設定為GBK,而瀏覽器為UTF-8,則會出現編碼不匹配問題。

(8)request.isUserInRole(String name);  用於使用者驗證角色

(9)Cookie[] c = request.getCookies():獲得全部的cookie。 執行個體1:顯示全部頭資訊

Enumeration enu = request.getHeaderNames();

while(enu.hasMoreElements()){

String name = (String)enu.nextElement();

String value = request.getHeader(name);

//顯示name和value即可

}


執行個體2:獲得用戶端IP地址


String ip = request.getRemoteAddr();


request還有一些不太常用的方法:

(1)request.getRemoteAddr(); 返回用戶端的ip地址;

(2)request.getServletPath(); 返回當前檔案在伺服器的目錄;

(3)request.getContextPath(); 返回主目錄資訊;


tomcat增加新使用者和新許可權的方法:

(1)在tomcat/conf/tomcat-users.xml可以設定,參照admin配置即可,然後重啟tomcat伺服器,完成新使用者和許可權的載入。

(2)在web.xml進行設定,使得成為登入網頁前會跳出視窗輸入使用者名稱、密碼。具體請見:http://blog.csdn.net/xiazdong/article/details/6894889
四、post和get的區別


最明顯的區別是地址欄的區別,post傳遞時,地址欄沒有任何變化,而get傳遞,地址欄會顯示傳遞的資訊,因此get傳遞的資訊有限。
五、response對象


表示回應用戶端的對象。


1.常用方法:


(1)addCookie(Cookie):添加cookie

(2)setHeader(String name,String value):設定頭資訊。

(3)sendRedirect():重新導向,類似於用戶端跳轉。

(4)getOutputStream(); 輸出資料流

常用用法:

(1)定時重新整理:response.setHeader("refresh","2"):2秒重新整理一次。

(2)定時跳轉:response.setHeader("refresh","2;URL=hello.jsp");2秒後跳轉到hello.jsp。註:此為用戶端跳轉;

(3)用戶端跳轉:response.sendRedirect("hello.jsp");

注意:以上(2)用法可能會失敗,原因是使用者在2秒內重新整理了頁面,導致refresh失效;

應用:

實現使用者登入後的“3秒後跳轉,如果沒有跳轉請點擊 這裡”;


伺服器跳轉和用戶端跳轉的區別:

伺服器端跳轉是立刻跳轉,即頁面執行到跳躍陳述式後就不執行後面的語句;

用戶端跳轉是執行完整個頁面後才跳轉。 2.操縱Cookie:

javax.servlet.http.Cookie;

將使用者的資訊儲存為一個cookie,儲存在用戶端,每次request時,都會把cookie發送到伺服器端。

按照我們宮學慶老師說的:一個人有一張紙,這張紙就是他的cookie,當以前登入過頁面A,則在紙上會記錄,如果再次進入頁面A,別人就知道你已經進入過頁面A並且知道了你的身份。

response.addCookie(Cookie e);添加cookie。

Cookie位於javax.servlet.http.cookie中。

常用方法:

(1)Cookie c = new Cookie("name","value"):建立一個新cookie。

(2)c.setMaxAge(int seconds):設定cookie最長壽命,因為原本cookie儲存在瀏覽器中,如果瀏覽器關閉,cookie丟失。

(3)c.getName():獲得名字。

(4)c.getValue():獲得值。

Cookie[]cs = request.getCookies();獲得cookie


六、session對象

session常用方法:

(1)String getId():獲得session id。session id類似於Cookie的JSessionId,是伺服器自動分配的;

(2)session.setAttribute("",""):設定屬性。

(3)session.getCreationTime():獲得建立時間。

(4)session.getLastAccessedTime():獲得最後訪問時間。

(5)session.isNew():這個session是否是新的,即判斷session id。

(6)session.invalidate():把session的屬性設定全部清空。

登入-登出頁面:

(1)使用session.setAttribute()註冊。

(2)使用session.getAttribute()判斷是否已經註冊。

(3)使用session.invalidate(); 登出;

如果想要儲存session id,則需要進行持久化操作,具體請見:http://blog.csdn.net/xiazdong/article/details/6894945


七、application對象
javax.servlet.ServletContext;

常用方法:

(1)getRealPath(path):獲得真實路徑。

(2)getContextPath():獲得虛擬路徑。

(3)getInitParameter(String );

我們可以在web.xml中添加初始化參數:

<context-param><param-name></param-name><param-value></param-value></context-param>

application==this.getServletContext()


八、config對象
javax.servlet.ServletConfig;

先從設定檔談起,在每個web應用中,都有一個WEB-INF檔案夾,這個檔案夾是很安全的,不會被其他人看到,因為不能直接存取,除非通過映射關係訪問;

如果將一個hello.jsp檔案放到WEB-INF中,如果能夠讓其能夠被訪問。

答案就是在WEB-INF/web.xml設定即可,內容如下:

<servlet>

    <servlet-name>he</servlet-name>

    <jsp-file>/WEB-INF/hello.jsp</jsp-file>

</servlet>

<servlet-mapping>

    <servlet-name>he</servlet-name>

    <url-pattern>hello</url-pattern>

</sevlet-mapping>

重啟伺服器後,則在地址欄輸入http://localhost:8080/test/hello即可。


config常用方法:

(1)getInitParameterNames();

(2)getInitParameter(String name);

什麼是初始化參數呢。

初始化參數在web.xml中進行配置,形式如下:

<servlet>

<init-param>

    <param-name>name</param-name>

    <param-value>value</param-value>

</init-param> </servlet>


九、pageContext對象

表示JSP上下文,可以通過這個執行個體,取得request\response\session\<jsp:forward>等。

(1)pageContext.forward(String);

(2)pageContext.include(String);

(3)pageContext.getServletConfig();

(4)pageContext.getServletContext();

(5)pageContext.getRequest();

(6)pageContext.geResponse();

(7)pageContext.getSession();

也就是說,只要有了pageContext對象,就能完成一切內建對象的功能;

補充:pageConext設定任意範圍的屬性(很少使用)

使用函數:pageConext.setAttribute("name","value",int SCOPE);

1.設定page範圍

pageConext.setAttribute("name","xiazdong",PageConext.PAGE_SCOPE);

2.設定request範圍

pageConext.setAttribute("name","xiazdong",PageConext.REQUEST_SCOPE);

3.設定session範圍

pageConext.setAttribute("name","xiazdong",PageConext.SESSION_SCOPE); 4.設定application範圍

pageConext.setAttribute("name","xiazdong",PageConext.APPLICATION_SCOPE);


因此,只需要PageContext就能完成全部內建對象的操作;


十、exception對象
只有當isErrorPage="true"時才能使用。 常用方法: (1)getMessage();

十一、out對象
javax.servlet.jsp.JspWriter
一般用於輸出字元流,即文字資料流,但是如果需要傳遞圖片等資訊,則需要通過response傳遞;

public void _jspService(final HttpServletRequest request, final HttpServletResponse response)//建立request、response        throws java.io.IOException, ServletException {    final PageContext pageContext;    HttpSession session = null;    final ServletContext application;    final ServletConfig config;    JspWriter out = null;    final Object page = this;    JspWriter _jspx_out = null;    PageContext _jspx_page_context = null;    try {      response.setContentType("text/html;charset=utf-8");      pageContext = _jspxFactory.getPageContext(this, request, response,    //建立pageContext      null, true, 8192, true);      _jspx_page_context = pageContext;      application = pageContext.getServletContext();     //建立application 即ServletContext      config = pageContext.getServletConfig();         //建立config      session = pageContext.getSession();                //建立session      out = pageContext.getOut();                       //建立out      _jspx_out = out;


總結:在JSP頁面中如果想要輸出,則使用out.println();進行輸出。



  補充:禁用指令碼和禁用EL

  1.禁用指令碼

 

在web.xml中配置如下模板:

 <jsp-config>  <jsp-property-group>  <url-pattern>*.jsp</url-pattern>  <scripting-invalid>true</scripting-invalid>  </jsp-property-group>  </jsp-config>


就能夠對所有的JSP禁用指令碼。

 

效果:如果禁用Scriptlet,則出現:“org.apache.jasper.JasperException”;

  2.禁用EL

在web.xml中配置如下模板:

 <jsp-config>  <jsp-property-group>  <url-pattern>*.jsp</url-pattern>  <el-ignored>true</el-ignored>    </jsp-property-group>  </jsp-config>


 

或者在jsp的page指令中isELIgnored="true";

如果兩個配置相互矛盾,則JSP的page指令優先;

 

效果:如果禁用EL後,繼續使用EL,則會當做普通文本,即如果${requestScope.aaa}則輸出:“${requestScope.aaa}”

 

 

 是否禁用EL總結表

 

 <el-ignored>  isELIgnored  是否忽略EL運算式
 未指定  未指定  不忽略
 false  未指定  不忽略
 true  未指定  忽略
 false  false  不忽略
 false  true  忽略
 true  false  不忽略

 


 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.