如何获取由word文档中的url创建的http会话,以便在单击浏览器中的链接时使用

如何获取由word文档中的url创建的http会话,以便在单击浏览器中的链接时使用,http,session,servlets,ms-word,Http,Session,Servlets,Ms Word,我有一个基于servlet的应用程序,它创建了一个会话,并在第一次访问它时存储了一些信息。此信息将在后续页面中使用。如果从msword文档中单击初始url,则该过程会遇到问题。servlet创建一个会话并将响应发送回。响应将显示在新打开的浏览器中。从浏览器内部单击的链接将创建一个新会话。从浏览器中单击的任何后续URL都将重新使用第二个会话 有没有办法强制服务器在第二次请求时识别初始会话 我创建了一个示例servlet,用于检索会话,并将ID与一个新链接一起写入以调用自身 下面是测试servlet

我有一个基于servlet的应用程序,它创建了一个会话,并在第一次访问它时存储了一些信息。此信息将在后续页面中使用。如果从msword文档中单击初始url,则该过程会遇到问题。servlet创建一个会话并将响应发送回。响应将显示在新打开的浏览器中。从浏览器内部单击的链接将创建一个新会话。从浏览器中单击的任何后续URL都将重新使用第二个会话

有没有办法强制服务器在第二次请求时识别初始会话

我创建了一个示例servlet,用于检索会话,并将ID与一个新链接一起写入以调用自身

下面是测试servlet

public class SessionServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {
        StringBuffer sb = new StringBuffer();
        sb.append("<HTML>\r\n<HEAD>\r\n<title>\r\nServlet Session Test\r\n</title>\r\n");
        sb.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
        sb.append("</HEAD>\r\n<BODY>\r\n");

        HttpSession userSession = request.getSession(true);

        if (userSession.isNew()) {
            sb.append("User Session is new\r\n");
        } else {
            sb.append("User Session is old\r\n");
        }
        sb.append("<br>User Session ID = " + userSession.getId() + "<BR>");

        sb.append("URL <a href=\"http://localhost:9080/myTestApp/SessionTest\"> Session Test </a>");
        sb.append("</BODY> </HTML>\r\n");

        response.setContentType("text/html; charset=UTF-8");
        ServletOutputStream sos = response.getOutputStream();
        sos.write(sb.toString().getBytes("UTF-8"));
    }
}
公共类SessionServlet扩展了HttpServlet{
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
StringBuffer sb=新的StringBuffer();
sb.append(“\r\n\r\n\r\n服务器会话测试\r\n\r\n”);
sb.追加(“\r\n”);
sb.追加(“\r\n\r\n”);
HttpSession userSession=request.getSession(true);
if(userSession.isNew()){
sb.append(“用户会话是新的\r\n”);
}否则{
sb.append(“用户会话是旧的\r\n”);
}
sb.append(“
用户会话ID=“+userSession.getId()+”
”; 某人附加(“URL”); sb.追加(“\r\n”); setContentType(“text/html;charset=UTF-8”); ServletOutputStream sos=response.getOutputStream(); sos.write(sb.toString().getBytes(“UTF-8”); } }
安装web调试器或执行捕获,我敢打赌您的JSESSIONID cookie不会在HTTP请求中发送。我在IE中看到了微软Word的链接


我所做的是将代码更改为
request.getSession(false)
,如果返回
null
,则执行
response.sendRedirect
,并在URL后面附加一个额外的querystring参数(例如newSession=true)。当请求带着这个附加参数返回时,执行
request.getSession(true)
。希望这将找到YRU现有的会话,但如果没有,它将创建一个新会话。小心不要将代码放入无限sendRedirect循环中。这是因为当IE发出第二个HTTP请求时,它会发送cookies。

在其他应用程序中单击链接时,行为会有所不同。例如,Acrobat阅读器链接仅创建一个会话,浏览器将继续用于后续页面。