使用Struts框架的Java Web项目中的两个Session的区别和常见的Session取值为空的错误

我的百度知道回答,感觉这个知识很有意义,专门贴出来。

不过还有待验证的地方,就是

ActionContext.getContext().getSession("name", "Tom");
//如果在JSP中通过 EL 或者 Struts2 标签怎么显示?

以下是回答正文。



很多初学Java Web的同学因为使用 Strut2框架而分不清两个 Session的区别。

1.   JSP/Servlety有个原生的 session 对象,这是9大内置对象中的一个,书上写的都有,都记得。类型是 HttpSession session;  函数方法是 setAttribute(),getAttribute(),用法如下

//java 保存至原生session对象中
ServletActionContext.getRequest().getSession().setAttribute("myStr",myStr);
//jsp 取值
用struts标签: <s:property value="#session.myStr" />
用EL表达式:${sessionScope.myStr}
用JSP代码:<%=session.getAttribute("myStr")%>

2.  若是项目使用了Struts2框架,Struts2自己也封装了个 session,这个 session是个 Map类型的对象。所以和 Map 用法一样的,使用 put 存值,get 取值。用法是:

//java 保存至struts2 session
ActionContext.getContext().getSession().put("user", user);
//jsp 页面读取
用struts标签: <s:property value="#session.hello" />
用EL表达式:${hello}
用java代码:<%=session.getAttribute("hello")%>

很多人说session为什么无法取出值呢?看看他们的代码,你觉得这对么?

//错误代码示例:
//Action
Map<String, Object> session=ActionContext.getContext().getSession();
session.put("name","Tom");
//JSP
他的名字叫做 <%=session.getAttribute("name")%>

/*
这明显犯了分不清2个session的错误。Action中你是放在 Struts2框架封装的session(其实是个Map)中去了,而JSP中,你却又读取原生的session。根本不是一个东西。
*/

//正确写法
//Action
//必须是从 request对象中获得 原生的HttpSession类型的session
//原生sessiond的方法是 setAttribute和 getAttribute,不是put,set
HttpSession session = ServletActionContext.getRequest().getSession();
session.setAttribute("name","Tom");
//JSP
他的名字叫做 <%=session.getAttribute("name")%>

使用上面的代码,注意import 相应的类库。

时间: 2024-10-23 03:19:20

使用Struts框架的Java Web项目中的两个Session的区别和常见的Session取值为空的错误的相关文章

第一个使用Struts框架的Java Web项目

今天早上第一次完成了一个HelloWorld级别的Java Web项目login(登陆验证)项目. 按照<JavaEE主流开源框架(第二版)>的指导做的. 1.先下载了struts:struts-2.3.16.3-all.zip,解压之后看到struts-2.3.16.3目录下有一个lib目录,这个目录里的全部是jar文件,采用struts框架需要使用jar包都在这个目录下. 2.根据书上的说明,先在myeclipse8.5中建立web project,命名为Login. 然后把下面的五个ja

在Java Web项目中引入Mondrian多维分析框架

一,Mondrian简介 Mondrian是一个开源项目,一个用Java写成的OLAP引擎.它用MDX语言实现查询,从关系数据库(RDBMS)中读取数据.然后经过Java API以多维的方式对结果进行展示. Mondrian的使用方式同JDBC驱动类似.可以非常方便的与现有的Web项目集成. Mondrian OLAP 系统由四个层组成,可分为从最终用户到数据中心, 顺序为: 1表现层(the presentation layer) 2维度层(the dimensional layer) 3集合

MVC模式下基于SSH三大框架的java web项目excel表格的导出(不依赖另外的jar包)

最近工作中碰到了需要将web页面的表格内容导出到excel表格并下载到本地的需求.以下是在利用网上资源.与同事探讨下,完成的代码. 首先我们需要有定义好的实体类.以下是截取了项目中用到的部分代码. 1 public class QyggDocuments implements java.io.Serializable { 2 3 private static final long serialVersionUID = -2543382529255041149L; 4 5 private Stri

在java web项目中集成webservice

公司要求在项目中加入webservice服务,因为项目中使用了spring框架,所以在这里使用与spring兼容性较好的cxf来实现 cxf所需jar包 spring的jar包就不贴了 一:创建webservice服务器 1)创建一个服务接口 package com.service; import javax.jws.WebParam; import javax.jws.WebService; @WebService public interface IHelloWorld { public S

JAVA WEB项目中各种路径的获取

JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报  分类: JAVA开发(41)  1.可以在servlet的init方法里 String path = getServletContext().getRealPath("/"); 这将获取web项目的全路径 例如 :E:\eclipseM9\workspace\tree\ tree是我web项目的根目录 2.你也可以随时在任意的cla

Java web 项目中使用ckeditor和ckfinder

重点汇总: 加入相关的jar包 在web.xml文件加入ckfinder 请求拦截器 配置ckfinder的配置文件:config.xml 杂谈 作为一个可视化的HTML 编辑器,最重要的一点是对于文件.图片和视频的管理,一个好的可视化的HTML 编辑器应该有很好的设计. 其他的话就不多说了,现在开始进入正题. ckeditor和ckfinder 两个到底是干什么的?为什么要做两个? ckeditor就是一个可视化的HTML编辑器,但是他的上传图片和视频却交给了另外的软件:ckfinder,为什

Java Web项目中缺少Java EE 6 Libraries怎么添加

具体步骤如下: 1.项目名称上点击鼠标右键,选择"Build Path-->Configure Build Path-->Java Build Path" 2.单击"Add Library..." 3.选择"User Library",单击"Next" 4.单击"User Libraries...",选择需要的Java EE 6 Libraries Java Web项目中缺少Java EE 6

Java Web项目中连接Access数据库的配置方法

本文是对前几天的"JDBC连接Access数据库的几种方式"这篇的升级.因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的.昨天已经将博客公布了.可是后来经过一些验证有点问题,所以今天改了一下又一次的公布了 老师决定期末考试採用access数据库实现增删改查.我觉得如今的我已经没有问题了.可是曾经都是在JSP页面中连接access数据库,不管是下面的那种方式都进行了连接的练习,可是如今我想让我的项目中的訪问access数据库的java代码,封装到DAO中,在DAO中连接数据库,

java web项目中 读取properties 路径的问题

可以先获取项目的classPath String classPath = this.getClass().getResource("/").getPath();//获取classPath(部署到tomcat的路径上) 我的为/D:/apache-tomcat-6.0.29/webapps/demo/WEB-INF/classes/  在连接下面的路径即可 代码如下: package readproperties; import java.io.BufferedInputStream;i