zoukankan      html  css  js  c++  java
  • 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>

    输出汉字:

  • 相关阅读:
    JavaScript+运算符总结
    【总结】HTMl5的sessionStorage和localStorage
    移动H5前端性能优化指南(转自ISUX)
    最新个人H5游戏大作——《择花的少女》
    类似天猫那样的侧边导航栏的快速实现
    JQuery实现banner图片的轮播效果
    实现数字电视机顶盒画面的纯键盘和遥控操作网页
    广播的动态静态注册
    Activity 与 fragment 生命周期
    activitycollector
  • 原文地址:https://www.cnblogs.com/yangyquin/p/5431769.html
Copyright © 2011-2022 走看看