如何调用其他jsp页面的参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何调用其他jsp页面的参数相关的知识,希望对你有一定的参考价值。
我在bijiao .jsp界面设置了一个随机数
int number=(int)(Math.random()*100)+1;
想要在da1.jsp界面调用这个随机数数,用
String C=request.getParameter("number");
int C1=Integer.parseInt(C);
调用可以吗?参数类型有要求吗?
参考如下:
1.简单说 page指当前页面。在一个jsp页面里有效
2.request 指从http请求到服务器处理结束,返回响应的整个过程。在这个过程中使用forward方式跳转多个jsp。在这些页面里你都可以使用这个变量。
3.Session 有效范围当前会话,从浏览器打开到浏览器关闭这个过程。
4.application它的有效范围是整个应用。
作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用
page里的变量没法从index.jsp传递到test.jsp。只要页面跳转了,它们就不见了。
request里的变量可以跨越forward前后的两页。但是只要刷新页面,它们就重新计算了。
session和application里的变量一直在累加,开始还看不出区别,只要关闭浏览器,再次重启浏览器访问这页,session里的变量就重新计算了。
application里的变量一直在累加,除非你重启tomcat,否则它会一直变大。
而作用域规定的是变量的有效期限。
如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。
从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量。
如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。
所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。
如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。
所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量,就可以在当前会话的所有请求里使用。
如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。
整个应用是指从应用启动,到应用结束。我们没有说“从服务器启动,到服务器关闭”,是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。
application作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。
与上述三个不同的是,application里的变量可以被所有用户共用。如果用户甲的操作修改了application中的变量,用户乙访问时得到的是修改后的值。这在其他scope中都是不会发生的,page, request, session都是完全隔离的,无论如何修改都不会影响其他人的数据。
问题:page、request、session、application的作用范围?
书中解答,此处只摘录重要语句:
page:用户请求的当前页面;
Request:用户请求访问的当前组件,以及和当前web组件共享同一用户请求的web组件。如:被请求的jsp页面和该页面用<include>指令包含的页面以及<forward>标记包含的其它jsp页面;
Session:同一个http会话中的web组件共享它;
Application:整个web应用的所用web组件共享它。
此处我举个例子说明
一个网站MyWebSite,其包含7个jsp页面,分别为master.jsp、top.jsp、main.jsp、foot.jsp、login.jsp、success.jsp和news.jsp。master.jsp页面通过<include>指令包含top.jsp、main.jsp、foot.jsp三个页面,当用户通过login.jsp登录成功后,进入success.jsp页面然后通过此页面的<forward>标签跳转到master.jsp页面中。
我们在success.jsp页面中加入如下代码(此处用到jstl标签)
<c:set value="aaa" var="test1" scope=”page” />
<c:set value="aaa" var="test2" scope=”request” />
<c:set value="aaa" var="test3" scope=”session” />
<c:set value="aaa" var="test4" scope=”application” />
<jsp:forward page=”master.jsp”/ >这里一一说明
1.变量 test1 只在success.jsp内有效;
2.变量 test2 在success.jsp、master.jsp、top.jsp、main.jsp、foot.jsp中有效;
3.变量 test3 在7个页面中都有效(包括login.jsp和news.jsp);
4.变量 test4 在整个网站,当前也就是7个页面中都有效(包括login.jsp和news.jsp)。
Test3和test4有效范围一样,有什么区别呢?
其实区别蛮大的,我只说明一点,假如此时又有另一个用户访问master.jsp页面,那么test3相对于这个用户来说就无效,而test4却是有效的。或者当第一个登录的用户关闭浏览器后,再重新访问master.jsp时,test3就无效,而test4却有效。 参考技术A 只要正确的传递就可以了,对于类型没有特殊要求,String C=request.getParameter("number");
int C1=Integer.parseInt(C);这个是完全可行的。bijiao.jsp里传递参数你应该会吧 参考技术B bijiao .jsp 里面跳转的时候写 "da1.jsp?number="+number;
还有,你没有说明两个页面的关系,是跳转关系,还是父子页面,还是完全没有关系。不同的关系不同的方式 参考技术C 两个途径:
1.你的代码所示的方式需要在bijiao.jsp中利用request跳转,并附加上"?number=" + number作为参数;
2.利用session对象存储,即session.setAttribute("number", number);
在da1.jsp中用session.getAttribute("number");取出 参考技术D jsp中<%、%>之间的scriptlet代码是服务端代码,js代码是客户端代码,页面生成时是根据scriptlet代码顺序解析的,scriptlet中无法获取当前某个form中元素的值。
直接用document.form1.text1.value这种代码是非法的。
解决办法可以将页面提交一次,form的action可以设成当前页面,这样提交完成以后又回到当前页面,可以用request.getParameter()方法获取form中元素的值。
如果不想提交整个页面可以用ajax实现。
如何将给定链接的详细信息作为参数发送到另一个 jsp 页面?
【中文标题】如何将给定链接的详细信息作为参数发送到另一个 jsp 页面?【英文标题】:How to send the details of a given link as a parameter to another jsp page? 【发布时间】:2015-03-18 21:47:11 【问题描述】:我正在尝试将 category.jsp 页面中的产品链接到它自己的 product.jsp 页面。当我单击类别页面上的给定产品时,浏览器中的链接完美显示为:http://localhost:8080/ecommerce/product?389
,但问题是:我收到HTTP Status 404 - Not Found error
。我知道这是因为它没有找到该页面,但是在尝试了几种解决方案之后...我似乎无法找到可以产生影响的代码...任何帮助将不胜感激
控制器 Servlet:
package controller;
import cart.ShoppingCart;
import wishlist.Wishlist;
import entity.Category;
import entity.Product;
import java.io.IOException;
import java.util.Collection;
import javax.ejb.EJB;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import session.CategoryFacade;
import session.ProductFacade;
public class ControllerServlet extends HttpServlet
@EJB
private CategoryFacade categoryFacade;
@EJB
private ProductFacade productFacade;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
String userPath = request.getServletPath();
HttpSession session = request.getSession();
Category selectedCategory;
Product selectedProduct;
Collection<Product> categoryProducts;
// if product page is requested
if (userPath.equals("/product"))
// get productId from request
String productId = request.getQueryString();
if (productId != null)
// get selected product
selectedProduct = productFacade.find(Short.parseShort(productId));
// place selected product in session scope
session.setAttribute("selectedProduct", selectedProduct);
这是 category.jsp 中调用产品的代码:
<a href="product?$product.id"><img class="img" src="$initParam.productImagePath$product.name.jpg"></a>
完整的 Category.jsp:
<table style="text-align: left; width: 100%;" border="0" cellpadding="0" cellspacing="0">
<c:forEach var="product" items="$categoryProducts" varStatus="iter">
<td>
<tbody>
<tr>
<td
style="vertical-align: middle; width: 180px; text-align: center; height: 180px;"
class="cell"><a href="product?$product.id"><img class="img" src="$initParam.productImagePath$product.name.jpg"></a><br>
</td>
<td
style="vertical-align: middle; width: 140px; text-align: center;">$product.name<br>
</td>
<td
style="vertical-align: middle; width: 125px; text-align: center;">$
$product.price<br>
</td>
<td
style="vertical-align: middle; width: 125px; text-align: center;">
<form action="addToWishlist" method="post"><br><br> <input
name="productId" value="$product.id" type="hidden">
<input class="submit" value="<fmt:message key='AddToWishlist'/>" type="submit"> </form>
<br>
</td>
<td
style="vertical-align: middle; width: 123px; text-align: center;">
<form action="addToCart" method="post"><br><br>
<input name="productId"
value="$product.id" type="hidden"> <input class="submit" value="<fmt:message key='AddToCart'/>"
type="submit">
</form>
<br>
</td>
</tr>
</tbody>
</c:forEach>
</table>
这是 Product.jsp(目标页面):
<table style="text-align: left; width: 100%; height: 172px;" border="0"
cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td colspan="1" rowspan="6" style="vertical-align: top;">product_gallery<br>
</td>
<td colspan="1" rowspan="6" style="vertical-align: top;"><img class="img" src="$initParam.productBigImagePath$product.name.jpg"><br>
</td>
<td style="vertical-align: top;">$selectedProduct.name<br>
</td>
<td style="vertical-align: top;"><br>
</td>
</tr>
<tr>
<td style="vertical-align: top;">$ $selectedProduct.price</td>
<td style="vertical-align: top;"><br>
</td>
</tr>
<tr>
<td style="vertical-align: top;"><br>
</td>
<td style="vertical-align: top;"><br>
</td>
</tr>
<tr>
<td style="vertical-align: top;"><br>
</td>
<td style="vertical-align: top;"><br>
</td>
</tr>
<tr>
<td colspan="2" rowspan="1" style="vertical-align: top;">$selectedProduct.description</td>
</tr>
<tr>
<td style="vertical-align: top;"><form action="addToWishlist" method="post"><br><br> <input
name="productId" value="$product.id" type="hidden">
<input class="submit" value="<fmt:message key='AddToWishlist'/>" type="submit"> </form><br>
</td>
<td style="vertical-align: top;"><form action="addToCart" method="post"><br><br>
<input name="productId"
value="$product.id" type="hidden"> <input class="submit" value="<fmt:message key='AddToCart'/>"
type="submit">
</form></td>
</tr>
<tr>
<td style="vertical-align: top;"><br>
</td>
<td style="vertical-align: top;"><br>
</td>
<td colspan="2" rowspan="1" style="vertical-align: top;"><ul><li style="background-color: rgb(198, 255, 201); width:100%; text-align:center; border-radius:2em;"><a href="$value"><fmt:message key='ContinueShopping'/></a></li>
</ul><br>
</td>
</tr>
</tbody>
</table>
【问题讨论】:
【参考方案1】:自己解决了这个问题。我忘记在web.xml中添加参数了:
<servlet-mapping>
<servlet-name>ControllerServlet</servlet-name>
<url-pattern>/product</url-pattern>
</servlet-mapping>
【讨论】:
以上是关于如何调用其他jsp页面的参数的主要内容,如果未能解决你的问题,请参考以下文章