重点:
各个对象的生命周期
各种页面间传值的方式
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 |
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> |