Servlet和JSP之间的参数传递

本文详细介绍了在Servlet中如何实现URL重定向与转发。解释了HttpServletResponse的sendRedirect方法如何工作,以及RequestDispatcher如何提供一种更高效的方式进行页面跳转。此外,还探讨了在JSP与Servlet间如何传递参数。
一.HttpServletResponse 与 RequestDispatcher

HttpServletResponse.sendRedirect(Sting url) Servlet 向该方法传递一个URL参数,以便客户端转发到另外一个URL,改方法设置了HTTP响应代码TEMPORARY_REDIRECT,而且还包含目标URL,客户端向指示的URL发送另一个HTTP请求,并得到响应。 代码示例

   public void service(HttpServletRequest req,HttpServletResponse rep) throws Exception{
rep.sendRedirect("http://http://tristan-wang.iteye.com/")
}



上面的方法称之为URL重定向,可以看出它要求客户端发送两个完整的HTTP请求,所以这种方法不是搞笑的,并且在下面可以看出,这种方法对参数的传递还有一定的限制。
如果重定向的目标在同一个Server示例内,那么 RequestDispatcher会提供更好的解决方案。它使用的机制对客户端是完全透明的,并且只需要一个HTTP请求。
有三种构造方法:
1.RequestDispatcher rd = request.getRequstDispatcher(Sting URL);
2.RequestDispatcher rd = ServletContext.getRequstDispatcher(Sting URL);
3.RequestDispatcher rd = ServletContext.getNamedDispatcher(Sting URL);
具体区别有待于研究
方法一的用法:
request.setAttribute("photoList",photoList);
.....
RequestDispatcher rd=request.getRequestDispatcher("/front/FrontIndex.jsp");
rd.forward(request,response);

二.JSP和Servlet之间的参数传递
1.JSP到SERVLET
可以使用隐藏表单域的方法:
jSP: <form type="hidden" name="" value="">
servlet: String ps=request.getParameter("");
String[] ps = request.getParameterValues("");
2.servlet传递参数给JSP
方法1. 可以使用request.setAttribute("name","value")来传递参数,使用request.getAttribute("name","value")来接受参数,但是此方式只能使用于跳转,而不适用于重定向
方法2. session会话:实质上就是一片内存空间,而这个空间不在你自已的电脑上,她在服务器上,所以你只要把你想要共享的数据放到这个空间里去就可以达到共享数据的目的.
发送端:
HttpSession session=request.getSession();
session.setAttribute("artTypeList",artTypeList);

接收端:
ArrayList typelist=(ArrayList)session.getAttribute("artTypeList");

方法3:cookie
ServletJSP之间传递数据的方法有以下几种: - **通过请求转发(request域对象)**:在Servlet中可以使用`request.setAttribute()`方法将数据存储到`request`对象中,然后通过`request.getRequestDispatcher().forward()`方法将请求转发到JSP页面,在JSP页面中可以使用`request.getAttribute()`方法获取数据,也可以使用EL表达式获取数据。示例代码如下: ```java // Servlet代码 request.setAttribute("message", "Hello from Servlet!"); request.getRequestDispatcher("example.jsp").forward(request, response); ``` ```jsp <!-- JSP代码 --> <%= request.getAttribute("message") %> ${message} ``` - **通过session域对象(条件是同一个cookie)**:在Servlet中可以使用`request.getSession().setAttribute()`方法将数据存储到`session`对象中,在JSP页面中可以使用`request.getSession().getAttribute()`方法获取数据,也可以使用EL表达式获取数据。示例代码如下: ```java // Servlet代码 request.getSession().setAttribute("user", "John"); response.sendRedirect("example.jsp"); ``` ```jsp <!-- JSP代码 --> <%= request.getSession().getAttribute("user") %> ${sessionScope.user} ``` - **通过ServletContext域对象**:在Servlet中可以使用`getServletContext().setAttribute()`方法将数据存储到`ServletContext`对象中,在JSP页面中可以使用`application.getAttribute()`方法获取数据,也可以使用EL表达式获取数据。示例代码如下: ```java // Servlet代码 getServletContext().setAttribute("appName", "MyApp"); ``` ```jsp <!-- JSP代码 --> <%= application.getAttribute("appName") %> ${applicationScope.appName} ``` - **重定向,在servlet的重定向语句后面填参数**:在Servlet中可以使用`response.sendRedirect()`方法进行重定向,并在URL后面添加参数,在JSP页面中可以使用`request.getParameter()`方法获取数据。示例代码如下: ```java // Servlet代码 response.sendRedirect("example.jsp?status=success"); ``` ```jsp <!-- JSP代码 --> <%= request.getParameter("status") %> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值