一个简单的struts 2实例讲解

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/moon__stone888888/article/details/51803997

 

        初学SSH框架,最好的办法就是多动手,在实践中去理解框架。下面用struts 2的框架搭建一个简单的登录示例,首先是框架的搭建,然后是代码的实现及配置,虽然例子简单,但是对于理解Struts 2有很好的作用。

         首先开始准备工作,搭建Struts 2的框架。


        1.   新建一个WebProject,工程名为Struts2_EXA。

 

        2.   导入Struts 2框架,如果是比较新的IDE,通常有两种方法,一种通过IDE导入Struts 2框架,另一种可以到网上下载struts2的最新版本:http://struts.apache.org/download.cgi#struts20111

下载struts2自少要保证有六个基本包:

struts2-core-2.1.6.jar:开发的核心类库
freemarker-2.3.13.jar :struts2的UI标签的模板使用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包


         这些包的文件名在后面的版本号上可能会有出入。我的IDE是MyEclipse2014,自带有Struts 2, 可以通过右键点击新建的Web项目,“MyEclipse->Project Facets[Capabilities]->Install Apache Struts2.x Facet”来导入struts2框架

        这个例子是通过MyEclipse自动导入的,喜欢自动动手的同学可以网上下载最新的Struts 2框架,将这六个组件包复制到Web工程下的WEB-INF/lib目录中,这些组件其实就是编译好的类文件。

 

        3、接下来就是配置struts.xml文件。这个文件就好像起着一个过滤器的作用,用户发来的请求要经过该文件的过滤,根据用户请求中所请求的处理类型,来选择相应的处理逻辑。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE strutsPUBLIC "-//Apache SoftwareFoundation//DTD Struts Configuration 2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd">

<struts>

   <package name="example" namespace="/example"extends="struts-default"> 

        <action name="login"class="com.su.Login" method="execute"> 

            <resultname="success">/WEB-INF/result/success.jsp</result> 

            <resultname="fail">/WEB-INF/result/fail.jsp</result>

        </action>

     </package>

</struts>   

 

        在struts.xml中,是采用package来管理各种action的。

        package标签中的namespace指定了该包的命名空间。

        extends是说当前这个包继承自struts-default包,可以在struts2-core-2.2.3.1.jar中的struts-default.xml文件中找到这个包,这个包被定义成抽象的,它不能包含有action。

        包中的每一个action标签都和一个逻辑处理类进行了映射,name指定了这个action的名字,和包的namespace组合起来,可以直接访问这个逻辑处理类。

        class指定了逻辑处理类的位置,如果不小心写错,浏览器会报404错误,method指定了进行逻辑处理类中进行逻辑处理的方法,这个execute很重要,而且它有固定的返回类型,就是String。

       result标签就是根据逻辑判断之后,execute方法返回的字符串,根据返回的字符串,来进入到指定的页面。这里一定要把跳转的地址写清楚,明白。否则浏览器会报404的错误

 

        3.      建立login.jsp文件:

<%@ page language="java"import="java.util.*" pageEncoding="GB18030"%>

<%

Stringpath = request.getContextPath();

StringbasePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">

<html>

  <head>

    <base href="<%=basePath%>">

   

    <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>

 

  <script type="text/javascript">

  // 验证输入不为空的脚本代码

 function checkForm(form)

  {

    if (form.username.value == "")

   {

     alert("用户名不能为空!");

     form.username.focus();

      return false;

   }

   if (form.password.value == "")

   {

     alert("密码不能为空!");

     form.password.focus();

      return false;

    }

    return true;

  }

  </script>

 

  <body>

    <form action="/Struts2_EXA/example/login" method="post" onSubmit="returncheckForm(this);"> 

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

        密码:<input type="password" name="password"/><br/> 

        <input type="submit" value="登录">

      <input type="reset" value="重置">

    </form>  <!--  -->

  </body>

</html>

        这里的action就对应了struts.xml里面的action,action="/Struts2_EXA/example/login"这里的位置不能写错,否则会报404浏览器错误。

 

        4.   建立success.jsp和fail.jsp,这两个文件放到/WEB-INF/result目录下

success.jsp的内容:

<%@ page language="java" import="java.util.*"pageEncoding="GB18030"%>

<%

String path = request.getContextPath();

String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

 

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

<html>

  <head>

    <base href="<%=basePath%>">

   

    <title>sucess</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>

             登录成功!  <br>

  </body>

</html>

 

 

 

  fail.jsp的内容:

<%@ page language="java" import="java.util.*"pageEncoding="GB18030"%>

<%

String path = request.getContextPath();

String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

 

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

<html>

  <head>

    <base href="<%=basePath%>">

   

    <title>failpage</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>

            登录失败! <br>

  </body>

</html>

 

        5.   在src目录下,编辑Login类

package com.su;

 

public class Login {

  

   private String userName = "success"

    private String password;

   

    public StringgetUserName() { 

        return userName

       //return"success";

    }

   

   

    public voidsetUserName(String userName) { 

        this.userName =userName; 

    }

   

   

    public StringgetPassword() { 

        return password

    }

   

   

    public voidsetPassword(String password) { 

        this.password =password; 

    }

   

    public Stringexecute() { 

        if("suo".equals(this.userName)&& "123".equals(this.password)) 

            return "success"

        else 

            return "fail"

    }

 

}

 

        6.      配置web.xml。完成核心监听器注册

<?xml version="1.0"encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://xmlns.jcp.org/xml/ns/javaee"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"id="WebApp_ID" version="3.1">

  <display-name>Struts2_EXA</display-name>

  <welcome-file-list>

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

   <welcome-file>index.html</welcome-file>

   <welcome-file>index.htm</welcome-file>

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

   <welcome-file>default.html</welcome-file>

    <welcome-file>default.htm</welcome-file>

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

  </welcome-file-list>

  <filter>

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

   <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

  </filter>

  <filter-mapping>

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

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

  </filter-mapping>

</web-app>

 

 

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

 

 

        经过上面几步,一个示例已经完成,启动Tomcat服务器,在地址栏输入http://locathost:8080/Struts2_EXA,进入登录界面,就可以开始你的操作了。

 

展开阅读全文

没有更多推荐了,返回首页