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>

输出汉字:

时间: 2024-10-11 09:56:34

JSP的隐式对象的相关文章

JSP(工作原理,组成部分,指令标签,动作标签,隐式对象)

目录 JSP JSP 什么是JSP JSP全名为Java Server Pages 中文名叫java服务器页面 它是在传统的网页HTML文件(.htm,.html)中插入Java程序段和JSP标记 后缀名为(*.jsp). 其根本是一个简化的Servlet设计 为什么要有JSP 直接使用Html文件是没有办法输出Java当中的信息 使用servlet来去输出一个网页非常的麻烦 于是就出现了jsp,又能写html,又能写Java代码 JSP的工作原理 设置JSP创建时的编码 本质就是一个servl

JSP页面以及JSP九大隐式对象

?JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. ?JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据. ?Jsp快速入门:在jsp页面中输出当前时间. ?JSP模版元素 ?JSP表达式 ?JSP脚本片断 ?JSP注释 ?JSP指令 ?JSP标签 ?JSP内置对象 ?如何查找JSP页面中的错误

四大域对象,和jsp的九大隐式对象,已经el表达式的11个隐式对象

四大域对象 1.PageContext :页面范围的数据 2.ServletRequest:请求范围的数据 3.HttpSession:回话范围的数据 4.ServletContext:应用范围的数据 JSP的九大隐式对象 1.out 输出流对象 2.request请求对象 3.response 响应对象 4.config 配置对象 5.session 回话对象 6.application 应用程序对象 7.page 页面对象 8.pageContext 页面上下文对象 9.exception

JSP九大隐式对象

1.jsp的九大隐式对象 request HttpServletRequest response HttpServletResponse session HttpSession application ServletcContext config   ServletConfig exception (特殊情况下使用) page     this(本JSP页面) out       JspWriter(带缓冲的PrintWriter) pageContext (使普通Java类可访问WEB资源,自

JSP中的EL隐式对象

一 介绍 JSP表达式语言(Expression Language),简称EL,为存取变量.表达式运算和读取内置对象等内容提供了新的操作方式.目的:为了使JSP写起来更加简单.表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法. ${ param. username } 等价于 <%=request. getParameter("username") %> ${ requestScope.userlist } 等

黑马day06 jsp错误页面&amp;九大隐式对象

一.如果一个页面指定了errorPage="指定错误页面" ,当这个页面出错的时候就会跳转到指定的页面进行友好的提示给用户. 1. 本6.jsp只有一行代码1/0这行代码会抛出异常,因此会跳转到指定的error页面. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" errorPage="/error.jsp"%>

jsp隐式对象

servlet容器会传递给几个对象给它运行的servlet.像什么HttpServeltRequest,ServletConfig等对象. 在jsp中,可以通过使用隐式对象来访问上述对象. 对象 描述 request HttpServletRequest类的实例 response HttpServletResponse类的实例 out JspWriter类的实例,用于把结果输出至网页上 session HttpSession类的实例 application ServletContext类的实例,

【Head First Servlets and JSP】笔记16:JSP隐式对象(内置对象)

接笔记15. 1.不管是JSP中的<%%>还是<%\=%>最终都将处于servlet的方法体中,那么有没有一种元素可以声明成类的成员呢? ——答案是有,而且非常非常简单,这个元素就是<%!%>,我们用它来解决笔记15中的问题,只需要在原基础上加一个感叹号就可以了. <%@ page import="Sample.Counter" %> <%@ page contentType="text/html;charset=UTF-

[android] jsp的九大隐式对象

pageContext对象: 1.可以作为入口对象获取其他八大隐式对象的引用 1.1 getEXception获取exception隐世对象 1.2 getPage获取page对象 1.3 getRequest 获取request对象 1.4 getResponse 获取response对象 1.5 getServletConfig获取config对象 1.6 getServletContext获取application对象 1.7 getSession获取session对象 1.8 getOu