Struts2初体验

Struts2简介:Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
Struts 2是在WebWork2基础发展而来的。

注意:struts 2和struts 1在代码风格上几乎不一样。

Struts 2 相比Struts 1的优点:

1、在软件设计上Struts 2 没有像Struts 1那样跟Servlet API 和 struts API 有着紧密的耦合。Struts 2的应用可以不依赖于Servlet API和Struts API 。
2、Struts 2 提供了拦截器,利用拦截器可以进行AOP编程。
3、Struts 2 提供了类型转换器。
4、Struts 2 提供支持多种表现层技术,如:JSP 、 freeMarker等。
5、Struts 2 的输入校验可以指定方法进行校验。
6、Struts 2 提供了全局范围、包范围和Action范围的国际化资源文件管理实现。

Struts 2 体系结构 :
1、Web浏览器请求一个资源。
2、过滤器Dispatcher查找方法,确定适当的Action。
3、拦截器自动对请求应用通用功能,如验证和文件上传操作。
4、Action的execute方法通常用来存储和重新获得信息。
5、结果被返回到浏览器。

使用Struts 2 开发程序的基本步骤

搭建Struts 2 开发环境
1、找到开发Struts 2的应用需要用到的jar包。
2、编写Struts 2的配置文件。
3、在web.xml中加入Struts 2 MVC启动框架配置。

开发Struts 2 最少用到的jar文件:

  Struts-core-2.x.x.jar : Struts 2 框架的核心类库

  xwork-2.x.x.jar : XWork类库,Struts 2 在其上构建

  ognl-2.6.x.jar : Object Graph Navigation Language , Struts 2 框架通过其读写对象的属性。

  freemarker-2.3.x.jar : Struts 2 的UI标签的模版使用 Freemarker编写。

  commons-logging-1.1.x.jar : ASF出品的日志包。

  commons-fileupload-1.2.1.jar : 文件上传组件。
  
  struts2-dojo-plugin-2.3.4.jar:为struts所提供的一些控件例如:日历

Struts2中各种配置文件详解

1、struts.xml文件

struts.xml文件直接新建在src目录下,那样部署的时候会自动发布到WEB-INF/classes目录下,或者直接创建在WEB-INF/classes目录下面。
struts.xml是 Struts 2 的核心配置文件,主要用于配置开发人员编写的action。

<?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:包名,唯一的,必选项
        namespace:命名空间,唯一的,相当于房间号。可选项,省略情况下是“/”
        extends:继承
            extends=“struts-default”:struts2框架底层提供的核心包struts2-core-2.3.3.jar下的struts-default.xml文件
            为什么要继承这个struts-default.xml文件
                因为struts框架底层提供的struts-default.xml声明了所有的拦截器和拦截器栈。
                我们知道struts2框架运行时执行struts-default.xml中的拦截器栈完成必要功能。
                如果不继承struts-default.xml文件,就没有办法使用struts2提供的所有拦截器。

     -->
<!-- 所有的Action定义都应该放在package下 -->
    <package name="包名" extends="struts-default">
     <!--  
            action:
            name:对应页面请求链接的后面半部分
            class:对应要执行的类的完整路径
        -->
        <action name="login" class="LoginAction">
         <!-- 
            result:结果类型
                name:对应的是执行的类的方法的返回值
                 后半部分文本内容:转向的页面
            -->
            <result name="error">/error.jsp</result><!-- 账户密码错误跳转登录页面重新输入 -->
            <result name="success">/welcome.jsp</result><!-- 账户密码正确跳转此页面 -->
        </action>
    </package>
</struts> 

2、web.xml文件
在Struts 2中,Struts框架是通过Filter启动的,他在web.xml中的配置如下:

<!-- 配置Struts2 核心 Filter -->
  <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>

 在StrutsPrepareAndExecuteFilter的init()方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作。

  注意:struts 2 读取到 struts.xml的内容后,以javabean形式存放在内存中,以后Struts 2对用户的每一次请求处理将使用内存中的数据。

  Filter 过滤器是用户请求和处理程序之间的一层处理程序。它可以对用户请求和处理程序响应的类容进行处理,通常用于权限、编码转换等场合。

视图层页面login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
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>登录页面</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>
               <h3>登录页面</h3>
               <form action="loginAction" method="post" >
                   用户名:<input type="text" name="uname"/><br />
                   密码:   <input type="password" name="upassword" ><br />
                   <input type="submit" value="提交登录" >
               </form>
  </body>
</html>

控制层loginAction.java


/**
 * 控制层
 */
public class loginAction {

    /** 
     * 此属性用来接收form表单提交过来的值,属性名与form表单中name属性名一致
     * 必须生成get,set方法 */
    private String uname;
    private String upassword;

    public String execute(){
        if(uname!=null && uname.equals("admin") && upassword.equals("123")){
            //进入则代表账号密码输入正确
            return "success";
        }
        return "error";
    }
    /** JavaBean */
    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getUpassword() {
        return upassword;
    }

    public void setUpassword(String upassword) {
        this.upassword = upassword;
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值