如何在jsp页面和servlet之间共享数据

wmomyfyw  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(396)

我有几个.jsp页面和几个servlet。
我需要将一些信息保存到会话变量中。在jsp页面中,我只是指

session.get...()

或者

session.set...()

没有显式声明httpsession对象。
但是在servlet中应用了正确的编程规则,我必须首先创建一个对象。
我关心的是如果我创建一个这样的对象

HttpSession session = new HttpSession();

然后用这样的东西写下来

session.setAttribute("files",fileList);

我担心的是,我没有写入与.jsp文件中引用的会话对象相同的对象。
我该怎么做才能在任何jsp或servlet中写入同一个对象。

s71maibg

s71maibg1#

要预处理数据,请使用servlet的doget()方法。

Data data = dataDAO.load();
request.setAttribute("data", data);
request.getRequestDispatcher("page.jsp").forward(request, response);

要访问jsp中的数据,请使用el(它按此顺序在页面、请求、会话和应用程序范围中搜索具有给定名称的属性)。

<br>Plain object: ${data}
<br>A property: ${data.property}
<br>Explicitly search in request scope: ${requestScope.data}

为了将数据从jsp发送到servlet,您通常使用由客户端控制的请求参数。最常用的html表单就是用于此目的的。或者,您也可以使用javascript向服务器端发出异步请求。
某个范围内的任何内容都可以访问同一范围内的任何内容。请求范围从客户端启动请求(通过单击链接、按钮、书签或在地址栏中输入url)的那一刻起,一直持续到服务器发送响应的最后一位。您通常将请求特定的数据存储在其中,就像表单数据一样。会话作用域从客户端第一次请求网页并且httpsession尚未创建的那一刻起,一直存在到httpsession在web.xml中可配置的一段时间内未使用后超时,或者代码使用web.xml显式超时为止 HttpSession#invalidate() . 您通常将特定于用户的数据存储在其中,比如登录的用户和用户首选项等。应用程序作用域从服务器启动到服务器关闭(或重新启动)都有效。您通常在其中存储应用程序范围的数据,比如静态下拉数据、dao工厂、webapp配置数据等等。
servlet类中的httpservletrequest参数可以访问该请求。
该会话可由servlet类中的httpservletrequest#getsession()访问。
通过servlet类中继承的getservletcontext()方法可以访问该应用程序。
它们都有一个get/setattribute()方法。
为了进一步了解jsp/servlet/el,我可以向您推荐sunjavaee5教程第二部分第1-8章。
祝你好运。

beq87vna

beq87vna2#

您需要通过调用httpservletrequest.getsession()方法来获取httpsession。
httpservletrequest被传递到doget()方法。如果没有此请求的会话,则getsession()将创建一个会话。如果会话已经就位并与此请求关联,则getsession()将检索现有会话。如果您使用这个标准机制,那么您将自动在jsp和servlet之间共享同一个会话。
您不应该试图直接构造httpsession,因为它是由容器管理的。实际上,您不能通过调用new httpsession()来创建新的httpsession,因为httpsession只是一个接口,不能示例化。

相关问题