Jsp内置对象

重点:

各个对象的生命周期

各种页面间传值的方式

 

Jsp有九个内置对象,包括:

对象名                         类型                                                 作用域

request                        javax.servlet.ServletRequest            Request

response                      javax.servlet.ServletResponse          Page

pageContext                javax.servlet.jsp.PageContext           Page

session                        javax.servlet.http.HttpSession          Session

application                   javax.servlet.SevletContext                     Application

out                              javax.servlet.jsp.JspWriter               Page

config                          javax.servlet.ServletConfig                     Page

page                            java.lang.Object                               Page

exception                     java.lang.Throwable                          Page

 

***********************************************************************

 

主要的三个对象 

request

主要的方法有:

String getParameter(String name)  多用于值唯一的情况 

Enumeration getParameterNames()

String[] getParameterValues(String name)  多用于值有多个时,比如复选框里的勾选内容

 

Object getAttribute(String name)              用于用户向服务器端发出请求时,传递参数,必须是同一个请求时才有效。可以一次请求多页面传递。

用户的每一个请求都会产生一个request对象。请求结束时,request对象被销毁,也就没有attribute了。当发出下一个请求时,生成了另外一个request对象。

void setAttribute(String name,Object o)

request1.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>My JSP 'request1.jsp' starting page</title>

  </head>

 

  <body>

    <form action="request2.jsp">

    username:

    <input type="text" name="username"/><br>

    <input type="submit" value="submit"/>

    </form>

  </body>

</html>

 

 

Request2.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>My JSP 'request2.jsp' starting page</title>

  </head>

 

  <body>

    <%

    String username = request.getParameter("username");

    request.setAttribute("username",username);

    %>

   

    username: <%=username %>

   

    <jsp:forward page="request3.jsp"></jsp:forward>

  </body>

</html>

 

Request3.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>My JSP 'request3.jsp' starting page</title>

  </head>

 

  <body>

    <%

    String username = (String)request.getAttribute("username");

    %>

    <%=username %>

  </body>

</html>

 


session

       http是无状态的协议

       web server对每一个客户端的请求都没有历史记忆

       session用来保存当前客户端状态信息

主要的方法有:

Object getAttribute(String name)

void setAttribute(String name,Object value)

 

只要当前连接没有关闭,或session没有到期,session里的数据就不丢失(序列化到硬盘的情况除外)

 

session1.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>My JSP 'session1.jsp' starting page</title>

  </head>

 

  <body>

    <form action="session2.jsp">

    username:

    <input type="text" name="username"/><br>

    <input type="submit" value="submit"/>

    </form>

  </body>

</html>

 

Session2.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

 

    <title>My JSP 'session2.jsp' starting page</title>

 

  </head>

 

  <body>

    <%

    String username = request.getParameter("username");

    session.setAttribute("name",username);

    %>

    your name "<%=username %>" is saved in session<br>

    <a href="session3.jsp?name=<%=username %>">check</a>

  </body>

</html>

Session3.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head> 

    <title>My JSP 'session3.jsp' starting page</title>

  </head>

 

  <body>

    <%

    String username = (String)session.getAttribute("name");

    if(username == null)

    {

        out.println("你还没有登录");

    }

    else

    {

        out.println(username + "已经登录");

    }

    %>

  </body>

</html>

执行结果

 

application

Object getAttribute(String name)

void setAttribute(String name,Object object)

 

application.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>My JSP 'application.jsp' starting page</title>

  </head>

 

  <body>

    <%

    int count = 0;

    if(application.getAttribute("count")==null)

    {

        application.setAttribute("count",1);

        count = 1;

    }

    else

    {

        String icount = application.getAttribute("count").toString();

        count = Integer.parseInt(icount);

        count++;

        application.setAttribute("count",count);

     }

    out.println("你是第"+count +"个访问者");

    %>

  </body>

</html>

 

 

存活范围最大的对象,只要服务器没有关闭,application的数据会一直存在,会被所有的用户共享。

 

其他常用的方法

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>

       <title>My JSP 'application2.jsp' starting page</title>

    </head>

    <body>

       <%

           out.println("java servlet API version: <b>"

                  + application.getMajorVersion() + "."

                  + application.getMinorVersion() + "</b><br>");

 

           out.println("URL of 'application2.jsp' is: <b>"

                         + application.getResource("/application2.jsp")

                         + "</b><br>");

 

           out.println("getServerInfo() = <b>" + application.getServerInfo() + "</b><br>");

            

           out.println("<b>" + application.getRealPath(" ") + "</b>");

       %>

    </body>

</html>

 

输出结果为:

java servlet API version: 2.5
URL of 'application2.jsp' is: jndi:/localhost/test/application2.jsp
getServerInfo() = Apache Tomcat/6.0.16
D:\MyEclipse\projects\webtest\WebRoot\

 

 

 

Forward机制

<jsp:forward>

会将用户的请求转发到其他页面,传递的是始终是同一个请求。

在请求期间,可以用request对象传递数据,但是请求结束,数据就会销毁。
myForward.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>My JSP 'myForward.jsp' starting page</title>

  </head>

 

  <body>

     <form action="MyFormServlet">

    username:

    <input type="text" name="username"/><br>

    <input type="submit" value="submit"/>

    </form>

  </body>

</html>

 

 

MyFormServlet.jsp

public class MyFormServlet extends HttpServlet

{

    public void doGet(HttpServletRequest request, HttpServletResponse response)

           throws ServletException, IOException

    {

       String username= request.getParameter("username");

       request.setAttribute("username",username);

      

       List<String> list = new ArrayList<String>();

      

       for(int i=0;i<100;i++)

       {

           list.add(i+"");

       }

      

       request.setAttribute("list",list);

      

       RequestDispatcher rd = request.getRequestDispatcher("myresult.jsp");

       rd.forward(request,response);

    }

}

 

Myresult.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>

       <title>My JSP 'myresult.jsp' starting page</title>

    </head>

    <body>

       username:

       <%=request.getAttribute("username")%>

       <br>

       <%

           List<String> list = (List<String>) request.getAttribute("list");

           for (int i = 0; i < list.size(); i++)

           {

              out.println(list.get(i) + "<br>");

           }

       %>

    </body>

</html>

 

Servlet主要进行流程处理,包括派发请求并增加额外处理等。

jsp主要处理页面显示的问题。

 

************************************************************************

 

Asp.net常用的页面传值的方式:(也是实际开发中常用的方式)

<input type=”hidden”/>

 

Hidden1.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>

       <title>My JSP 'hidden1.jsp' starting page</title>

    </head>

    <body>

       <form action="hidden2.jsp" method="post">

           please input your name:

           <input type="text" name="username" />

           <input type="submit" value="submit" />

       </form>

    </body>

</html>

 

 

Hidden2.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>

       <title>My JSP 'hidden2.jsp' starting page</title>

    </head>

 

    <body>

       <%

           String username = request.getParameter("username");

       %>

       username:

       <%=username%>

 

       <form method="post" action="hidden3.jsp">

           please input your like:

           <input type="text" name="like" />

           <input type="hidden" name="username" value="<%=username%>" />

           <input type="submit" value="submit"/>

       </form>

 

    </body>

</html>

 

 

Hidden3.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>

       <title>My JSP 'hidden3.jsp' starting page</title>

    </head>

 

    <body>

       <%

           String username = request.getParameter("username");

           String like = request.getParameter("like");

       %>

       your name is :

       <%=username%>

       <br/>

       your like is :

       <%=like%>

    </body>

</html>

 

原文地址:https://www.cnblogs.com/zfc2201/p/2143609.html