`

WebWork实现的简单登录过程以及遇到问题并附代码

阅读更多

 

1.login.jsp中点击submit按纽后,请求将被发送到web容器的login.action,
2.web容器检索web.xml,通过
<servlet-mapping>
        <servlet-name>webwork</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>

这一段得到webwork关键字,再通过
    <servlet>
        <servlet-name>webwork</servlet-name>
        <servlet-class>
            com.opensymphony.webwork.dispatcher.ServletDispatcher
        </servlet-class>

        <load-on-startup>1</load-on-startup>
    </servlet>

将请求转发给com.opensymphony.webwork.dispatcher.ServletDispatcher类来处理,这个类会读取xwork.xml文件
3.通过和最初login.jsp提交的"login.action"中去掉web.xml中的定义的".action", 得到"login",在xwork.xml中的
        <action name="login" class="com.cdpgc.salary.LoginAction">
            <result name="failed" type="dispatcher">login-failed.jsp</result>
            <result name="success" type="dispatcher">login-success.jsp</result>
        </action>

找到"login"的定义,并寻找com.cdpgc.salary.LoginAction来处理这个请求,当该对象的execute()方法返回
<result>节点"name"属性定义的字符串的时候,将结果使用某个jsp来响应.这里是
success->login-success.jsp
failed->login-failed.jsp
4.两个jsp中使用了
<ww:property value="user" />

来访问处理类(com.cdpgc.salary.LoginAction)的属性,它依赖于
<%@ taglib uri="webwork" prefix="ww" %>

定义的标签库,而这个标签库定义中的uri依赖于web.xml中的
    <taglib>
        <taglib-uri>webwork</taglib-uri>
        <taglib-location>
            /WEB-INF/lib/webwork-2.1.7.jar
        </taglib-location>
    </taglib>

定义的taglib-uri名称

另外,在LoginAction.java中webwork会将发出请求的form中的值--------在<input type='xxx' name='xxx'>中的值
填入到自己的属性中(如果有同名属性的化),这样我们可以获得请求参数.在处理完毕后,同样可以设置它,
而在结果jsp中,webwork又会将该值提供给jsp访问,当然还是基于名称相同.

遇到问题
一、webwork jar文件添加,需要的Jar需要添加完备。
二、java.lang.NoSuchMethodError: javax.xml.transform.dom.DOMResult.getNextSibling()Lorg/w3c/dom/Node;
    org.apache.xalan.transformer.TransformerIdentityImpl.createResultContentHandler(TransformerIdentityImpl.java:199)
    org.apache.xalan.transformer.TransformerIdentityImpl.setDocumentLocator(TransformerIdentityImpl.java:880)
    com.opensymphony.xwork.util.DomHelper$DOMBuilder.setDocumentLocator(DomHelper.java:233)
    com.opensymphony.xwork.util.location.LocationAttributes$Pipe.setDocumentLocator(LocationAttributes.java:302)
    com.opensymphony.xwork.util.DomHelper$StartHandler.setDocumentLocator(DomHelper.java:292)
    org.apache.xerces.parsers.AbstractSAXParser.startDocument(Unknown Source)
    org.apache.xerces.impl.dtd.XMLDTDValidator.startDocument(Unknown Source)
    org.apache.xerces.impl.XMLDocumentScannerImpl.startEntity(Unknown Source)
    org.apache.xerces.impl.XMLVersionDetector.startDocumentParsing(Unknown Source)
    org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    javax.xml.parsers.SAXParser.parse(Unknown Source)
    com.opensymphony.xwork.util.DomHelper.parse(DomHelper.java:122)
    com.opensymphony.xwork.config.providers.XmlConfigurationProvider.loadConfigurationFile(XmlConfigurationProvider.java:642)
    com.opensymphony.xwork.config.providers.XmlConfigurationProvider.init(XmlConfigurationProvider.java:91)
    com.opensymphony.xwork.config.impl.DefaultConfiguration.reload(DefaultConfiguration.java:85)
    com.opensymphony.xwork.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:54)
    com.opensymphony.xwork.DefaultActionProxy.<init>(DefaultActionProxy.java:57)
    com.opensymphony.xwork.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:46)
    com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:216)
    com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:111)
   
问题原因原来是因为使用了tomcat5.0.28它里面的xml-api.jar把jdk1.5里面的DOMResult冲掉了 ,改用Tomcat的5.5版本问题解决。
三、javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found
javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
com.opensymphony.xwork.util.DomHelper$DOMBuilder.<clinit>(DomHelper.java:168)
com.opensymphony.xwork.util.DomHelper.parse(DomHelper.java:116)
com.opensymphony.xwork.config.providers.XmlConfigurationProvider.loadConfigurationFile(XmlConfigurationProvider.java:642)
com.opensymphony.xwork.config.providers.XmlConfigurationProvider.init(XmlConfigurationProvider.java:91)
com.opensymphony.xwork.config.impl.DefaultConfiguration.reload(DefaultConfiguration.java:85)
com.opensymphony.xwork.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:54)
com.opensymphony.xwork.DefaultActionProxy.<init>(DefaultActionProxy.java:57)
com.opensymphony.xwork.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:46)
com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:216)
com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:111)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
问题原因缺少xalan.jar文件,去http://xml.apache.org/xalan-j/index.html下载即可。

代码:login.jsp,loginsucess.jsp,loginfailed.jsp,LoginAction.java.
      我们登录login.jsp,输入用户名,post之后,请求将提交给LoginAction处理,如果成功则返回login-success.jsp,否则返回loginfailed.jsp
 
      login.jsp
<html>
<head>
<title>WebWork Tutorial - Lesson 3 - Example 1</title>
</head>

<body>

<p>
Click the [post] button below to Login.
</p>

<form action="login.action" method="post">
<p>user:<input type="text" name="user" value="" /></p>
<p>password:<input type="password" name="password" value="" /></p>
<p><input type="submit" value="post" /></p>
</form>

</body>
</html>

login-success.jsp

<%@ taglib uri="webwork" prefix="ww" %>
<html>
<head>
<title>welcome to salary</title>
</head>
<body>

<font color="green">

<ww:property value="user" /> has logon [SalaryQueryModule]

</font>
<br>



</body>
</html>

login-failed.jsp

<%@ taglib uri="webwork" prefix="ww" %>
<html>
<head>
<title>failed login</title>
</head>
<body>
<font color="red">
error login by [<ww:property value="user" /> ],invalid user or pwd
</font>
<br>
</body>
</html>

web.xml,位于web-inf目录下
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>My WebWork Application</display-name>
    <servlet>
        <servlet-name>webwork</servlet-name>
        <servlet-class>
            com.opensymphony.webwork.dispatcher.ServletDispatcher
        </servlet-class>

        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>webwork</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>
   
    <taglib>
        <taglib-uri>webwork</taglib-uri>
        <taglib-location>
            /WEB-INF/lib/webwork-2.1.7.jar
        </taglib-location>
    </taglib>
</web-app>

xwork.xml位于web-inf\classes目录下
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd">

<xwork>
    <!-- Include webwork defaults (from WebWork JAR). -->
    <include file="webwork-default.xml" />
   
    <!-- Configuration for the default package. -->
    <package name="default" extends="webwork-default">
        <!-- Default interceptor stack. -->
        <default-interceptor-ref name="defaultStack" />
       
        <!-- Action: Lesson 03: HelloAction. -->
        <action name="login" class="com.cdpgc.salary.LoginAction">
            <result name="failed" type="dispatcher">login-failed.jsp</result>
            <result name="success" type="dispatcher">login-success.jsp</result>
        </action>
    </package>
</xwork>

LoginAction.java
 1/**//*
 2 * Created on 2005-8-4
 3 *
 4 * TODO To change the template for this generated file go to
 5 * Window - Preferences - Java - Code Style - Code Templates
 6 */
 7package com.cdpgc.salary;
 8
 9import com.opensymphony.xwork.ActionSupport;
10
11/**//**
12 * @author codemyth
13 *
14 * TODO To change the template for this generated type comment go to Window -
15 * Preferences - Java - Code Style - Code Templates
16 */
17public class LoginAction extends ActionSupport {
18
19    String user;
20    String password;
21
22    /**//*
23     * (non-Javadoc)
24     *
25     * @see com.opensymphony.xwork.Action#execute()
26     */
27    public String execute() throws Exception {
28        // TODO verify user-password
29        if (user.equals("bbb"))
30            return super.SUCCESS;
31        else
32            return "failed";
33    }
34    /**//**
35     * @return Returns the user.
36     */
37    public String getUser() {
38        return user;
39    }
40    /**//**
41     * @param user
42     *            The user to set.
43     */
44    public void setUser(String user) {
45        this.user = user;
46    }
47    /**//**
48     * @return Returns the password.
49     */
50    public String getPassword() {
51        return password;
52    }
53    /**//**
54     * @param password
55     *            The password to set.
56     */
57    public void setPassword(String password) {
58        this.password = password;
59    }
60}
文章大部分内容来自http://www.blogjava.net/codemyth/archive/2005/08/06/9453.html

分享到:
评论

相关推荐

    webwork源码底层实现

    WebWork虽然现在已经被Struts2和Spring MVC等更现代的框架取代,但其设计理念和实现方式对于理解现代Web框架的演变过程具有很高的参考价值。如果你是Java Web开发的爱好者,深入研究WebWork源码无疑会增强你的技能,...

    webwork-1.4-src.zip_webwork_webwork s_webwork.zip_webwork1.4.zip

    在"webwork-1.4-src.zip"这个压缩包中,包含了WebWork1.4的源代码,这对于学习和理解WebWork的工作原理以及进行定制开发非常有帮助。 1. **MVC模式**:WebWork1.4遵循MVC架构,将应用程序分为模型、视图和控制器三...

    webwork

    这个"webwork源码下载"可能是指获取WebWork框架的源代码,这对于学习、调试或自定义框架功能的开发者来说是很有价值的。 WebWork的核心特性包括: 1. **动作映射**:WebWork通过XML配置文件定义动作(Action)与...

    webwork2实例源代码

    通过学习和研究这个WebWork2实例源代码,你可以深入了解J2EE应用的开发模式,熟悉MVC架构的实现,以及掌握如何利用WebWork2的特性来构建高效、可维护的Java Web应用。同时,这也是提升你对验证框架、依赖注入和拦截...

    webwork in action 源代码

    《WebWork in Action》是一本专注于介绍WebWork框架的书籍,源代码的提供是为了让读者更深入地理解和实践书中的示例。WebWork是一个基于Java的MVC(模型-视图-控制器)框架,用于构建动态Web应用程序。它强调了代码...

    webWork

    5. 解决问题:常见问题和解决方案,帮助开发者解决开发过程中遇到的问题。 通过深入学习"webWork学习文档",开发者不仅可以掌握WebWork的基本使用,还能了解其背后的架构设计,从而更好地利用这一框架来构建高效、...

    xwork源代码(webwork源代码,xwork source,)

    《XWork源代码详解——深度剖析WebWork框架基础》 XWork源代码是WebWork框架的核心组成部分,WebWork是一款强大的MVC(Model-View-Controller)框架,它为Java Web应用提供了一种灵活且可扩展的开发模式。XWork作为...

    webwork 登录逻辑验证(简单)

    在提供的压缩包文件中,"webwork"可能包含了示例项目或源代码,用于演示上述登录逻辑的实现。这些文件可以帮助学习者更直观地看到代码结构和具体实现细节,从而加深对WebWork的理解。通过分析和修改这些代码,初学者...

    webwork登陆代码

    这个"webwork登陆代码"示例显然展示了如何在WebWork框架下实现一个基本的用户登录功能。下面将详细介绍WebWork的核心概念、登录功能的实现原理以及可能涉及的关键技术点。 1. WebWork框架基础: - **Action**: 在...

    webwork-2.2.2和xwork1.1.3的jar包and源代码

    通过阅读源码,开发者可以了解框架内部的工作流程,遇到问题时能够更快定位和解决问题。同时,这也为自定义或扩展框架功能提供了可能。 总的来说,这个压缩包中的WebWork 2.2.2和XWork 1.1.3 JAR包及其源代码,为...

    怎么用WebWork来实现HelloWorld.docx

    这包括`webwork-2.x.jar`以及`webwork-2.2.6\lib`下的`default`和`spring`目录中的所有jar文件。 配置WebWork的关键在于`web.xml`文件。你需要定义一个名为`ServletDispatcher`的Servlet,它负责解析URL,调用相应...

    WebWork docs 2 -- webWork 详细的说明文档

    WebWork docs 2 是一套完整的WebWork框架的详细说明文档,包含了开发者在使用WebWork时可能遇到的所有问题的解答。 这套文档涵盖了以下几个主要的知识点: 1. **WebWork基础**:WebWork的核心概念,如Action、...

    WebWork教程

    WebWork是一个由OpenSymphony组织开发的Java Web框架,它遵循MVC(Model-View-Controller)设计模式,并且特别注重组件化以及代码重用。WebWork2.x版本的发展前身是Rickard Öberg开发的WebWork,并且已经被拆分为...

    剖析WEBWORK源代码

    ### 剖析WEBWORK源代码 #### WebWork框架概览 WebWork是OpenSymphony组织旗下的一款开源项目,专注于构建组件化和代码重用的拉出式MVC(Model-View-Controller)模式J2EE Web框架。该框架的设计理念在于通过组件化...

    webwork2中文教程

    通过阅读这份"webwork2中文教程",你可以快速上手并熟练掌握WebWork2的使用技巧,从而在开发过程中提高效率,降低出错率。 总的来说,WebWork2是一个强大的Web应用框架,它的设计思想和特性在后来的Struts2中得到了...

    WebWork2.0讲解说明

    WebWork2.0是一款基于Java的企业级Web应用框架,它为开发者提供了强大的MVC(Model-View-Controller)架构支持,旨在简化Web应用程序的开发流程,提高代码的可维护性和可扩展性。本讲解将围绕WebWork2.0的核心概念、...

    webwork_框架文档

    在文件列表中提到的"webwork_框架文档"可能包含以下内容:框架的安装指南、配置说明、API参考、最佳实践、示例代码以及常见问题解答等。这些文档将帮助开发者了解如何设置WebWork环境,如何编写Action类,如何配置...

    WebWork2配置

    在这个“WebWork2配置”主题中,我们将深入探讨如何设置和优化WebWork2框架,以便在你的项目中实现高效且可维护的代码。 首先,WebWork2的配置主要涉及到以下几个方面: 1. **web.xml配置**:这是所有Java Web应用...

    webwork spring hibernate 整合 示例 项目 完整 代码

    WebWork、Spring 和 Hibernate 是三个在Java开发领域中非常重要的框架。它们分别专注于Action层、IoC(Inversion of Control,控制反转)/AOP(Aspect Oriented Programming,面向切面编程)以及持久化管理。当这三...

Global site tag (gtag.js) - Google Analytics