jsp内置九大对象

来源:互联网 发布:数据库笛卡尔积运算 编辑:程序博客网 时间:2024/06/12 22:01

Java 内置对象

Java  作用域

解析:jsp内置对象web容器创建的一组对象。我们都知道tomcat这款软件可以看成是一种web容器,所以我们可以知道所谓的内置对象都是tomcat创建的。使用内置对象无需使用new关键字,直接使用即可。也就意味着只要你敢启动tomcat,在内存中已经驻留了N多内置对象。

01.什么是内置对象?

解析:就是web容器创建一组对象,这组对象在tomcat服务器启动的时候加载到内存,可以被用户直接使用。

 

Jsp中九大内置对象

 请求对象:request

输出对象:out

响应对象:response

应用程序对象:application

会话对象:session

页面上下文对象:pageContext

页面对象:page

配置对象:config

异常对象:exception





使用request登录


<form action="reisger.jsp" method="post">
    用户名:<input type="text" name="txtName" value="<%=request.getAttribute("name")%>"/>
    密码:<input type="text" name="txtPwd"/> 
    <input type="submit"  value="提交"/>
    </from>



<body>
   <%
   request.setCharacterEncoding("utf-8");                                                     使用post时解决乱码问题
   String tempname=request.getParameter("txtName");
   //String name=new String(tempname.getBytes("iso-8859-1"),"utf-8");        使用get时解决乱码问题
   String pwd=request.getParameter("txtPwd");
   if(tempname.equals("中文")&&pwd.equals("1")){
  request.setAttribute("name", tempname);
  request.getRequestDispatcher("index.jsp").forward(request,response);
   }else{
  request.setAttribute("name", tempname);
  request.getRequestDispatcher("1.jsp").forward(request, response);
   }
   %>
  </body>


<body>
 <%=request.getAttribute("name") %>欢迎你
  </body>


重定向和转发的区别

 01.从客户端发送的请求数量来看,重定向是向服务器发送了两次请求。转发是服务器内部进的操作,只发送了一次请求request对象中的数据可以保留 。

  02.URL显示的角度来说:重定向这两次请求都是直接受浏览器干预的。也就是说重定向后url地址栏里看到的地址发生变化了。而转发是由服务器内部从一个资源页面定位到另一个资源页面,并没有经过浏览器干预,所以url地址栏没有发生改变。

结论:要想在request中保存数据,那么就使用转发,否则使用重定向。


不同:

重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL,而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重定向后,request内的对象将无法使用。
          怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择重定向

转发和重定向的区别
不要仅仅为了把变量传到下一个页面而使用session作用域,那会无故增大变量的作用域,转发也许可以帮助你解决这个问题。
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。

重定向过程:

        客户浏览器发送http请求----

        web服务器接受后发送302响应要求客户浏览器发送一个新的http请求----

        客户端浏览器接受此响应后发送一个新的http请求到服务器----

        服务器根据此请求寻找资源并发送给客户,

        它可以重定向到任意URL

        不能共享request范围内的数据。

    转发过程:

        客户浏览器发送http请求----

        web服务器接受此请求后调用内部的一个方法在容器内部完成请求处理和转发动作----

        将目标资源发送给客户,它只能在同一个web应用中使用,可以共享request范围内的数据。


session 对象

session作用域中写入数据

session.setAttribute("username","张三");

设置session的失效时间

session.setMaxInactiveInterval(60*30);

   获取sessionId

   <%=session.getId()%>

Session对象的失效

session.removeAttribute()适用于清空指定的属性   
session.invalidate()是清除当前session的所有相关信息



Include指令


 jsp中有两种包含静态包含<%@include file="xxx.jsp"%>和动态包含<jsp:include page="xxx.jsp">,下面说一下它们之间的区别 
1、<%@include file="xxx.jsp"%>为jsp中的编译指令,其文件的包含是发生在jsp向servlet转换的时期,而<jsp:include page="xxx.jsp">是jsp中的动作指令,其文件的包含是发生在编译时期,也就是将java文件编译为class文件的时期 


2、使用静态包含只会产生一个class文件,而使用动态包含会产生多个class文件 


3、使用静态包含,包含页面和被包含页面的request对象为同一对象,因为静态包含只是将被包含的页面的内容复制到包含的页面中去;而动态包含包含页面和被包含页面不是同一个页面





0 0
原创粉丝点击