struts2简介

Struts简介:

StrutsApache公司提供的一个开源项目,目的是建立一个方便易用的MVC框架。本文对Struts框架的使用方式进行了简单介绍。

本文不打算讲解Struts的所有方面,因为那是不可能的,struts框架是一个功能很全面很复杂的架构。本文着重讲解如何使用struts来组织Web程序,更多更详细的内容可以参考struts官方提供的文档,或者看尚学堂提供的免费视频(本人更提倡查看官方文档)。

 

本次工程的目录如下:

实现的功能是模拟一个登陆界面,如下图所示

 

当在用户名框中输入guanxinquan在密码框中输入gxq点击登陆,将会跳转到一个成功登陆界面。

 

否则,将进入错误界面.

 

功能很简单吧,下面就让我们进入Struts的神秘世界。

 

首先创建一个TO类,用来客户机和服务器之间传递信息。描述如下:

StudentLoginInfoTO.java

package com.guan.strutsTest.TO;

 

public class StudentLoginInfoTO {

    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;

    }

   

}

这个TO类,仅仅有userNamepassword两个字段,用来从前台获取登陆信息。

然后建立一个Action类,这个类用来相应前台的Http请求。

StudentLoginAction.java

 

package com.guan.strutsTest.action;

 

import java.util.Map;

 

import org.apache.struts2.interceptor.SessionAware;

 

import com.guan.strutsTest.TO.StudentLoginInfoTO;

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.ModelDriven;

 

public class StudentLoginAction extends ActionSupport implements ModelDriven<StudentLoginInfoTO>,SessionAware{

    /*注意 实际中没有必要继承类ActionSupportstruts2版本后Action类可以不继承和不实现任何类,只需要强求相应函数返回一个字符串即可,稍后会解释这个返回字符串的作用,这里使用了系统默认的两个常量SUCCESSERROR因此继承了ActionSupport(实际中根据个人爱好选择是否继承这个类),后面实现的两个接口也不是必须的。ModelDriven接口用来将前台获取的数据赋值给一个具体的类中,但是这个过程必须满足一定的命名规则,就是说前台的标签名字要和后台类中的变量名相匹配。SessionAware接口用来处理需要ServletSession相关操作的接口,继承了这个接口,当前台传入数据时,会将Session一并传入到后台,在这个例子中,因为要记录登陆状态,所以需要设置一个Session属性,标示用户已经正确登陆*/

    private static final long serialVersionUID = 1L;

   

    private StudentLoginInfoTO studentLoginInfoTo = new StudentLoginInfoTO();//必须new一个对象,这样前台会将变量自动赋值进来

    private Map<String,Object> session;//获取到前台的Session

   

   

    public String studentLogin()

    {

    if("guanxinquan".equals(studentLoginInfoTo.getUserName())&&"gxq".equals(studentLoginInfoTo.getPassword()))    {

/*判断用户名和密码是不是正确。注意比较是常量放在前面,这是习惯,当然也有其好处,如果您将变量放在前面,您需要先判断比较的变量是不是为空,要多写两条语句*/

           this.session.put("loginUser", studentLoginInfoTo);

//将登陆的用户放到Session中,标示其登陆状态

           return SUCCESS;//返回成功字符串(实际是success字符串)

       }

       else

           return ERROR;//返回错误字符串(实际是error

    }

 

 

    public StudentLoginInfoTO getModel() {

       //ModelDriven接口唯一需要实现的函数,前台数据将赋值到您返回的变量中

       return this.studentLoginInfoTo;

    }

 

 

    public void setSession(Map<String, Object> session) {

//SessionAware接口唯一需要实现的函数,接受前台传入的Session

       this.session = session;    

    }

}

 

实际上,使用struts,前台传入的表达数据会自动赋值给后台Action的变量中,这样使用起来简单方便,这种映射需要遵守一定的规则,就是表单变量名和Action变量名必须匹配。

