登录例子

步骤一,新建struts2_login项目,并导入struts2的六个基本jar包。

  struts2-core-2.1.6.jar :开发的核心类库
  freemarker-2.3.13.jar :struts2UI标签的模板使用freemarker编写
  commons-logging-1.0.4.jar :日志包
  ognl-2.6.11.jar :对象图导航语言,通过它来读写对象属性
  xwork-2.1.2.jar :xwork类库,struts2在其上进行构建
  commons-fileupload-1.2.1.jar:文件上传组件,2.1.6版本后必须加入此jar

特别需要说明的是目前strust2的最新版本是struts-2.1.6,它作为2.1.X的正式版。特别要注意导入commons-fileupload-1.2.1.jar包,%在此jar包中包含了RequestContext类,如果不导入该jar包将会报异常。


步骤二,建立LoginAction文件,主要代码如下:

package com.yzx.web.action;

import com.opensymphony.xwork2.Action;

public class LoginAction implements Action {

    private String username;
    private String passsword;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPasssword() {
        return passsword;
    }

    public void setPasssword(String passsword) {
        this.passsword = passsword;
    }

    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        if (username.equals("1"))
            return "loginSuccess";
        else
            return "loginFailure";
    }

}

说明:实现了Action接口,主要是为了保证execute的正确定义,其实我们也可以不实现此接口,只要能保证execute方法书写的正确书写(方法名,返回值)。

 

步骤三,在struts.xml文件中注册LoginAction。此配置文件要放在src目录下,实质就是成为classpath环境变量下的文件。主要代码如下:

<?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="myFirst" namespace="/" extends="struts-default">
        <!-- login.jsp中的<form action=...>属性值就会参照此name属性。 -->
        <action name="login" class="com.yzx.web.action.LoginAction">
            <!-- result的name对应的是LoginAction里面的execute里返回的值 -->
            <result name="loginSuccess">/success.jsp</result>
            <result name="loginFailure">/failure.jsp</result>
        </action>
    </package>
</struts>

说明:package后面会有详细说明。action元素中的name属性值指定了此action所指定的请求路径为“login.action”。后面login.jsp中的<form action=...>属性值就会参照此name属性。

 

步骤四、提供jsp页面
login.jsp主要代码:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>登录</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

</head>

<body>
request.getContextPath():是为了解决相对路径的问题,可返回站点的根路径
    <form action="<%=request.getContextPath()%>/login.action" method="get">
        户名:<input type="text" name="username"><br> 密码:<input
            type="password" name="password"><br> <input
            type="submit" value="login">
    </form>
</body>
</html>

 

failure.jsp主要代码

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<body>
    这一句<%@ taglib prefix="s" uri="/struts-tags"%>就是从地址/struts-tags下面寻找标签库,它定义在Struts
    2库文件struts2-core-2.0.11.jar里面的文件META-INF/struts-tags.tld里面。
    <br> 登录失败,错误的用户名:
    <s:property value="username" />
    <br>
    <a href="<%=request.getContextPath()%>/login.jsp">返回</a>
</body>
</html>

 

 

说明:使用了标签库,在struts2中使用标签库非常简单,只需要像上面那样导入标签库便可以使用所有的struts2的所有标签

success.jsp主要代码

 

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
    <body>
    登录成功!
  </body>
</html>

 

步骤五、配置web.xml。完成核心监听器注册。内容如下:

说明:注释掉的部分为以前2.1.4版本中用的核心filter类。StrutsPrepareAndExecuteFilter类的init方法将会读取类路径下默认的配置文件struts.xml,并以javabean形式存放在内存中,以后struts2对用户的每次请求将使用内存中数据,而不是重读struts.xml文件。

 

步骤六、发布测试。
简要分析执行流程:
  当输入login.jsp访问jsp页面填写完相关信息并提交给login.action时,它会首先被在web.xml中配置的过滤器监听到,过滤器会去查找strust.xml文件,并结合namespace查找名为login的action,查找到此action便交给其处理,LoginAction内部会执行execute方法,并返回结果result(result也是参照的struts.xml中action下的result配置)。 关于表单传参,主要是参照的action中的方法名,而非属性名。

工程图:

效果图:

 

 

 

 

 

 

posted @ 2016-04-04 11:41  沉默的羊癫疯  阅读(128)  评论(0编辑  收藏  举报