我是新来的,但是这些页面多次阅读。我有一个复杂的问题,我不是英语,所以请原谅我,如果我不能理解的话。
我将一个portlet写入旧的Oracle Portal 10g服务器。在portlet中,javascript函数使用ajax将一些数据发布到servlet。
我想在调用servlet时识别用户。我能从portlet会话传递一些东西吗?就像在portlet中一样,有一个PortletRenderRequest,我可以获得该用户的用户名和权限。
我的理论portlet功能简而言之:它是一个表单,如果有人填写它,并将数据与javascript ajax发送到servlet,我想检查一下,发件人有权将数据插入数据库(以及她/她是什么名称)。现在它工作,portlet获取用户数据并写入输入隐藏元素值,javascript读取它,并发送邮件,但这很容易被破解,并且可怕的解决方案。
现在理论上它看起来像这样:
portlet.jsp:
<%
PortletRenderRequest pReq = (PortletRenderRequest)request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST);
String userNev = pReq.getUser().getName();
session.setAttribute("username",userNev);
System.out.println("session ID in JSP: "+session.getId());
%>
<button class="btn" type="button">Upload data</button>
<script type="text/javascript">
$(function() {
$(".btn").click(function(){
/*.....*/
$.post( "/demo/servlet", poststring);
});
});
</script>
的servlet:
public class servlet extends HttpServlet {
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
HttpSession session = (request.getSession());
System.out.println("Session ID in servlet: "+session.getId());
/*....*/
}
}
目前它正在JDeveloper 10.1.3.5中运行
每次页面刷新都会在JSP&#34;中显示不同的会话ID。在控制台中,但是&#34; servlet中的会话ID&#34;不改变,所以它必须是正确的
所以现在唯一的任务就是将数据放在正确的HttpSession中,我只需要在jsp页面中以某种方式访问。
jsp页面上的 HttpSession Session = request.getSession(); 会给出错误的会话(更改每次刷新)。
修改
毕竟@Jonathan回答了这个问题。它引出了另外一个问题,比如如何在jsp页面上获取HttpSession?
我发现,jsp页面上的session = HttpSession = ProviderSession ,与servlet中的HttpSession不相同。
(如果我将提供商注册页面上的登录频率设置为&#34;始终&#34;,jsp页面上的ProviderSession没有随页面刷新而改变)
我真的不知道ProviderSession和HttpSession之间的区别,以及如何从一个访问到另一个。如果我可以从servlet访问ProviderSession,那么从使用点来看它是一样的吗?
答案 0 :(得分:0)
Applicationlet和Portlet容器中都存在应用程序会话。它 是共享数据的方式之一(原始的Portlet 通信)从渲染阶段到行动阶段(或任何更低阶段) 阶段)在portlet容器中。 what is the difference between a portlet and a servlet?
因此,当用户登录您的应用程序时,您将设置一个会话变量,在此示例中为&#34; loggedInUser&#34;。 然后在servlet中,在执行任何数据库请求之前,检查会话变量是否为空。像这样:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = (request.getSession());
//check if there is a loggedInUser session variable
if(null == session.getAttribute("loggedInUser")){
request.setAttribute("pleaselogin", "Not Logged In. Login or register to do this.");
RequestDispatcher rd=request.getRequestDispatcher("Error.html");
rd.forward(request,response);
}else{
String username = (String) session.getAttribute("loggedInUser");
//do database logic
}
}