service怎么注入到action

HappyKeKe 2010-12-02 02:38:26
刚学这个,看书上的例子,很简单的,就试着做了,貌似这个书问题很多,现在贴出代码,望各位大侠帮忙看看

MyService.java

package han.service;

public interface MyService
{
boolean valid(String username,String password);
}




MyServiceImpl.java

package han.service.impl;

import han.service.MyService;

public class MyServiceImpl implements MyService
{
public boolean valid(String username,String password)
{
if(username.equals("scott") && password.equals("tiger"))
{
return true;
}
else
return false;
}
}





LoginAction.java


package han.action;

import han.service.MyService;

import com.opensymphony.xwork2.Action;

public class LoginAction implements Action
{
private String username;
private String password;
private MyService ms;
private String tip;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public MyService getMs() {
return ms;
}
public void setMs(MyService ms) {
this.ms = ms;
}
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}
public String execute() throws Exception
{
if(ms == null)
System.out.println("ms is null");

System.out.println(getUsername() + ", " + getPassword());
if(ms.valid(getUsername(), getPassword()))
{
setTip("整合成功!");
return SUCCESS;
}
return ERROR;

}
}



struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="han.action" extends="struts-default">
<!-- 定义第一个Action,使用execute方法作为处理逻辑 -->
<action name="loginAction" class="han.action.LoginAction">
<result name="error">/error.jsp</result>
<result name="success">/success.jsp</result>
</action>
</package>
</struts>



applicationContext.xml(这个我是放在WEB-INF底下的)

<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<!-- 部署一个业务逻辑组件 -->
<bean id="myService" class="han.service.impl.MyServiceImpl" />
<!-- 配置Struts2控制器对应的Bean实例 -->
<bean id="loginAction" class="han.action.LoginAction" scope="prototype">
<!-- 依赖注入业务逻辑组件 -->
<property name="ms" ref="myService" />
</bean>
</beans>


web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<filter>
<filter-name>Struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<context-param>
<param-name>contextConfigLoaction</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

</web-app>



现在的问题是action里的ms属性是null,是否还有什么没配置???
网上搜了很久,貌似都不对,刚学这个,很多不懂
...全文
232 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
dxfly007 2010-12-21
  • 打赏
  • 举报
回复
我的出现类似的问题,也添加了struts2-spring-plugin-xxx.jar,但是问题照旧:
还请帮忙:
http://www.javaeye.com/problems/55865
HappyKeKe 2010-12-02
  • 打赏
  • 举报
回复
恩啊 谢谢大家哈
仲兴轩 2010-12-02
  • 打赏
  • 举报
回复
真的弄好久,郁闷呀,

struts2整合spring要加struts2-spring-plugin-2.1.8.1.jar包,

HappyKeKe 2010-12-02
  • 打赏
  • 举报
回复
我错了 竟然忘了struts2-spring-plugin-2.1.6.jar包...
貌似<constant name="struts.objectFactory" value="spring" />这个不要也行啊
这个到底要不要呢
qianyecq 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 happykeke 的回复:]
引用 10 楼 qianyecq 的回复:
把<package name="han.action" extends="struts-default">去了
加上下面这两句试试。
<constant name="struts.devMode" value="false" />
<package name="" extends="struts-default" namespace="/">
……
[/Quote]
你把tomcat从Program Files移到Program Files同一级,
然后在MyEclipse重新设置tomcat的路径,重新启动tomcat应该就可以了。
HappyKeKe 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 qianyecq 的回复:]
把<package name="han.action" extends="struts-default">去了
加上下面这两句试试。
<constant name="struts.devMode" value="false" />
<package name="" extends="struts-default" namespace="/">
[/Quote]
不行哦
HappyKeKe 2010-12-02
  • 打赏
  • 举报
回复
跟这个没关吧 没跟spring整一起都行的
qianyecq 2010-12-02
  • 打赏
  • 举报
回复
把<package name="han.action" extends="struts-default">去了
加上下面这两句试试。
<constant name="struts.devMode" value="false" />
<package name="" extends="struts-default" namespace="/">
仲兴轩 2010-12-02
  • 打赏
  • 举报
回复
<package name="han.action" ----这里去掉han.?

感觉都对了呀,
HappyKeKe 2010-12-02
  • 打赏
  • 举报
回复
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

这个放到前面了
<constant name="struts.objectFactory" value="spring" /> 这个也没加了
错误是

Unable to load configuration. - action - file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%206.0/webapps/StrutsSpring/WEB-INF/classes/struts.xml:13:50
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:58)
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:360)
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:403)
at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:190)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3800)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4450)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:987)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:909)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:495)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: Action class [loginAction] not found - action - file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%206.0/webapps/StrutsSpring/WEB-INF/classes/struts.xml:13:50
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.verifyAction(XmlConfigurationProvider.java:405)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addAction(XmlConfigurationProvider.java:355)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:460)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:265)
at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:111)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:189)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
... 30 more
qianyecq 2010-12-02
  • 打赏
  • 举报
回复
有什么错误贴出来。
仲兴轩 2010-12-02
  • 打赏
  • 举报
回复
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>


好像是写在所有的之前吧,

按这个来, 再改<action name="loginAction" class="loginAction">
这一行就应该不用加了--<constant name="struts.objectFactory" value="spring" />
HappyKeKe 2010-12-02
  • 打赏
  • 举报
回复
加了<constant name="struts.objectFactory" value="spring" />
和改了这个
<action name="loginAction" class="loginAction">
<result name="error">/error.jsp</result>
<result name="success">/success.jsp</result>
</action>
后 报这样的错

Exception starting filter Struts2
Unable to load configuration. - [unknown location]
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:58)
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:360)
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:403)
at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:190)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3800)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4450)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:987)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:909)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:495)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: Cannot locate the chosen ObjectFactory implementation: spring - [unknown location]
at org.apache.struts2.config.BeanSelectionProvider.alias(BeanSelectionProvider.java:287)
at org.apache.struts2.config.BeanSelectionProvider.alias(BeanSelectionProvider.java:258)
at org.apache.struts2.config.BeanSelectionProvider.register(BeanSelectionProvider.java:203)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:165)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
... 30 more
2010-12-2 15:29:19 org.apache.catalina.core.StandardContext start

HappyKeKe 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhongxingxuan 的回复:]
对咯,
你的action交由spring管理的话,
<action name="loginAction" class="loginAction">
<result name="error">/error.jsp</result>
<result name="success">/success.jsp</result>
</action>
你这里就直接写这个呀,不用再写类路径……
[/Quote]
这样的话 启动会报错

仲兴轩 2010-12-02
  • 打赏
  • 举报
回复
对咯,
你的action交由spring管理的话,
<action name="loginAction" class="loginAction">
<result name="error">/error.jsp</result>
<result name="success">/success.jsp</result>
</action>
你这里就直接写这个呀,不用再写类路径咯

仲兴轩 2010-12-02
  • 打赏
  • 举报
回复
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>


好像是写在所有的之前吧,
licip 2010-12-02
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.objectFactory" value="spring" /> <package name="han.action" extends="struts-default">
<!-- 定义第一个Action,使用execute方法作为处理逻辑 -->
<action name="loginAction" class="han.action.LoginAction">
<result name="error">/error.jsp</result>
<result name="success">/success.jsp</result>
</action>
</package>
</struts>

你要加一句才行。表示action的对象由spring来创建

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