另外,如果您需要使用Servlet的一些内置变量,您需要实现一些接口来获取这些变量,例如RequestAwareSessionAwareApplicationAware等。

 

Struts的配置文件:

Struts中,您无需再将那些繁复的跳转配置在Web.xml中,可以简单的在Struts配置文档中完成。

struts.xml

<?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.1.dtd">

 

<struts>

 

    <constant name="struts.devMode" value="true" />

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

<!—这里配置namespace/下的Actionlogin Action中直接跳转到index.jsp -->

       <action name="login">

           <result>/index.jsp</result>

       </action>

<!—studentLoginAction有点复杂,首先当前台请求这个Action时,Struts会将请求提交给StudentLoginAction的一个实例,并执行这个实例的studentLogin方法,最后根据method指定的方法的返回值来确定其跳转路径,这个字符串与我们的方法中的字符串必须对应-->

       <action name="studentLoginAction" class="com.guan.strutsTest.action.StudentLoginAction" method="studentLogin">

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

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

       </action>

    </package>

 

    <!-- Add packages here -->

 

</struts>

 

Struts的配置文档中会很容易的配置跳转路径,并且采用Struts的通配符策略会使Struts的配置文档更简练。另外将不同功能的配置分开写成多个文档,更容易管理。

 

下面,需要在Web.xml中配置Struts的过滤器。

Web.xml

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

<web-app id="WebApp_9" 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>Struts Blank</display-name>

    <filter>

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

        <!—配置过滤器,将满足mapping的所有请求提交给StrutsPrepareAndExecuteFilter 进行处理-->

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

    </filter>

 

    <filter-mapping>

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

<!—这里将所有的请求都提交给Struts过滤器处理,实际上一个架构中可以有多个过滤器,采用不同的前缀进行区分-->

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

    </filter-mapping>

</web-app>

 

最后是jsp文件,我就不多说了,大家一看就明白:

Login.jsp

<%@ page language="java" pageEncoding="gbk"%>

 

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

<html>

  <head>

    <title>登陆</title>

  </head>

 

  <body>

   <form action="studentLoginAction">

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

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

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

   </form>

  </body>

</html>

 

Login_success.jsp

<%@ page language="java" pageEncoding="gbk"%>

 

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

<html>

  <head>  

    <title>登陆成功!</title>

  </head>

 

  <body>

    登陆成功<br>

  </body>

</html>

 

Login_error.jsp

<%@ page language="java" pageEncoding="gbk"%>

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

<html>

  <head>  

    <title>登陆失败!</title>

  </head>

 

  <body>

    用户名或密码错误! <br>

  </body>

</html>

 

我要补充一下,如果您的jsp文件中现在还有大量的java代码,那么我将替您感到悲哀,那已经太过时了!!

 

最后,我简单描述一下整个请求和处理过程。当您填完表达,点击提交按键后,系统会去寻找http://localhost:8080/StrutsTest/studentLoginActiontomcat将接受这个请求,除去前面的部分,剩下/studentLoginActiontomcat查询web.xml文件,发现所有为/的请求都提交给Struts的过滤器处理,tomcat直接将这个请求交给Struts来处理。Struts接受到这个请求,分析其namespace/而后找到叫studentLoginActionAction,创建相应的类,并将前台传入的数据和类中的对应字段相赋值,然后执行method中指定的类中方法,执行完成后,方法会返回一个字符串,Struts根据返回的字符串查找其result集合,寻找与返回字符串相匹配的result,最终跳转到指定的界面,整个请求过程完成。

 

Struts使得轻量级客户端的web服务开发变得那么轻而易举,如果要实现富客户端需要使用Ajax或者flex等,我们会在稍后的章节中进行介绍。

 

最后要看看真个程序使用的jar包,可以从官网直接下载struts-2.1.8.1-all.zipzip下包含了所有需要的包

 

这些jar包需要放在下图中的lib目录中。另外指定的配置文件要放在指定的位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值