JSP内置对象

1.jsp 9大内置对象
     request  请求
     response  响应
     pageContext; 页面上下文
     session; 会话管理session
     application; 应用
     config;  配置
     out ;   输出
     page ;  页面 this
     exception;异常

特点: 
     内置对象由Web容器自动载入,不需要实例化;
     内置对象通过Web容器来实现和管理;
     在所有的JSP页面中,直接调用内置对象都是合法的。
     
    1)out对象 
     out对象类型为javax.servlet.jsp.JspWriter,
     与HttpServletResponse接口的getWriter()方法获得的PrintWriter对象功能相同,
     并都由java.io.Writer类继承而来。
     //输出
     out.print() 输出任意数据类型
     out.println() 带有换行
      响应给客户端的效果是一样的。
      
     //刷新
      <%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8" autoFlush="false"%>
     
     <%  out.flush();%>
     
    2)request
      request对象的类型为javax.servlet.http.HttpServletRequest,与Servlet中的请求对象为同一对象。
      request对象的作用域为一次request请求。
      //常用方法
        a.获取请求参数
           String getParameter(String name)
           String[]getParameterValues()
           Enumeration getParameterNames()
           Map<String,String[]> getParameterMap() 键值对
        b.属性操作
           setAttribute(String name,Object value)    
           getAttribute(String name)
           removeAttribute(String name)
        c.请求头
           getHeader(String name) 
           Enumeration getHeaderNames()
           Cookie[] getCookie()
           getMethod()请求方式 get post
           getContextPath()上下文路径( /应用 或者叫 /工程名)
           getRequestURI()请求url地址 (/工程名/../文件 lesson5/my/login.jsp)
           getProtocol()http协议版本 htpp1.1
           getRemoteAddr()用户ip地址
           getRemoteHost()用户ip地址、主机名
           getRemotePort()用户端口号
           getRemoteUser()用户名
        d.乱码
           setCharacterEncoding() post请求的编码
        e.请求转发
           getRequestDispatcher().forword()
        f.session 相关
          HttpSession  getSession()        
          
   3)response 响应
     javax.servlet.http.HttpServletResponse,与Servlet中的响应对象为同一对象
       a.重定向
          sendRedirect()
       b.响应头
           addCookie()设置cookie
           setHeader(String name,String value) 修改和添加
           addHeader(String name,String value)添加
         响应码
            sendError(int code,String msg)    
         <% response.sendError(403,"哈哈哈哈,错啦,害不害怕吧????"); %>            
       c.编码
           response.setContentType("text/html;charset=utf-8")
           response.setCharacterEncoding("utf8")        
      
    //练习
    ==login.jsp
        <div style="color:red">
        <% 
        String msg=(String)request.getAttribute("msg");
        if(msg!=null){
            out.print(msg);
        }
         %>
        </div>
        <form action="loginValidate.jsp" method="post">
            用户名<input type="text" name="username"  >
            密码<input type="text" name="psw" >
            <input type="submit" value="登录">
        </form>    
    
    ===loginValidate.jsp
     用户验证页-----
            <%
               request.setCharacterEncoding("utf8");
              //用户名和密码为空时候,跳转到login.jsp,并且提示信息
              String uname=request.getParameter("username");
              String psw=request.getParameter("psw");
              out.print(uname+","+psw);
              if(uname==""||psw==""){
                  //设置属性
                  request.setAttribute("msg", "用户名或者密码不能为空");
                  request.getRequestDispatcher("login.jsp").forward(request, response);
              }else if(psw.length()<6 ||psw.length()>12){
                  request.setAttribute("msg", "密码长度是6-12");
                  request.getRequestDispatcher("login.jsp").forward(request, response);
              }else{
                  response.sendRedirect("testOut.jsp");
              }
              
            %>    
   4)session对象
       作用域:打开浏览器到关闭浏览器并且session不失效
        HTTPSession session = pageContext.getSession();
        a.设置session
            setAttribute(String name,Obejct value)
            setMaxInactiveInterval(int second) 过期时间 // 默认30分钟
            
        b.获取session值
          getAttribute(String name)
          getId() sessionid
        c.清除session 
           removeAttribute(String name) 
           invalidate()设置过期,取消,清除session    
        d.判断
            boolean isNew()    session 为新    
            
    ===login成功时:        
     //存放session
      session.setAttribute("user", uname);
      //重定向
      response.sendRedirect("main.jsp");
      
    ===main.jsp主页面:
             <%="欢迎"+session.getAttribute("user")%>
              <a href="logOut.jsp">退出</a>
    ===logOut.jsp退出
            <% //清除session
               //session.removeAttribute("user");
              session.invalidate();
            %>
            <jsp:forward page="login.jsp"></jsp:forward>    
            
    5)application对象
        在容器启动时实例化,在容器关闭时销毁。作用域为整个Web容器的生命周期。
         实现了javax.servlet.ServletContext接口
      getContextPath()应用 
      getContext(String path)应用 
      getRealPath()绝对路径
      getServletInfo()web容器名称与版本
      log(String msg)写入日志文件
      getMiMEType()
      
        <%="servletr容器名称与版本"+application.getServerInfo() %>
         <%=application.getContextPath() %><br>
        <%=application.getRealPath("login.jsp") %><br>
    6)pageContext对象
      页面上下文对象,表示当前页面运行环境,用以获取当前JSP页面的相关信息
      可以获取其他的内置对象
          pageContext.getRequest()
        pageContext.getResponse()
        pageContext.getOut()
        pageContext.getSession()
        pageContext.getServletConfig()    
        //例如
        <%=request.getParameter("name") %>
        等价于
        <%=pageContext.getRequest().getParameter("name") %>
        
    作用域范围:
        PAGE_SCOPE = 1代表page范围;
        REQUEST_SCOPE = 2代表request范围;
        SESSION_SCOPE = 3代表session范围;
        APPLICATION_SCOPE = 4代表application 范围。
        
   <% pageContext.setAttribute("user", "管理员",pageContext.APPLICATION_SCOPE  ); %>
   <%=pageContext.getAttribute("user",pageContext.APPLICATION_SCOPE )%>
  7)config对象,page对象(了解)  
    config对象
     即页面配置对象,表示当前JSP页面翻译后的Servlet的ServletConfig对象,存放着一些初始的数据结构。
    config对象实现于java.servlet.ServletConfig接口。
    config对象和page对象一样都很少被用到(了解即可)
    page对象
     即this,代表JSP本身,更准确地说它代表JSP被翻译后的Servlet,因此它可以调用Servlet类所定义的方法。page对象的类型为javax.servlet.jsp.HttpJspPage,在实际应用中,page对象很少在JSP中使用(了解即可)。

     
     web.xml
         <servlet>
             <servlet-name>hello</servlet-name>
             <jsp-file>/conf.jsp</jsp-file>
             <init-param>
               <param-name>username</param-name>
               <param-value>张三</param-value>
             </init-param>
          </servlet>
          <servlet-mapping>
             <servlet-name>hello</servlet-name>
             <url-pattern>/conf.jsp</url-pattern>
          </servlet-mapping>
          
    conf.jsp
      <%=config.getInitParameter("username") %>   //张三
     
     以下的三个对象是同一个
      <%=pageContext.getPage() %> 
      <%=page %>
      <%=this %>
     
     获取servlet引擎
     <%=((HttpJspPage)pageContext.getPage()).getServletInfo() %> 
     <%=((HttpJspPage)page).getServletInfo() %>
     <%=this.getServletInfo() %>
     
     //练习: 分别用request,session,application,pageContext四个对象,实现网站点击量计数 
     
     <%
          int rc=0,sc=0,ac=0,pc=0;
           //request:再次请求无法获取历史访问量
           if(request.getAttribute("rc")!=null){
               rc=Integer.parseInt((String)request.getAttribute("rc"));
               rc++;
               out.print("欢迎再次访问");
           }else{
               rc=1; 
               out.print("欢迎");
           }
          request.setAttribute("rc", rc);
           //session:关闭浏览器,访问量会从0开始
          if(session.getAttribute("sc")!=null){
              String s=session.getAttribute("sc").toString();
              sc=Integer.parseInt(s);
               sc++;
               out.print("欢迎再次访问");
          }else{
              sc=1; 
               out.print("欢迎");
          }
          session.setAttribute("sc", sc);
          
          //application:关闭服务,访问量符合要求
         if(application.getAttribute("ac")!=null){
              String s=application.getAttribute("ac").toString();
              ac=Integer.parseInt(s);
               ac++;
               out.print("欢迎再次访问");
         }else{
              ac=1; 
               out.print("欢迎");
         }
         application.setAttribute("ac", ac);
         
         //pageContext:关闭服务,访问量符合要求
            if(pageContext.getAttribute("pc",pageContext.APPLICATION_SCOPE)!=null){
                  String s=pageContext.getAttribute("pc",pageContext.APPLICATION_SCOPE).toString();
                  pc=Integer.parseInt(s);
                   pc++;
                   out.print("欢迎再次访问");
            }else{
                  pc=1; 
                   out.print("欢迎");
            }
            pageContext.setAttribute("pc", pc,pageContext.APPLICATION_SCOPE);

        %>


        <%="request访问量"+rc %><br/>
        <%="session访问量"+sc%><br/>
        <%="application访问量"+ac %><br/>
        <%="pageContext访问量"+pc %><br/>
        
    【结论】统计网站点击量只能用application与pageContext对象
        
