s2sh中beanFactory的初始化

2021-07-04 20:30:22 字數 3915 閱讀 6331

在s2sh中web.xml檔案中的如下語句

<

listener

>

<

listener-class

>org.springframework.web.context.contextloaderlistener

listener-class

>

listener

>

<

context-param

>

<

param-name

>contextconfiglocation

param-name

>

<

param-value

param-value

>

context-param

>

把spring中的

beanfactory

初始化,並且放入了

servletcontext

中,避免

struts2

在每個action

中初始beanfactory

(耗資源)進行資料庫的操作,而

struts2

的action

如何取到該初始化好的

beanfactory

呢,筆者總結了如下三個方法:

方法1:

public

class loginaction extends actionsupport implements servletcontextaware {

....(程式其他**)

private servletcontext servletcontext;

public string execute() {

....(程式其他**)

usermanager usermanager = (usermanager) factory.getbean("usermanager");

....(程式其他**)

return

success;

@override

public

void setservletcontext(servletcontext arg0) {

// todo

auto-generated method stub

servletcontext = arg0;

action實現servletcontextaware 介面,複寫setservletcontext方法,在struts2掉用此

action

方法2:

在action

類不實現servletcontextaware 介面,在execute方法中加入servletcontext servletc = servletactioncontext.getservletcontext();語句就可以,即從servletactioncontext中直接把servletcontext取出來

public

class loginaction extends actionsupport  {

....(程式其他**)

public string execute() {

....(程式其他**)

servletcontext servletc = servletactioncontext.getservletcontext();

usermanager usermanager = (usermanager) factory.getbean("usermanager");

....(程式其他**)

return

success;

方法三:

把action

交給spring

的ioc

容器管理,那麼在

action

類中就不會有

beanfactory

生成了

步驟如下:

檔案中加入

action

的bean

<

bean

name="loginaction"

class="action.loginaction"

scope="prototype"

>

<

property

name="usermanager"

ref="usermanager"

/>

bean

>

scope最好設成prototype,避免action的執行緒安全問題

在struts.xml

檔案中,

action

要按如下方式申明:

<

package

name="user"

namespace="/"

extends="struts-default"

>

<

action

name="login"

class="loginaction"

>

<

result

name="success"

>/success.jsp

result

>

<

result

name="input"

>/login.jsp

result

>

<

result

name="error"

>/failed.jsp

result

>

action

>

package

>

<

action

name="login"

class="loginaction"

>中的class要與

bean

中的name

相對應

最後,在action

中的**就是很簡單的

(當然,其中的setusermanager方法別忘了)

import manager.usermanager;

import bean.user;

import com.opensymphony.xwork2.actionsupport;

public

class loginaction extends actionsupport  {

private string password;

private usermanager usermanager;

private string username;

public string execute() {

user user = new user();

user.setpassword(password);

user.setusername(username);

usermanager.adduser(user);

return

success;

public string getpassword() {

return

password;

public string getusername() {

return

username;

public

void setpassword(string password) {

this.password = password;

public

void setusermanager(usermanager usermanager) {

this.usermanager = usermanager;

public

void setusername(string username) {

this.username = username;

S2SH整合步驟

s2sh 整合步驟 一.搭建開發環境 1.準備三者的 jar檔案 不要忘記相應資料庫的驅動.2.配置web.xml檔案,主要配置兩項內容 1 自動載入 spring 容器的 contextloaderlistener配置 2 應用 struts2 的過濾器 filterdispatcher配置 3....

S2SH無配置詳解

1.hibernate hebernate3.0後可以使用註解自動對映刪除配置檔案,加入的包是hibernate annotations 3.3.1.ga.jar和ejb3 persistence 1.0.1.ga.jar就可以實現 版本可以不同 例子 entity table name airli...

s2sh整合開發的配置

下面給出整合開發時struts 2 hibernate spring需要的jar,包太多不打字了,直接截圖。ps 我資料庫用的是mysql 的配置模版 第一步在 spring 中配置資料來源 第二步整合進 hibernate hibernate.dialect org.hibernate.diale...