如何调用其他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);
调用可以吗?参数类型有要求吗?

可以,你只要跳转到da1.jsp就行了
参考如下:
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页面的参数的主要内容,如果未能解决你的问题,请参考以下文章

jsp页面跳转后,如何获取前面一个页面的一个参数值

,在js里面如何让整个jsp页面灰化不可操作,

jsp页面如何获得后台用ModelMap保存的的对象?

Asp.Net其他页面如何调用Web用户控件写的分页

两个jsp页面如何传值

在jsp页面中如何获取另一个jsp页面提交的信息