2.JSP的四种作用域    
  pageContext      page域    当前页面中            
  request          request域 :当前请求
  session          session域:当前会话,关闭浏览器
  application      context域  当前应用,关闭服务器
  都有属性设置与获取的方法
  setAttribute("name",Object) 保存数据
  getAttribute("name")  获取数据
  
  pageContext重载了以上两个方法
    setAttribute("name",Object,scope)
    getAttribute("name",scope) 
    
3.javabean  组件
  HTML代码与Java代码分离,在jsp中由javabean处理业务
  JSP提供的访问JavaBean 的3个动作元素
    <jsp:useBean>:创建或查找JavaBean实例对象
    <jsp:setProperty>:设置JavaBean对象的属性值
    <jsp:getProperty>:获取JavaBean对象的属性值

     <%
    UserInfo user=new UserInfo();
     user.setUsername("张三");
     user.setPassword("123");
     
     out.print(user.getUsername()+","+user.getPassword());
  
    %> 等价于
  
        <jsp:useBean id="user" class="com.edu.entity.UserInfo"></jsp:useBean>
        <jsp:setProperty property="username" name="user" value="张三"/>
        <jsp:setProperty property="password" name="user" value="123"/> 

        <jsp:getProperty property="username" name="user"/>
        <jsp:getProperty property="password" name="user"/>
    
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值