Ank*_*kur 1 java session jsp servlets
我有几个.jsp页面和几个servlet.
我需要将一些信息保存到会话变量中.在jsp页面中我只是简单地提到
session.get...()
Run Code Online (Sandbox Code Playgroud)
要么
session.set...()
Run Code Online (Sandbox Code Playgroud)
没有明确声明一个HttpSession对象.
但是在servlet中应用适当的编程规则,我必须首先创建一个对象.
我担心的是我是否创建了这样的对象
HttpSession session = new HttpSession();
Run Code Online (Sandbox Code Playgroud)
然后用这样的东西写它
session.setAttribute("files",fileList);
Run Code Online (Sandbox Code Playgroud)
我担心的是我没有写入.jsp文件中引用的同一个会话对象.
我该怎么做才能在任何jsp或servlet中写入同一个对象.
您需要通过调用HttpServletRequest.getSession()方法来获取HttpSession .
HttpServletRequest传入您的doGet()方法.如果此请求尚未建立会话,则getSession()将创建一个.如果会话已经到位并与此请求相关联,则getSession()将检索现有会话.如果使用此标准机制,那么您将自动在JSP和servlet之间共享相同的会话.
您永远不应该尝试直接构造HttpSession,因为它由容器管理.实际上,你不能通过调用新的HttpSesion()来创建一个新的,因为HttpSession只是一个接口,无法实例化.
要预处理数据,请使用Servlet的doGet()方法.
Data data = dataDAO.load();
request.setAttribute("data", data);
request.getRequestDispatcher("page.jsp").forward(request, response);
Run Code Online (Sandbox Code Playgroud)
要访问JSP中的数据,请使用EL(按照此顺序在页面,请求,会话和应用程序范围内搜索具有给定名称的属性).
<br>Plain object: ${data}
<br>A property: ${data.property}
<br>Explicitly search in request scope: ${requestScope.data}
Run Code Online (Sandbox Code Playgroud)
要将数据从JSP发送到servlet,通常使用由客户端控制的请求参数.最常用的HTML表单就是用于此目的.或者,您也可以使用Javascript向服务器端发出异步请求.
任何生活在同一范围内的东西都可以访问某个范围内的任何内容.请求范围从客户端发起请求的那一刻开始(通过单击链接,按钮,书签或在地址栏中输入URL),直到服务器发送响应的最后一位.您通常将请求特定数据存储在那里,如表单数据.会话范围从客户端第一次请求网页的那一刻起生效,并且HttpSession尚未创建,直到HttpSession在未使用一段时间后超时(可在web.xml中配置),或者当代码使用时明确超时HttpSession#invalidate().您通常将用户特定数据存储在那里,例如登录用户和用户首选项等.应用程序范围从服务器启动的那一刻起直到服务器关闭(或重新启动)的那一刻为止.您通常在其中存储应用程序范围的数据,如静态下拉数据,DAO工厂,webapp配置数据等.
Servlet类中的HttpServletRequest参数可以访问该请求.
Servlet类中的HttpServletRequest#getSession()可以访问该会话.
Servlet类中的继承getServletContext()方法可以访问该应用程序.
它们都有get/setAttribute()方法.
要了解有关JSP/Servlet/EL的更多信息,我可以向您推荐Sun Java EE 5教程第II部分第1-8章.
祝好运.
| 归档时间: |
|
| 查看次数: |
9070 次 |
| 最近记录: |