`

第一次做myeclipse6.5 + struts2遇到的问题

 
阅读更多

  由于myeclipse7.0没有集成struts2,只好自己建了个xml文件结果格式与标准的struts配置文件有区别,除 了<xml></xml>并加上了<struts></struts>, there is no action mapped for namespace and action name * . unknown location 查了不少资料发现struts2的配置文件不是放在WEB-INF下了而是放在WEB-INF/class下,即创建时放在src下。可我的错误还有,结 果错误为

2009-11-5 15:31:14 org.apache.catalina.core.AprLifecycleListener init
信 息: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:/Program Files/Java/jre1.5.0/bin;C:/Program Files/MyEclipse 7.0M1/eclipse/dropins/myeclipse/eclipse/plugins/com.genuitec.eclipse.easie.tomcat.myeclipse_6.9.100.zmyeclipse69100200808/tomcat/bin
2009-11-5 15:31:14 org.apache.coyote.http11.Http11Protocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
2009-11-5 15:31:14 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 1613 ms
2009-11-5 15:31:15 org.apache.catalina.core.StandardService start
信息: Starting service Catalina
2009-11-5 15:31:15 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/6.0.13
2009-11-5 15:31:18 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info
信息: Parsing configuration file [struts-default.xml]
2009-11-5 15:31:18 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info
信息: Unable to locate configuration files of the name struts-plugin.xml, skipping
2009-11-5 15:31:18 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info
信息: Parsing configuration file [struts-plugin.xml]
2009-11-5 15:31:18 com.opensymphony.xwork2.util.logging.commons.CommonsLogger error
严重: Document is invalid: no grammar found. at (null:3:8)
org.xml.sax.SAXParseException: Document is invalid: no grammar found.
 at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
 at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown Source)
 at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
 at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
 at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
 at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(Unknown Source)
 at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
 at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
 at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
 at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
 at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
 at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
 at javax.xml.parsers.SAXParser.parse(Unknown Source)
 at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:113)
 at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(XmlConfigurationProvider.java:885)
 at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadDocuments(XmlConfigurationProvider.java:144)
 at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.init(XmlConfigurationProvider.java:111)
 at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:164)
 at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
 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:3693)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4340)
 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:525)
 at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
 at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
 at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
 at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
 at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
 at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
 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:566)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
2009-11-5 15:31:18 org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter struts2
Unable to load configuration. - file:/E:/workspaces/.metadata/.plugins/com.genuitec.eclipse.easie.tomcat.myeclipse/tomcat/webapps/struts2/WEB-INF/classes/struts.xml:3:8
 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:3693)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4340)
 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:525)
 at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
 at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
 at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
 at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
 at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
 at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
 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:566)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: Unable to load file:/E:/workspaces/.metadata/.plugins/com.genuitec.eclipse.easie.tomcat.myeclipse/tomcat/webapps/struts2/WEB-INF/classes/struts.xml - file:/E:/workspaces/.metadata/.plugins/com.genuitec.eclipse.easie.tomcat.myeclipse/tomcat/webapps/struts2/WEB-INF/classes/struts.xml:3:8
 at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(XmlConfigurationProvider.java:890)
 at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadDocuments(XmlConfigurationProvider.java:144)
 at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.init(XmlConfigurationProvider.java:111)
 at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:164)
 at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
 ... 30 more
Caused by: Document is invalid: no grammar found. - file:/E:/workspaces/.metadata/.plugins/com.genuitec.eclipse.easie.tomcat.myeclipse/tomcat/webapps/struts2/WEB-INF/classes/struts.xml:3:8
 at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:115)
 at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(XmlConfigurationProvider.java:885)
 ... 34 more
Caused by: org.xml.sax.SAXParseException: Document is invalid: no grammar found.
 at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
 at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown Source)
 at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
 at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
 at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
 at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(Unknown Source)
 at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
 at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
 at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
 at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
 at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
 at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
 at javax.xml.parsers.SAXParser.parse(Unknown Source)
 at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:113)
 ... 35 more
2009-11-5 15:31:18 org.apache.catalina.core.StandardContext start
严重: Error filterStart
2009-11-5 15:31:18 org.apache.catalina.core.StandardContext start
严重: Context [/struts2] startup failed due to previous errors

 

我突然想起可能是struts.xml出问题了,找了一个struts1的配置文件一对比原来struts.xml 少了

 

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd "> 加上一切都ok,

 

可在启动tomcat是出 Source not found for Class <T>.getDeclaredConstructors0(boolean) line: not available [native method]
原来窜出debug调试 工具 ,不是错误 要是程序不执行了,你可以按下F8。

 

总结一下Struts2.0的配置:

WebRoot/WEB/INF/lib 目录下添加 Struts2 所需 jar 包。(尽量不要图简单把所有的 jar 都拷贝进来,这样工程冗余笨重,还会遇到一些不必要的麻烦的)   

   struts2-core-2.1.6.jar

   xwork-2.1.2.jar

   freemarker-2.3.13.jar

   ognl-2.6.11.jar

   commons-logging-1.0.4.jar

按照以前的教程上只添加以下五个 jar 包的时候会出现 Unable to load configuration 的错误,这个时候还需要把 commons-fileupload-1.2.1 ,commons-io.jar 也一起放进来,总共七个jar。

各个 jar 包的作用介绍

ognl-2.6.11.jar

OGNL 它是一种功能强大的表达式语言( Expression Language ,简称为 EL ),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。

commons-logging-1.0.4.jar :包含了日志功能,必须使用的 jar 包。

 

struts2-core-2.1.6.jar :Struts 标签库定义文件

Struts struts.xml 配置说明

struts.xml 放在 src 目录下

<? xml version = "1.0" encoding = "GBK" ?>

<! DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd" >   

< struts >

<!-- package name 可以随便起,也可以用包名 -->

    < package name = "struts2" extends = "struts-default" >

       < action name = "login" class = "com.demo.LoginAction" >

           < result name = "success" > /welcome.jsp </ result >

           < result name = "error" > /error.jsp </ result >           

<!— 有些类似于 Struts1 中的 <forward name="loginsuccess" path="/index.jsp"/>   -->       </ action >    

    </ package >  

</ struts >

 

 

Struts 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 > struts2 </ filter-name >          < filter-class >org.apache.struts2.dispatcher.FilterDispatcher </ filter-class >

  </ filter >

< filter-mapping >

<!-- 定义 Struts2 的核心过滤器 -->

        < filter-name > struts2 </ filter-name >

        < url-pattern > /* </ url-pattern >

<!—- 客户端发送过来的所有请求都由此过滤器接收处理 , 也可以更换为 /.action 表示处理所有以 .action 结尾的请求,类似 Struts1 中的 .do -->

    </ filter-mapping >

  < welcome-file-list >

    < welcome-file > login.jsp </ welcome-file >

  </ welcome-file-list >

</ web-app >

 

 

页面的配置

login.jsp

< form action = "login.action" >

用户名: < input type = "text" name = "username" /></ td >

   码: < input type = "text" name = "password" /></ td >

< input type = "submit" value = " 登陆 " />

< input type = "reset" value = " 重填 " />

</ form >

页面代码解析:

页面的 form 表单提交请求后被 filter 拦截,根据 login.action 中的 login 确定应该由 struts-config.xml name login Action 处理,转交给 login 对应的 com.oristand.demo.LoginAction

 

LoginAction 中代码:

 

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.ServletActionContext;

public class LoginAction implements Action{

    private String username ;

    private String password ;

    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 String execute(){

    if (getUsername().equals( "scott" ) && tPassword().equals( "tiger" )){        

// 将拿到的 username 存放到 session 作用域中

ActionContext.getContext ().getSession().put( "user" , getUsername());

           return SUCCESS ;

       } else {

           return ERROR ;

       }

    }

}

这个类中因为继承了 Action 类, Action 中有属性:

public static final String SUCCESS=”success”;

所以可以直接使用 return SUCCESS 。继承 Action 后简化了 execute 方法的返回值,也使达到了标准化。但是如果不继承 Action 的话也可以直接 return ”success”;

 

  根据对应 login 请求的 result 结果,我们还需要建立 welcome.jsp error.jsp 这两个页面。

返回 SUCCESS 时转去 welcome.jsp 页面,页面用 ${sessionScope.user} 拿到 session 作用域中的用户名,显示出来。

也可以用 <%=session.getParameter("user") %> 拿到。

通过设置 Action 属性值,   Action 设置了某个属性值后,  struts2 将这些属性值全部封装在一个叫做 struts.valueStack 的请求属性里。详见页面迭代显示部分。     

另外, Action 类中的成员属性不一定用于封装用户的请求参数,也可能是封装了 Action 需要传入下一个 JSP 页面的信息。

 

做到这里已经可以完成一个页面的简单登陆了

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics