jsp的Session 和Servlet的Session有什么区别?
jsp的Session和Servlet的Session有何区别?是同一个Session吗?如果认为没区别的,请不要回答!因为我也曾这样认为,不过被老师否定了!查阅了很多资...
jsp的Session 和Servlet的Session有何区别? 是同一个Session吗? 如果认为没区别的,请不要回答!因为我也曾这样认为,不过被老师否定了!查阅了很多资料,无果! 便来寻之~
展开
5个回答
推荐于2017-12-16 · 知道合伙人软件行家
关注
展开全部
jsp的Session和Servlet的Session本质上是一致的,区别是:jsp中session是作为隐式对象存在的,可以直接使用;Servlet中的session需要手动提取后才能使用.
HttpSession是Java平台对session机制的实现规范,因为它仅仅是个接口,具体到每个web应用服务器的提供商,除了对规范支持之外,仍然会有一些规范里没有规定的细微差异。
1、session机制
http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,而且服务器也不会自动维护客户的上下文信息,session就是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器端,通过SessionID来区分不同的客户,session是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为JSESSIONID的输出返回给客户端Cookie保存。
2、jsp和Servlet的关系
jsp是servlet的一种简化,jsp是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑
HttpSession是Java平台对session机制的实现规范,因为它仅仅是个接口,具体到每个web应用服务器的提供商,除了对规范支持之外,仍然会有一些规范里没有规定的细微差异。
1、session机制
http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,而且服务器也不会自动维护客户的上下文信息,session就是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器端,通过SessionID来区分不同的客户,session是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为JSESSIONID的输出返回给客户端Cookie保存。
2、jsp和Servlet的关系
jsp是servlet的一种简化,jsp是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑
2013-06-16
展开全部
jsp中的session是一个可以理解为会话级的存储变量,是web间信息互访的载体
HttpSession接口提供了存储和返回标准会话属性的方法。标准会话属性如会话标识符、应用数据等,都以“名字-值”对的形式保存在服务器端。也就是说,HttpSession接口提供了一种把对象保存到内存、在同一用户的后继请求中提取这些对象的标准办法。在会话中保存数据的方法是setAttribute(String s, Object o),从会话提取原来所保存对象的方法是getAttribute(String s)。
在服务器端,每当新用户请求一个使用了HttpSession对象的JSP页面,Servlet/JSP容器除了发回应答页面之外,它还要向浏览器发送一个特殊的数字。这个特殊的数字称为“会话标识符”,它是一个唯一的用户标识符。此后,HttpSession对象就驻留在内存之中(这当然是在服务器端),等待同一用户返回时再次调用它的方法。
在客户端,浏览器保存会话标识符,并在每一个后继请求中把这个会话标识符发送给服务器。会话标识符告诉JSP容器当前请求不是用户发出的第一个请求,服务器以前已经为该用户创建了HttpSession对象。此时,JSP容器不再为用户创建新的HttpSession对象,而是寻找具有相同会话标识符的HttpSession对象,然后建立该HttpSession对象和当前请求的关联。
会话标识符以Cookie的形式在服务器和浏览器之间传送,标准会话属性在服务器端也是以会话的形式存在的,并且这个Cookie的生命周期只是临时的,即会话结束后就自动消失,没有为它指定固定的生命周期,因此有人说session是基于Cookie的技术。另外,如果客户端不支持Cookie,运用url重写机制来保证会话标识符传回服务器。
还有一点,session不像Cookie那样拥有路径访问的问题。session对应的是窗口,只要是同一个客户端或者是存在父子关系的多个客户端,同一个application下的servlet/JSP可以共享同一个session。当然,session和窗口的对应关系也是受时间限制的,至于多长时间,可以在服务器的conf/web.xml中配置<session-config><session- timeout>30</session-timeout></session-config>
实例代码:
1.设置session 和 显示session
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out=resp.getWriter();
//String title="Session Tracking Example";
HttpSession session=req.getSession(true);//如果没有该session,则自动创建一个新的
String heading;
Integer accessCount=(Integer)session.getAttribute("accessCount");
if(accessCount==null){
accessCount=new Integer(0);
heading="Welcome, NewComer!";
}else{
accessCount=new Integer(accessCount.intValue()+1);
heading="Welcome,back!";
}
session.setAttribute("accessCount", accessCount);
out.println("<html><head><title>Session追踪</title></head>"
+"<body bgcolor=\"#FDF5E6\">\n"
+"<h1 align=\"center\">"
+heading+"</h1>\n"
+"<h2>Information On Your Session: </h2>\n"
+"<table border=1 align=\"center\">\n"
+"<tr>\n"+" <td>id\n"+"<td>"+session.getId()+"\n"
+"<tr>\n"+" <td>CreatTime\n"+"<td>"
+new Date(session.getCreationTime())+"\n"
+"<tr>\n"+" <td>Time Of Last Access\n"+"<td>"
+new Date(session.getLastAccessedTime())+"\n"
+"<tr>\n"+" <td>Number Of Prious Access\n"+"<td>"
+accessCount+"\n"+"</table>\n"+"</body></html>");
}
2.URL重写
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out=resp.getWriter();
HttpSession session=req.getSession(true);
out.println("<html><head><title>Session追踪</title></head>"
+"<body>\n"
+"Session ID: "+session.getId()+"<br>"
+"from URL? : "+req.isRequestedSessionIdFromURL()+"<br>"
+"from Cookie? : "+req.isRequestedSessionIdFromCookie()+"<br>"
+"<a href="+resp.encodeURL(req.getRequestURL().toString())+">test</a& gt;<br>"//重写URL:encodeURL(),如果浏览器的cookie没有禁掉,则这句话没有对 req.getRequestURL().toString()作任何处理,还是保持这个字符串的原样;如果cookie被禁掉了,则在字符串的后面加上一字符串";"+session ID
+"<a href="+req.getRequestURL().toString()+">test</a>"
+"</body></html>");
}
HttpSession接口提供了存储和返回标准会话属性的方法。标准会话属性如会话标识符、应用数据等,都以“名字-值”对的形式保存在服务器端。也就是说,HttpSession接口提供了一种把对象保存到内存、在同一用户的后继请求中提取这些对象的标准办法。在会话中保存数据的方法是setAttribute(String s, Object o),从会话提取原来所保存对象的方法是getAttribute(String s)。
在服务器端,每当新用户请求一个使用了HttpSession对象的JSP页面,Servlet/JSP容器除了发回应答页面之外,它还要向浏览器发送一个特殊的数字。这个特殊的数字称为“会话标识符”,它是一个唯一的用户标识符。此后,HttpSession对象就驻留在内存之中(这当然是在服务器端),等待同一用户返回时再次调用它的方法。
在客户端,浏览器保存会话标识符,并在每一个后继请求中把这个会话标识符发送给服务器。会话标识符告诉JSP容器当前请求不是用户发出的第一个请求,服务器以前已经为该用户创建了HttpSession对象。此时,JSP容器不再为用户创建新的HttpSession对象,而是寻找具有相同会话标识符的HttpSession对象,然后建立该HttpSession对象和当前请求的关联。
会话标识符以Cookie的形式在服务器和浏览器之间传送,标准会话属性在服务器端也是以会话的形式存在的,并且这个Cookie的生命周期只是临时的,即会话结束后就自动消失,没有为它指定固定的生命周期,因此有人说session是基于Cookie的技术。另外,如果客户端不支持Cookie,运用url重写机制来保证会话标识符传回服务器。
还有一点,session不像Cookie那样拥有路径访问的问题。session对应的是窗口,只要是同一个客户端或者是存在父子关系的多个客户端,同一个application下的servlet/JSP可以共享同一个session。当然,session和窗口的对应关系也是受时间限制的,至于多长时间,可以在服务器的conf/web.xml中配置<session-config><session- timeout>30</session-timeout></session-config>
实例代码:
1.设置session 和 显示session
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out=resp.getWriter();
//String title="Session Tracking Example";
HttpSession session=req.getSession(true);//如果没有该session,则自动创建一个新的
String heading;
Integer accessCount=(Integer)session.getAttribute("accessCount");
if(accessCount==null){
accessCount=new Integer(0);
heading="Welcome, NewComer!";
}else{
accessCount=new Integer(accessCount.intValue()+1);
heading="Welcome,back!";
}
session.setAttribute("accessCount", accessCount);
out.println("<html><head><title>Session追踪</title></head>"
+"<body bgcolor=\"#FDF5E6\">\n"
+"<h1 align=\"center\">"
+heading+"</h1>\n"
+"<h2>Information On Your Session: </h2>\n"
+"<table border=1 align=\"center\">\n"
+"<tr>\n"+" <td>id\n"+"<td>"+session.getId()+"\n"
+"<tr>\n"+" <td>CreatTime\n"+"<td>"
+new Date(session.getCreationTime())+"\n"
+"<tr>\n"+" <td>Time Of Last Access\n"+"<td>"
+new Date(session.getLastAccessedTime())+"\n"
+"<tr>\n"+" <td>Number Of Prious Access\n"+"<td>"
+accessCount+"\n"+"</table>\n"+"</body></html>");
}
2.URL重写
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out=resp.getWriter();
HttpSession session=req.getSession(true);
out.println("<html><head><title>Session追踪</title></head>"
+"<body>\n"
+"Session ID: "+session.getId()+"<br>"
+"from URL? : "+req.isRequestedSessionIdFromURL()+"<br>"
+"from Cookie? : "+req.isRequestedSessionIdFromCookie()+"<br>"
+"<a href="+resp.encodeURL(req.getRequestURL().toString())+">test</a& gt;<br>"//重写URL:encodeURL(),如果浏览器的cookie没有禁掉,则这句话没有对 req.getRequestURL().toString()作任何处理,还是保持这个字符串的原样;如果cookie被禁掉了,则在字符串的后面加上一字符串";"+session ID
+"<a href="+req.getRequestURL().toString()+">test</a>"
+"</body></html>");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-06-16
展开全部
没有区别 jsp里session是隐式对象(不用声明 系统编译时自动声明和初始化) 而servlet需要手动声明和初始化!别的完全一样!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2018-07-31
展开全部
不是老师说的就都对
就是同一个Session。
JSP需要翻译成servlet再能执行。你可以看JSP翻译后的servlet代码
JSP的中Session隐式对象就是在servlet中产生的
就是同一个Session。
JSP需要翻译成servlet再能执行。你可以看JSP翻译后的servlet代码
JSP的中Session隐式对象就是在servlet中产生的
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-06-16
展开全部
没有区别 session是jsp9大隐式对象之一
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询