美文网首页
[java][JSP]:九大内置对象及四个域对象的总结

[java][JSP]:九大内置对象及四个域对象的总结

作者: 阿不不不不 | 来源:发表于2018-11-20 11:16 被阅读56次

    九大内置对象

    指在JSP的<%=%> 和<% %>中可以直接使用的对象:没有特别说明可以开关的默认是开启的

    Snip20181120_1.png
    pageContext(重要)
    1、本身也是一个域对象:它可以操作其它三个域对象(request session application)的数据
    void setAttribute(String name,Object o);
    Object getAttribute(String name);
    void removeAttribute(String name);
    操作其它域对象的方法
    void setAttribute(String name,Object o,int Scope);
    Object getAttribute(String name,int Scope);
    void removeAttribute(String name,int Scope);
    scpoe的值:
    PageContext.PAGE_SCOPE 
    PageContext.REQUEST_SCOPE 
    PageContext.SESSION_SCOPE 
    PageContext.APPLICATION_SCOPE
    findAttribute(String name); 
    自动从page request session application依次查找,找到了就取值,结束查找。
    2、它可以创建其它的8个隐式对象
    在普通类中可以通过PageContext获取其他JSP隐式对象。自定义标签时就使用。
    3、提供了的简易方法
    pageContext.forward("2.jsp");
    pageContext.include("2.jsp"); 
    

    四大域对象

    PageContext : pageConext 存放的数据在当前页面有效。开发时使用较少。
    ServletRequest: request  存放的数据在一次请求(转发)内有效。使用非常多。
    HttpSession: session 存放的数据在一次会话中有效。使用的比较多。如:存放用户的登录信息,购物车功能。
    ServletContext: application 存放的数据在整个应用范围内都有效。因为范围太大,应尽量少用。
    

    补充:具体实例

    HttpServletRequest

    对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。

    获得客户机信息
      getRequestURL方法返回客户端发出请求时的完整URL。
      getRequestURI方法返回请求行中的资源名部分。
      getQueryString 方法返回请求行中的参数部分。
      getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。
      getRemoteAddr方法返回发出请求的客户机的IP地址。
      getRemoteHost方法返回发出请求的客户机的完整主机名。
      getRemotePort方法返回客户机所使用的网络端口号。
      getLocalAddr方法返回WEB服务器的IP地址。
      getLocalName方法返回WEB服务器的主机名。
    /------------------华丽的分割线---------------------/
    package gacl.request.study;
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    /**
     * @author gacl
     * 通过request对象获取客户端请求信息
     */
    public class RequestDemo01 extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            /**
             * 1.获得客户机信息
             */
            String requestUrl = request.getRequestURL().toString();//得到请求的URL地址
            String requestUri = request.getRequestURI();//得到请求的资源
            String queryString = request.getQueryString();//得到请求的URL地址中附带的参数
            String remoteAddr = request.getRemoteAddr();//得到来访者的IP地址
            String remoteHost = request.getRemoteHost();
            int remotePort = request.getRemotePort();
            String remoteUser = request.getRemoteUser();
            String method = request.getMethod();//得到请求URL地址时使用的方法
            String pathInfo = request.getPathInfo();
            String localAddr = request.getLocalAddr();//获取WEB服务器的IP地址
            String localName = request.getLocalName();//获取WEB服务器的主机名
            response.setCharacterEncoding("UTF-8");//设置将字符以"UTF-8"编码输出到客户端浏览器
            //通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码
            response.setHeader("content-type", "text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            out.write("获取到的客户机信息如下:");
            out.write("<hr/>");
            out.write("请求的URL地址:"+requestUrl);
            out.write("<br/>");
            out.write("请求的资源:"+requestUri);
            out.write("<br/>");
            out.write("请求的URL地址中附带的参数:"+queryString);
            out.write("<br/>");
            out.write("来访者的IP地址:"+remoteAddr);
            out.write("<br/>");
            out.write("来访者的主机名:"+remoteHost);
            out.write("<br/>");
            out.write("使用的端口号:"+remotePort);
            out.write("<br/>");
            out.write("remoteUser:"+remoteUser);
            out.write("<br/>");
            out.write("请求使用的方法:"+method);
            out.write("<br/>");
            out.write("pathInfo:"+pathInfo);
            out.write("<br/>");
            out.write("localAddr:"+localAddr);
            out.write("<br/>");
            out.write("localName:"+localName);
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    
    获得客户机请求头
    getHeader(string name)方法:String 
    getHeaders(String name)方法:Enumeration 
    getHeaderNames()方法
    
    获得客户机请求参数(客户端提交的数据)
    getParameter(String)方法(常用)
    getParameterValues(String name)方法(常用)
    getParameterNames()方法(不常用)
    getParameterMap()方法(编写框架时常用)
    
    HttpServletResponse

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。
    request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了

    session

    一、在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
    二、Session和Cookie的主要区别
    Cookie是把用户的数据写给用户的浏览器。
    Session技术把用户的数据写到用户独占的session中。
    Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。
    三、session实现原理
    服务器是如何实现一个session为一个用户浏览器服务的?
    服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务

    相关文章

      网友评论

          本文标题:[java][JSP]:九大内置对象及四个域对象的总结

          本文链接:https://www.haomeiwen.com/subject/bbrzfqtx.html