最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Servlet介绍(7)-----HttpServletRequest、HttpSession、Se
时间:2008-04-28 编辑:简简单单 来源:一聚教程网
Servlet中的几个对象:
HttpServletRequest、HttpSession、ServletContext,这三个对象都有
void setAttribute(String name, Object o)和void removeAttribute(String name)
这两个方法,通过这两个方法我们可以很方便的进行参数的传递。
三个对象的作用域的大小分别由小到大。当我们把一个对象通过void setAttribute(String name, Object o)添加到这三个对象中的时候,除非我们显示的调用void removeAttribute(String name)或者当这三个对象自己销毁否则不会释放这些对象占用的空间,所以我们在将一个对象通过setAttribute添加到这三个对象时,需要注意用完了就remove掉(当然用完以后这个添加到的对象本身就快销毁时,我们也没必要多此一举)。而且尽量当对象存放在HttpServletRequest,然后才是HttpSession最后才是ServletContext。尽量不要把大对象存放在这些对象中,因为一个进程占用的资源毕竟是有限的。
Servlet中路径跳转的问题:
让我们先通过一个例子来看一下HttpServletRequest的获取路径的一些方法的返回值。
ServletPath:
package squall.servlet.path;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletPath extends HttpServlet
...{
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
...{
showParam(req,resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
...{
showParam(req,resp);
}
private void showParam(HttpServletRequest req, HttpServletResponse resp) throws IOException
...{
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
String docType = " ";
out.println(docType + " " + "
+ " " + " "
+"getContextPath(): " + req.getContextPath() + " "
+"getPathInfo(): " + req.getPathInfo() + " "
+"getRequestURI(): " + req.getRequestURI()+ " "
+"getRequestURL(): " + req.getRequestURL()+ " "
+"getServletPath(): " + req.getServletPath()+ " "
+"getQueryString(): " + req.getQueryString()+ " "
);
out.println("");
}
}
将此Servlet部署后,mapping至
在浏览器输入http://127.0.0.1:8080/train/ServletPath/a/b/c?name=1&passord=2
可以看到如下输出:
getContextPath(): /train
getPathInfo(): /a/b/c
getRequestURI(): /train/ServletPath/a/b/c
getRequestURL(): http://127.0.0.1:8080/train/ServletPath/a/b/c
getServletPath(): /ServletPath
getQueryString(): name=1&passord=2
我们可以很清楚的看到各个方法的返回值的情况。
一个html,Servlet,jsp访问另外一个Servlet时候可以通过相对路径(相对于当前的路径),相对于同一Web应用下的路径(比如我们的/train,通过request.getContextPath()获得)和绝对路径(直接http://...)。
我们一般在Servlet中访问另外一个Servlet或者jsp可以通过Servlet输出中的HTML元素FORM的属性值ACTION来实现。但是我们有时候可以采用一些更加方便的方法。
下面简单的介绍3个方法:
RequestDispatcher的
void forward(ServletRequest request, ServletResponse response)和
void include(ServletRequest request, ServletResponse response)方法。
和
HttpResponse的void sendRedirect(String location)方法。
我们先来介绍HttpResponse的void sendRedirect(String location)方法。
这个方法将请求一个url为location的页面, location可以是一个相对路径、相对于当前WEB应用的路径或者直接Http开头的路径,下面让我们看一个例子吧。
BeforeSendRedirect:
package squall.servlet.path;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BeforeSendRedirect extends HttpServlet
...{
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
...{
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
String docType = " ";
req.setAttribute("canyousee", "this");
out.println(docType + " " + "
+ " " + " "
+"
BeforeSendRedirect
");
out.println("");
resp.sendRedirect("AfterSendRedirect");
System.err.println("canyousee " + req.getAttribute("canyousee") + " in BeforeSendRedirect");
System.err.println("end in BeforeSendRedirect");
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
...{
doGet(req,resp);
}
}
AfterSendRedirect:
package squall.servlet.path;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AfterSendRedirect extends HttpServlet
...{
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
...{
System.err.println("begin AfterSendRedirect!");
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
String docType = " ";
out.println(docType + " " + "
+ " " + " "
+ "
AfterSendRedirect
");out.println("");
System.err.println("canyousee " + req.getAttribute("canyousee") + " in AfterSendRedirect");
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
...{
doGet(req, resp);
}
}
将BeforeSendRedirect mapping至
将BeforeSendRedirect mapping至
然后我们访问http://127.0.0.1:8080/train/BeforeSendRedirect ,可以看到页面跳转到http://127.0.0.1:8080/train/AfterSendRedirect,并且页面上显示的内容也是
AfterSendRedirect
并且tomcat控制台输出为:
canyousee this in BeforeSendRedirect
上一个: JNDI 笔记(一) 概述
下一个: java 进入之后就死掉的原因
热门栏目
-
php教程
php入门 php安全 php安装 php常用代码 php高级应用 -
asp.net教程
基础入门 .Net开发 C语言 VB.Net语言 WebService -
手机开发
安卓教程 ios7教程 Windows Phone Windows Mobile 手机常见问题 -
css教程
CSS入门 常用代码 经典案例 样式布局 高级应用 -
网页制作
设计基础 Dreamweaver Frontpage js教程 XNL/XSLT -
办公数码
word excel powerpoint 金山WPS 电脑新手 -
jsp教程
Application与Applet J2EE/EJB/服务器 J2ME开发 Java基础 Java技巧及代码