JSP的隱式對象


    JSP 隱式對象是Web容器加載的一組類的實例。它是可以直接在JSP頁面使用的對象。分為4個主要類別:
    ·  輸入和輸出對象:控制頁面的輸入和輸出(request、response、out)。
    ·  作用域通信對象:檢索與JSP頁面的Servlet相關的信息(session、application、pageContext)。
    ·  Servlet對象:提供有關頁面環境的信息(page、config)。
    ·  錯誤對象:處理頁面中的錯誤(exception)。
 

1、輸入和輸出對象

     1)request對象
        request隱式對象表示客戶端的請求,包含了所有的請求信息。
        · String getParameter(String name):根據頁面表單組件名稱獲取請求頁面提交的數據。
        · String getParameterValues(String name):獲取頁面請求中一個表單組件對應多個值時的用戶的請求數據(例如復選框)。
     2)response對象
        response隱式對象處理JSP生成的響應, 然后將響應結果發送給客戶端。
        · void setContentType(String name):設置作為響應生成的內容的類型和字符編碼。
        · void sendRedirect(string name):發送一個響應給瀏覽器,指示其應請求另一個URL(重定向到另外一個URL,會丟失數據,跳轉后不再執行sendRedirect方法下面的代碼)。
     3)out對象
        out對象表示輸出流,此輸出流將作為請求的響應發送到客戶端,常用的方法有print()、println()和write()。
 
2、作用域通信對象
    JSP作用域通信對象從小到大有pageContext對象、session對象、application對象。
     1)pageContext對象
    pageContext對象使用戶可以訪問當前頁面作用域中定義的所有隱式對象。pageContext對象最常用的方法有:
    · void setAttribute(String  name, Object value):以名稱/值的方式,將一個對象的值存放到pageContext中(存的值的類型為Object)。
    · void getAttribute(String name):根據名稱去獲取pageContext存放對象的值(獲取的值的類型為Object)。
    2)session對象
    session對象表示用戶的會話狀況,用此項機制可以輕易識別每一個用戶,能保存和跟蹤用戶的會話狀態。session對象最常用的方法有:
    · void setAttribute(String  name, Object value):以名稱/值的方式,將一個對象的值存放到session中(存的值的類型為Object)。
    · void getAttribute(String name):根據名稱去獲取session存放對象的值(獲取的值的類型為Object)。
     3)application對象
    application對象作用於整個應用程序,所有的客戶端窗口都可以共享該對象,從服務器開始就存在,直到服務器關閉為止。application對象最常用的方法有:
    · void setAttribute(String  name, Object value):以名稱/值的方式,將一個對象的值存放到application中(存的值的類型為Object)。
    · void getAttribute(String name):根據名稱去獲取application存放對象的值(獲取的值的類型為Object)。
 
3、Servlet對象
    1)page對象
    page對象提供對網頁上定義的所有對象的訪問。page對象表示頁面本身,它是java.lang.Object類的一個實例。
    2)config對象
    config對象存儲Servlet的一些初始信息。config對象是javax.servlet.ServletConfig接口的一個實例,ServletConfig接口提供方法以檢索Servlet初始化參數。config對象表示編譯JSP頁面的Servlet初始化數據的配置。
 
4、錯誤對象exception
    exception對象處理JSP頁面中的錯誤。printStackTrace()方法用於顯示異常的堆棧跟蹤。exception.getClass().getName()獲取異常信息。
 
表單驗證的示例
1)顯示頁面index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>表單提交</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="test">
    <p align="center"><strong>表單提交</strong></p>
    <table width="331" height="147" border="1" align="center" cellpadding="0" cellspacing="0">
        <tr>
            <td width="76" height="35">username:</td>
            <td width="183">
                <label>
                    <input type="text" name="userName" id="username_tf" height="20"/>
                </label>
            </td>
            <td width="50">&nbsp;</td>
        </tr>
        <tr>
            <td>sex:</td>
            <td>
                <input type="radio" name="sex" value="boy"/>Boy
                <input type="radio" name="sex" value="girl"/>Girl
            </td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>address:</td>
            <td>
                <input type="text" name="address" id="address_tf" height="20"/>
            </td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>likes:</td>
            <td>
                <label>
                    <input type="checkbox" name="likes" id="cb1" value="sing"/>Sing
                    <input type="checkbox" name="likes" id="cb2" value="dance">Dance
                    <input type="checkbox" name="likes" id="cb3" value="game">Game
                </label>
            </td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>&nbsp;</td>
            <td>
                <input name="" type="submit" value="提交"/>
                <input name="" type="reset" value="重置">
            </td>
            <td>&nbsp;</td>
        </tr>
    </table>
</form>
</body>
</html>

2)在Servlet中處理業務邏輯

package com.yyq.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * Created by gao on 16-4-18.
 */
public class TestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //獲取表單信息
        String userName = req.getParameter("userName");
        String sex = req.getParameter("sex");
        String address = req.getParameter("address");
        String[] likes = req.getParameterValues("likes");
        String URL = "index.jsp";
        String likes2 = "";
        if (null != likes) {
            for (String str : likes) {
                likes2 += str + "  ";
            }
        }
        if (null != userName && !userName.equals("")) {
            //把從頁面獲取的內容放入到request中
            req.setAttribute("userName", userName);
            req.setAttribute("sex", sex);
            req.setAttribute("address", address);
            req.setAttribute("likes", likes2);
            URL = "result.jsp";
        }
        req.getRequestDispatcher(URL).forward(req, resp);
    }
    @Override
    public void destroy() {
        super.destroy();
    }
    @Override
    public void init() throws ServletException {
        super.init();
    }
}

3)在web.xml文件中注冊Servlet信息

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
    <servlet>
        <servlet-name>testservlet</servlet-name>
        <servlet-class>com.yyq.servlet.TestServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>testservlet</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

4)編寫結果頁面result.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>結果頁面</title>
</head>
<body>
    <form id = "form" name="form" method="post" action="">
        <p align = "center"><strong>表單 提交</strong></p>
        <table width = "331" height = "147" border="1" align = "center" cellpadding = "0" cellspacing = "0">
            <tr>
                <td width = "76" height = "35">username:</td>
                <td width = "183">
                    <label><%=request.getAttribute("userName")%></label>
                </td>
                <td width = "50">&nbsp;</td>
            </tr>
            <tr>
                <td>&nbsp;&nbsp;&nbsp;&nbsp;Sex:</td>
                <td><%=request.getAttribute("sex")%></td>
                <td>&nbsp;</td>
            </tr>
            <tr>
                <td>&nbsp;Address:</td>
                <td><%=request.getAttribute("address")%></td>
                <td>&nbsp;</td>
            </tr>
            <tr>
                <td>&nbsp;&nbsp;likes:</td>
                <td>
                    <label><%=request.getAttribute("likes")%></label>
                </td>
                <td>&nbsp;</td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td>
                    <a href="index.jsp">Back index.jsp<br/></a>
                </td>
                <td>&nbsp;</td>
            </tr>
        </table>
    </form>
</body>
</html>

5)啟動Tomcat,輸入http://localhost:8080/index.jsp

輸入相關內容,點擊提交即可:
 
優化:當用戶在username中輸入中文字符時,則有可能出現亂碼。
     1)硬編碼方式
    首先在index.jsp頁面修改字符集設置:
    <%@ page contentType="text/html; charset=GB2312"%>
    其次更改Servlet相關代碼。
//JSP引擎會自動把輸出的頁面轉換成指定的字符集
        resp.setContentType("text/html;charset=GB2312");
        //在JSP中,可以使用req.getParameter("參數名")獲得參數值,
        //參數值的默認字符集是ISO8859_1,如果不進行字符集轉換,將導致漢字亂碼
        String szUserName = req.getParameter("userName");
        szUserName = new String(szUserName.getBytes("ISO8859_1"),"GB2312");
    2)采用過濾器方式,參考: http://www.cnblogs.com/yangyquin/p/5427154.html
編寫過濾器類:
package com.yyq.servlet;
import javax.servlet.*;
import java.io.IOException;
/**
 * Created by gao on 16-4-25.
 */
public class FormFilter implements Filter {
    private FilterConfig filterConfig;
    //Filter初始化時的回調方法
    //FilterConfig接口實例中封裝了這個Filter的初始化參數
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
    }
    //主要負責過濾工作
    //FilterChain用於調用過濾器鏈中的下一個顧慮器
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //獲取此Filter的初始化參數的值
        String encoding = filterConfig.getInitParameter("encoding");
        System.out.println(encoding);
        if (null != encoding && !"".equals(encoding)){
            //設置請求數據的編碼方式
            servletRequest.setCharacterEncoding(encoding);
        }
        //把請求和響應對象傳給過濾器鏈中的下一個要調用的過濾器或Servlet
        filterChain.doFilter(servletRequest,servletResponse);
    }
    //此Filter被釋放時的回調方法
    @Override
    public void destroy() {
        //
    }
}

修改配置文件web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
    <servlet>
        <servlet-name>testservlet</servlet-name>
        <servlet-class>com.yyq.servlet.TestServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>testservlet</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>
    <filter>
        <filter-name>FormFilter</filter-name>
        <filter-class>com.yyq.servlet.FormFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
   <filter-mapping>
       <filter-name>FormFilter</filter-name>
       <url-pattern>/*</url-pattern>
   </filter-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

輸出漢字:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM