Struts2开发笔记一

Struts2概述

1 框架概念: 实现了部分功能的半成品,让开发更轻松有序,简化企业开发

2 JAVA开发中的三大框架 Stutus2  Hibernate Spring

3 Struts2  

        基于MVC设计模式

        本质上相当于一个servlet,Filter

        Struts2作为控制器(Controller)来建立模型与视图的数据交互

        在 struts 1和WebWork的技术基础上进行了合并,以WebWork为核心

4 发展历史

    Struts1是一个高度成熟的框架,市场占有率曾超过20%,JSP/Servlet耦合非常紧密,导致了一些严重的问题,并且Struts1代码严重依赖于Struts1 API,属于侵入性框架。

    Struts 2虽然是在Struts1的基础上发展起来的,
    但是实质上是以WebWork为核心的。
    Struts2为传统的Struts1注入了WebWork的先进的设计理念,
    统一了Struts1和WebWork两个框架。

5 技术改进

    在Action的实现方面
    Struts1要求必须统一扩展自Action类,而Struts2中可以是一个POJO(Plain Ordernary Java Object)。

    线程模型方面
    Struts1一个Action实例处理所有请求,Struts 2的Action是一个请求对应一个实例,没有现成安全问题

    Servlet依赖方面
    Struts2不再依赖Servlet API,利于测试

Struts2的实现分析

xx图片

Struts2 快速入门 重点掌握

  • 下载Struts2框架

    http://struts.apache.org/download.cgi
    
    Struts 
    
    struts2目录结构
    
    apps 该文件夹包含了基于struts2 的示例应用,这些示例应用对于学习者是非常有用的
    docs 该文件夹下包含了struts2 相关文档,包括struts2 快速入门、struts2的文档以及API文档等
    lib 该文件夹下包含了Struts2框架和核心类库,以及struts2第三方插件类库
    src 该文件夹下包含了Struts2框架的全部源代码
    
  • 配置jar包到当前应用程序下

    导入
    asm-3.3.jar                         操作java字节码的类库
    asm-commons-3.3.jar                 提供了基于事件的表现形式
    asm-tree-3.3.jar                        提供了基于对象的表现形式
    commons-fileupload-1.3.2.jar        文件上传
    commons-io-2.2.jar                  io包
    commons-lang3-3.2.jar               封装了java lang基本到操作
    freemarker-2.3.22.jar               FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具
    javassist-3.11.0.GA.jar             分析、编辑和创建Java字节码的类库。
    log4j-api-2.3.jar                   输出log
    log4j-core-2.3.jar                  输出log
    ognl-3.0.19.jar                     是支持ognl表达式
    struts2-core-2.3.32.jar              struts2的核心jar包,不可缺少的
    xwork-core-2.3.32.jar               xwork的核心包,由于Struts2是由xwork的延伸 有些类依然关联着 xwork的类
    
  • 配置web.xml 根据版本配置–直接copy

    <?xml version="1.0" encoding="UTF-8"?>
    
    <web-app id="starter" 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">
    
      <!-- Filters -->
      <!-- START SNIPPET: 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>
    
    
    <!-- Welcome file lists -->
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    

  • 配置struts.xml

  • 写一个Action类

    public class HelloWorldAction extends ActionSupport {
        @Override
        public String execute() {
            System.out.println("被访问了。。。");
            return "success";
        }
    }
    
  • dtd关联

    搜索xml,XML catalog

    C:\学习\JavaEE第三个月讲课资料\day01\资料\struts-2.3.32\src\core\src\main\resources\2.3.dtd

  • src下配置struts.xml

    普通配置
    
    <!-- 包名随便定义  actio result 指定对应结果的界面 -->
    <!-- 名称空间跟路径有关系 默认为/ -->
    <!-- method指定特定方法名称 -->
    <!-- action name 指定地址栏访问路径 -->
    <!-- action class 要访问的action的全路径名称 -->
    <package name="haha" extends="struts-default">
        <action name="hello" class="com.example.struts2.HelloWorldAction">
            <result name="success">
                /struts2_helloworld.jsp
            </result>
        </action>
    </package>
    

Strust2中Action的三种写法

  • 第一种 直接写类

    public class FirstAction {
    
    public String execute() {
        System.out.println("我是第一种类型的Action");
        return "success";
    }
    }
    
  • 第二种 写类继承自Action

    public class SecondAction implements Action{
    @Override
    public String execute() {
        System.out.println("我是第二种类型的Action");
        return "success";
    }
    }
    
  • 第三种 写类继承自ActionSupport 重点掌握

    public class ThirdAction extends ActionSupport {
    @Override
    public String execute() throws Exception {
        System.out.println("我是第三中类型的Action");
        return SUCCESS;
    }
    }
    

常用ServletAPI

  • ActionContext

    获取Action的环境,可以通过actionContext获取请求参数,session等信息

  • 实现 ServletRequestAware ServletContextAware ServletResponseAware 接口获取Servlet中请求 响应 和 ServletContext信息

  • ServletActionContext 重点掌握

    HttpServletRequest request = ServletActionContext.getRequest();
        HttpServletResponse response = ServletActionContext.getResponse();
        ServletContext servletContext = ServletActionContext.getServletContext();
        PageContext pageContext = ServletActionContext.getPageContext();
    

结果类型

SUCCESS = "success";  // 数据处理成功 (成功页面)

NONE = "none";  // 页面不跳转  return null; 效果一样

ERROR = "error";  // 数据处理发送错误 (错误页面)

INPUT = "input"; // 用户输入数据有误,通常用于表单数据校验 (输入页面)

LOGIN = "login"; // 主要权限认证 (登陆页面)

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

案例一:登陆案例

用户名——————
密码——————
登陆

乱码终极解决方式

找到conf中的server.xml设置服务器编码方式

  <Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" URIEncoding="utf-8"/>

属性封装的三种方式

  • 第一种方式 在Action类中直接写属性,封装set方法 属性驱动
  • 第二种方式 在Action类中写javaBean,比如User user;在表单中提交参数时以user.username user.password形式进行命名 属性驱动
  • 第三种方式 模型驱动方式实现 ModelDriven接口

界面跳转类型配置 重点掌握

     dispatcher :Action 转发给 JSP      默认



     chain :Action调用另一个Action (同一次请求)  hehe 是一个Action的名字

        <result type="chain">
            hehe
        </result>


      redirect : Action重定向到 JSP

        <result type="redirect">
            /default.jsp
        </result>

      redirectAction : Action 重定向到Action

        <result type="redirectAction">
                hehe
        </result>   
  • 通配符配置

    增删改查
    
    
    
    <action name="user_*" class="com.example.action.SecondAction"
        method="{1}">
    

案例 图书管理系统

![](https://img-blog.csdn.net/20170711082333634?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjk4NTY4NzE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值