随笔 - 100  文章 - 50  trackbacks - 0
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(3)

随笔分类

随笔档案

文章分类

文章档案

收藏夹

我收藏的一些文章!

搜索

  •  

最新评论

阅读排行榜

评论排行榜

request之请求转发
a0.jsp
<%
@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>
请求参数输入页面
</title>
</head>
<body bgcolor="#ffffff">
<h1>
请求参数输入页面
</h1>
<form action="a1.jsp" method="POST">
  
<table border="1">
    
<tr>
      
<td>用户名:</td>
      
<td><input  type="text" name="name"/></td>
    
</tr>
    
<tr>
      
<td>性别:</td>
      
<td>
        
<input  type="radio" name="sex" value="男"/>
        
<input  type="radio" name="sex" value="女"/>
      
</td>
    
</tr>
    
<tr>
      
<td>兴趣爱好:</td>
      
<td>
        
<input  type="checkbox" name="interest" value="上网"/>上网
        
<input  type="checkbox" name="interest" value="旅游"/>旅游
        
<input  type="checkbox" name="interest" value="阅读"/>阅读
      
</td>
    
</tr>
  
</table>
  
<input  type="submit" name="submit" value="提交"/>
</form>
</body>
</html>
a1.jsp的code如下:
<%@ page contentType="text/html; charset=GBK"%>
<html>
<head>
<title>接收请求参数</title>
</head>
<body bgcolor="#ffffff">
<h1>接收客户端请求数据</h1>
<%
    request.setCharacterEncoding(
"GBK");
    
String name = request.getParameter("name");
    
String sex = request.getParameter("sex");
    
String[] interest = request.getParameterValues("interest");
%>
<table border="1">
    
<tr>
        
<td>用户名:</td>
        
<td><%=name%></td>
    
</tr>
    
<tr>
        
<td>性别:</td>
        
<td><%=sex%></td>
    
</tr>
    
<tr>
        
<td>兴趣爱好:</td>
        
<td>
        
<%
                
for (int i = 0; i < interest.length; i++) {
                out.print(interest[i]);
                out.print(
",");
            }
        
%>
        
</td>
    
</tr>
</table>
<%
    RequestDispatcher rd
=request.getRequestDispatcher("ra3.jsp");
    rd.forward(request,response);
%>
</body>
</html>
a2.jsp的code如下:
<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>
dispatcher转发结果显示页面
</title>
</head>
<body bgcolor="#ffffff">
<h1>
dispatcher转发结果显示页面
</h1>
name参数的值是:
<%=request.getParameter("name")%>
</body>
</html>

JSP页面跳转与请求转发收藏

1、response.sendRedirect(url)

是指请求重定向,原来页面的参数在这里是得不到的,即用request.getParameter("param")返回的是null

2、forward请求转发,指将原页面的request,response对象传入新的页面,因此这新旧页面拥有相同的 request,response对象。这样request.getParameter("param")就可以得到相应的值

3、区分ServletContext.getRequestDispatcher与 ServletRequest.getRequestDispatcher

ServletContext.getRequestDispatcher 路径必须是相对上下文的绝对路径

ServletRequest.getRequestDispatcher 可以是相对也可以是绝对

4、注意的一点是:使用forward转发后在浏览器上看到的地址栏显示的是转发前的还不是转发后的。如由test.jsp向good.jsp转发了,那么地址栏显示的是test.jsp.这是因为forward是在服务器端进行的,浏览器根本不知道,而重定向是在客户端进行的,所以使用response.sentRedirect("red.jsp")会直接定向到red.jsp。由此想到index.jsp如果请求的是servlet那么在servlet中进行forawrd转发到另一个red.jsp页面,但当查看结果时,在地址栏显示的将只是servlet的名称而不是red.jsp,如果你想知道最终看到的页面的名称那只有查代码了。

reference it:

服务器端进行转向的4种方法:

1. ServletContext的getRequestDispatcher()

2. ServletContext的getNamedDispatcher()

3. ServletRequest的getRequestDispatcher()

4. ServletResponse的sendRedirect()进行转向。

1.2.3 => forward() 4. sendRedirect()

使用forward方法,因为这些这样比较高效。只有在forward方法不能使用时(比如要转向到一个非本web应用),再使用ServletResponse的sendRedirect()方法。

<jsp:fordward>与 sendRedirect 方法的比较

虽然 <jsp:fordward>与 sendRedirect 方法,都可以将浏览器浏览的网页,重导至另一个网页,但是两者在原理上是不太相同。

a. <jsp:fordward> : 动作是利用伺服端,将资料输出至缓冲区的机制,在前一个网页尚未输出到客户端前,取消资料的输出,然后输出另一个网页的资料,达到重导浏览器的效果。

优点: 两网页间可以分享 request 对象内的变量。

b. sendRedirect : 动作是透过 HTTP 协议的 Header , 对浏览器下达重导指令,因此,不牵涉到服务器端缓冲区的问题。

不过由于 sendRedirect 方法作用于客户端,所以重导前后网页无法分享存在于 request 对象内的变量。
Solution: response.sendRedirect(“sendRedirect.htm?name=sparkwu&E-Mail=spark.wu@cobra-tech.com”)


posted on 2009-08-09 22:39 fly 阅读(771) 评论(0)  编辑  收藏 所属分类: jsp学习

只有注册用户登录后才能发表评论。


网站导航: