【struts2】第一个struts2实例

一直在看struts2框架,但是却一直觉得并没有很好的理解的struts2框架的精髓,从今天开始,我决定要从新系统的再看一遍struts2。首先我们先用struts2实现一个简单的登录功能。

以下几个jar包可以实现基本的struts2框架功能:

这里写图片描述

Struts2框架的大概处理流程如下:

  1、加载类(FilterDispatcher)

  2、读取配置(struts配置文件中的Action)

  3、派发请求(客户端发送请求)

  4、调用Action(FilterDispatcher,最新几版是使用StrutsPrepareAndExecuteFilter从struts配置文件中读取与之相对应的Action )

  5、启用拦截器(WebWork拦截器链自动对请求应用通用功能,如验证)

  6、处理业务(回调Action的execute()方法)

  7、返回响应(通过execute方法将信息返回到FilterDispatcher)

  8、查找响应(FilterDispatcher根据配置查找响应的是什么信息如:SUCCESS、ERROR,将跳转到哪个jsp页面)

  9、响应用户(jsp—>客户浏览器端显示)

创建一个简单的struts2项目:

1、创建web项目(添加struts功能);
2、将struts依赖的jar包导入项目;
3、修改web.xml,添加主控制器(filter);
4、在struts.xml中配制出创建的action;(servlet在struts中叫action,action是一个普通的java类,其中有一个方法String execute();)

web.xml(配置主控制器信息)
struts.xml(配置action的信息)

基本原理:

用户输入用户名密码之后,点击提交按钮将存放数据的form表单提交给相应的action(这里是LoginAction),在该action中对用户输入的用户名和密码进行验证,根据验证结果跳转到相应的页面。

====实例解析===============================

1、LoginAction中有两个属性分别代表JSP表单的两个输入框。struts2会自动把输入框的内容通过getter.setter方法设置进来;另外一个execute()方法,这是struts2Action的主方法,提交数据后struts2会调用该方法读数据进行处理。返回值代表页面的名称,具体路径在配置文件中。

LoginAction.java

package com.lmb.struts2.action;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport{

    private String account;//账号
    private String password;//密码
    /**
     * 主方法:接收前台用户输入的数据,进行验证,然后根据验证结果进行相应的页面跳转
     */
    @Override
    public String execute(){
        if("lmb".equalsIgnoreCase(account) && "1234".equals(password)){
            return SUCCESS;//如果用户输入的用户名为"lmb",密码为"1234"则跳转到登录成功页面
        }
        return LOGIN;//否则跳转到登陆页面
    }
    public String getAccount() {
        return account;
    }
    public void setAccount(String account) {
        this.account = account;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

2、struts.xml用来配置项目中定义的action的信息;struts2配置文件中引入了package的概念,所有的result、action等都必须要配置到package中。package具有继承的特性,字子package里的action能使用父package里的资源。自定义的package一般继承自struts-default,这里面包含了struts2的默认拦截器,比如从request中获取数据并设置到action上等工作都是由struts2拦截器完成的。

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <package name="main" extends="struts-default"><!-- 定义一个package-->
        <global-results> <!-- 所有的全局result-->
            <result name="login">/login.jsp</result> <!-- 名为login的result-->
        </global-results>
        <action name="loginPerson" class="com.lmb.struts2.action.LoginAction">
            <result name="success">/welcome.jsp</result>
        </action>
    </package>
</struts>  

3、struts2 中JSP是以 的形式配置的,相当于struts1中的”forward/“。代码中配置了两个JSP页面,一个是名为success的登录成功后的页面welcome.jsp,配置在名为loginPerson的”action/”里面;另一个是全局的input,配置在全局的“global-results”里面,所有的action都能引用该JSP。另外JSP中使用struts2标签来显示数据,有关struts2标签的描述本人会在后续博客中给出。

welcome.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="struts" %><!-- 标签库taglib声明 -->

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>登录成功页面</title>
    <struts:head theme="ajax"/><!-- 声明使用Ajax主题 -->
  </head>

  <body>
    登录成功,欢迎你,<struts:property value="account"/><!-- 显示LoginAction中的account属性 -->
  </body>
</html>

login.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="struts" %><!-- 标签库taglib声明 -->

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>登陆页面</title>
    <struts:head theme="ajax"/><!-- 声明使用Ajax主题 -->
  </head>

  <body>
    <struts:form action="loginPerson"> <!-- 将该form表单提交给 loginPerson-->
        <struts:label value="登录系统"></struts:label><!-- 文字标签-->
        <struts:textfield name="account" label="账号"></struts:textfield><!-- 文本输入框-->
        <struts:password name="password" label="密码"></struts:password><!-- 密码输入框-->
        <struts:submit value="登录"></struts:submit><!-- 提交按钮-->
    </struts:form>
  </body>
</html>

4、最后,在web.xml中配置分发器,struts1中使用ActionServlet作为分发器,而struts2中使用Filter作为分发器。如果有多个Filter,要把struts2的分发器Filter作为最后一个Filter。

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">

   <!-- struts2的Filter,所有的请求都被映射到struts2上 -->
   <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>

  <!-- struts2的Filter的URI配置 -->
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <welcome-file-list> <!-- 欢迎文件列表-->
    <welcome-file>index.jsp</welcome-file> <!-- 默认为index.jsp-->
  </welcome-file-list>
</web-app>

这样,我的第一个struts2实例就够建好了,将其部署到Web服务器上,就能在浏览器中查看相应的运行效果了。其工作流程如下:
这里写图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值