首先是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"> <!-- 延时加载 --> 
<filter> 
<filter-name>hibernateFilter</filter-name> 
<filter-class> 
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter 
</filter-class> 
<!-- 是否单个Session--> 
<init-param> 
<param-name>singleSession</param-name> 
<param-value>true</param-value> 
</init-param> 
<!-- 你在applicationCointext*.xml中配置的SessionFactory bean的id名--> 
<init-param> 
<param-name>sessionFactoryBeanName</param-name> 
<param-value>sessionFactory</param-value> 
</init-param> 
</filter> 
<filter-mapping> 
<filter-name>hibernateFilter</filter-name> 
<url-pattern>/*</url-pattern> 
</filter-mapping> <!-- Struts --> 
<filter> 
<filter-name>struts2</filter-name> 
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 
<init-param> 
<param-name>actionPackages</param-name> 
<param-value>com.abin.ssh.action</param-value> 
</init-param> 
</filter> 
<filter-mapping> 
<filter-name>struts2</filter-name> 
<url-pattern>/*</url-pattern> 
</filter-mapping>    <!-- Spring --> 
<context-param> 
<param-name>contextConfigLocation</param-name> 
<param-value>classpath*:com/abin/ssh/spring/applicationContext.xml</param-value> 
</context-param> 
<listener> 
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> <!-- utf-8编码 --> 
<filter> 
<filter-name>Spring character encoding filter</filter-name> 
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
<init-param> 
<param-name>encoding</param-name> 
<param-value>utf8</param-value> 
</init-param> 
</filter> 
<filter-mapping> 
<filter-name>Spring character encoding filter</filter-name> 
<url-pattern>/*</url-pattern> 
</filter-mapping> 
  <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
  </welcome-file-list> 
</web-app> 
紧接着是LoginAction.java 
package com.abin.ssh.action; import javax.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
import org.apache.struts2.ServletActionContext; 
import org.apache.struts2.convention.annotation.Action; 
import org.apache.struts2.convention.annotation.Namespace; 
import org.apache.struts2.convention.annotation.ParentPackage; 
import org.apache.struts2.convention.annotation.Result; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.Scope; 
import org.springframework.stereotype.Controller; import com.abin.ssh.bean.Login; 
import com.abin.ssh.service.LoginService; 
import com.opensymphony.xwork2.ActionSupport; @SuppressWarnings("serial") 
@ParentPackage("struts-default") 
@Namespace("/ssh") 
@Controller 
@Scope("prototype") 
public class LoginAction extends ActionSupport { 
private static final Log log=LogFactory.getLog(LoginAction.class); 
public String username; 
public String password; 
@Autowired 
private LoginService loginService; @Action(value="register",results={@Result(location="/ssh/welcome.jsp",name="success")}) 
public String register() { 
HttpServletRequest request = ServletActionContext.getRequest(); boolean flag = false; 
Login bean = new Login(); 
bean.setUsername(username); 
bean.setPassword(password); 
log.info("username="+username); 
log.info("password="+password); 
try { 
flag = this.loginService.add(bean); 
} catch (Exception e) { 
// TODO: handle exception 
e.printStackTrace(); 

if (flag == true) { 
request.getSession().setAttribute("message", "operate success"); 
return SUCCESS; 
} else { 
request.getSession().setAttribute("message", "operate failure"); 
return ERROR; 
} } 
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; 
} } 

解决方案 »

  1.   

    //login.jsp 
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
    <%@ taglib uri="/struts-tags" prefix="s" %> 
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
    <html> 
      <head> 
        <s:head/> 
        <title>struts2 show</title> 
      </head> 
      <body> 
        <form   method="post" action="register" > 
        用户名:<br/> 
        <input type="text" name="username" /><br/> 
        密码:<br/> 
        <input type="text" name="password" /><br/> 
        <input type="submit" value="注册"/> 
        <input type="reset" value="重置" /> 
        </form> 
      </body> 
    </html> 当我提交表单的时候总是提示找不到register方法? 报错信息如下: 
    HTTP Status 500 - -------------------------------------------------------------------------------- type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. exception java.lang.NoSuchMethodException: $Proxy19.register() 
    java.lang.Class.getMethod(Class.java:1605) 
    org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.getActionMethod(AnnotationValidationInterceptor.java:75) 
    org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:47) 
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) 
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) 
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138) 
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) 
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488) 
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) 
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) 
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    note The full stack trace of the root cause is available in the Apache Tomcat/6.0.32 logs. 
    -------------------------------------------------------------------------------- Apache Tomcat/6.0.32 
      

  2.   

    <form method="post" action="login!register/action" >  
      

  3.   

    <form method="post" action="login!register.action" >