博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSP的隐式对象
阅读量:6159 次
发布时间:2019-06-21

本文共 8050 字,大约阅读时间需要 26 分钟。

    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" %>    表单提交

表单提交

username:  
sex: Boy Girl  
address:  
likes:  
   

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信息

testservlet
com.yyq.servlet.TestServlet
testservlet
/test
index.jsp

4)编写结果页面result.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>    结果页面    

表单 提交

username:  
    Sex: <%=request.getAttribute("sex")%>  
 Address: <%=request.getAttribute("address")%>  
  likes:  
  Back index.jsp
 

5)启动Tomcat,输入

输入相关内容,点击提交即可:
 
优化:当用户在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)采用过滤器方式,参考:
编写过滤器类:
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

testservlet
com.yyq.servlet.TestServlet
testservlet
/test
FormFilter
com.yyq.servlet.FormFilter
encoding
utf-8
FormFilter
/*
index.jsp

输出汉字:

 

 

转载于:https://www.cnblogs.com/yangyquin/p/5431769.html

你可能感兴趣的文章
ajax查询数据库时数据无法更新的问题
查看>>
Kickstart 无人职守安装,终于搞定了。
查看>>
linux开源万岁
查看>>
linux/CentOS6忘记root密码解决办法
查看>>
25个常用的Linux iptables规则
查看>>
集中管理系统--puppet
查看>>
Exchange 2013 PowerShell配置文件
查看>>
JavaAPI详解系列(1):String类(1)
查看>>
HTML条件注释判断IE<!--[if IE]><!--[if lt IE 9]>
查看>>
发布和逸出-构造过程中使this引用逸出
查看>>
使用SanLock建立简单的HA服务
查看>>
Subversion使用Redmine帐户验证简单应用、高级应用以及优化
查看>>
Javascript Ajax 异步请求
查看>>
DBCP连接池
查看>>
cannot run programing "db2"
查看>>
mysql做主从relay-log问题
查看>>
Docker镜像与容器命令
查看>>
批量删除oracle中以相同类型字母开头的表
查看>>
Java基础学习总结(4)——对象转型
查看>>
BZOJ3239Discrete Logging——BSGS
查看>>