struts问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts问题相关的知识,希望对你有一定的参考价值。

我的首页加载的时候要调用action查询一些数据,然后在返回到首页,怎么在加载首页的时候自动调用action

用web.xml中的
<welcome-file-list>
<welcome-file>action名称</welcome-file>
</welcome-file-list>
标签 可以达到这样的效果

也可以在页面中用struts逻辑标签进行判断 是否有值 在进行显示页面
参考技术A 一般的做法都是 action ---> 你的首页,一些初始设置都在初始action里设置好发给index.jsp ,由首页显示

浅析Struts1和Struts2的Action线程安全问题

tomcat容器对servlet的实现采用的是单例模式,对于一个servlet类,永远只有一个servlet对象存在。

下面我们来解释为什么Struts1是线程不安全的。

1、Struts1

Struts1是对Java web servlet接口的直接实现,所以它继承了tomcat对servlet的实现,每一个struts1里面的action都对应的是一个servlet class,所以这里的action在被tomcat实例化之后也是单例的,所以,struts1就产生了多线程问题。

所以:我们在用struts1的时候不能在action里面定义属性。要用到只的话只能在方法里面定义。

那至于为什么把属性的定义放到方法里面就不会有多线程的问题了,这个问题希望各位读者去查看有关JMM(java memory model)里面有关java内存模式如何给方法分配内存的内容, 我相信你们会找到答案。

2、struts2

上面我们了解了Struts1里面的多线程问题,那Struts2是怎么解决这个问题的呢?其实道理非常简单,原因就是Strtus2会获取到用户的http请求,然后负责给每个请求实例化一个Action 对象,但是大家注意,这里的action对象和Struts1里面的action对象完全不是一个概念,struts1里面的action类就是一个servlet类,而这里的action类只是一个普通的java class。这也就是为什么Struts1里面的action是线程不安全的,而struts2里面的action是线程安全的原因。

那我们在回头来看看struts2对servlet的处理和struts1有什么不同。看过前面分析的读者肯定知道,struts1的 action对servlet没有进行任何的包装,它是直接实现的Java WEB API 里面的servlet 接口。所以才会有线程安全的问题,但是struts2底层帮我们封装了Servlet,使开发人员不用直接接触Servlet。具体做法是:

Strtus2截获servlet请求,然后给每个请求实例化一个Action对象,请求结束之后销毁Action对象。至于Strtus2具体是怎么做的,我这里不赘叙,大家可以去参看Struts2的有关介绍。

在Struts2中由于 Action和普通的Java类没有任何区别(也就是不用像Struts1里面那样去实现一个Struts的接口,有兴趣的朋友可以自己去了解),所以我们可以用Spring去管理Struts2的Action,这个时候我们就要注意了,因为当我们在spring里面去定义bean的时候,spring默认用的是单例模式。所以在这个时候,你就要修改Spring的配置文件---即修改scope为prototype。

以上是关于struts问题的主要内容,如果未能解决你的问题,请参考以下文章

struts2 之 struts2简介,struts2开发步骤,struts2详细配置,struts2执行流程

struts 配置问题extends undefined package struts-default !!! [struts.xml 出现黄色警告]

struts2集成Spring,Hibernate的问题!!

Struts2的一个问题: 找不到struts.xml的路径问题

Struts2面试问题

struts和struts2的区别是啥?