Struts2框架第一篇

这是struts2框架第一篇,一共三篇,十分经典总结,需要的希望大家关注我,有很多关于java的内容知识总结

第一部分:今日技术操作及其概述

1.框架概述
*什么是框架
半成品
二次封装
框架(framework)是一个基本概念上的结构,用于去解决或者处理复杂的问题框架,即framework。其实就是某种应用的半成品,
就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。
*框架的优点
1).提高开发效率
2).代码整洁/干净
3).方便维护和调试bug
4).方便协同开发

*我们为什么使用struts2框架
    struts2框架是一个在web层应用的mvc框架
    //我们使用struts2框架就和使用servlet是一样的,他可以帮助我们完成之前JSP、servlet、javabean完成的功能

2.javaee开发中常用的框架
SSH (SSM SSI)
SSH struts2 spring hibernate
SSM(SSI) springmvc spring mybatis(ibatis)
SSH 它是企业开发中比较主流的一套架构。

*Java中SSH框架在开发中所处的位置
    SSH 架构就是 strut2、spring、hibernate三大框架
        web层(表现层):在以前开发中,web层主要使用的是jsp、servlet等技术,  strut2框架就在web层
        service层(业务层):主要完成业务的逻辑操作,spring不能说完全在service层,spring是一栈式框架,可以在web、service、Dao层都存在
        Dao层(持久化层):主要作用是与数据库进行交互,完成CRUD操作(增删改查),hibernate 在持久化层
        //以上三层是我们服务器端的操作

3.Struts2框架介绍
*什么是struts2框架
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互
Struts2=struts1+webwork

*问题:struts2是一个mvc框架,它的mvc是什么?
    javaweb开发中的mvc,是在jsp的model2模式中提过
        Model------javabean
        View--------jsp
        Controller----servlet

    核心点:
        1.拦截器 interceptor
        2.Action
        3.ognl与valueStack

4.怎样使用Struts2框架 ★★★★★
首先要上网下载它的jar包。
步骤:
[1].导入相关的jar文件
[2].需要在web.xml文件中配置一个Filter(只有配置了StrutsPrepareAndExecuteFilter它才可以使用struts2框架)
[3].struts.xml配置(在src下面配置,他是struts2框架的一个核心配置文件)
[4].创建Action来完成逻辑操作

//详细步骤:
    //1.导入相关文件jar文件需要在网上下载,搜索struts2官网,但是下载会比较慢,在资料里面有下载好的struts2 2.3.24版本,
    //里面有许多目录:其中apps他就是一些示例代码  docs就是一些文档  lib就是相关的jar包  src就是源代码,其中lib下面有107
    //个jar包,我们不能全部拷贝到项目中,只是使用其中的一部分。究竟是哪一部分我们可以参考apps里面的示例代码.
//2.只有配置了filter这个过滤器,才能使用struts2框架
    //3.struts.xml是Struts2当前应用程序的一个核心配置文件,把这个一配置就可以用了  //struts 不是struts2
//4.创建action就是创建一个action的类

5.struts2执行流程 ★★★★★
//老师上课总结:
1,请求触发
2,触发web.xml的过滤器,struts2开始工作( 加载配置文件 | 第一次是初始化拦截器,后面都是拦截器要对请求进行拦截处理 )
3,匹配请求和struts.xml中定义的action,执行action中的对应方法
4,如果涉及页面跳转,则会根据方法的返回值进行跳转(根据action的result子标签的name属性进行匹配)

//自己总结:
1.当浏览器向服务器发送一个请求
2.这些请求会被StrutsPrepareAndExecuteFilter拦截  
//该filter其实做了很多事情,[1]加载拦截器interceptor [2]根据struts.xml文件配置访问action
3.会调用strtus2框架默认的拦截器(interceptor)完成部分功能
4.根据struts2.xml配置文件里面的内容才能找到访问哪一个action,在执行Action中操作
(根据struts2.xml配置文件去调用指定的action)
5.根据Action中方法的执行结果的返回值跳转到相应的结果(result)视图,也就是相应的jsp

//StrutsPrepareAndExecuteFilter核心控制器,只有配置了这个filter,我们struts2框架才能使用
    //Strtus2的默认拦截器(interceptor)它们是在struts-default.xml文件中配置,这个配置文件在项目下java resources
    //下libraries --> web app libraries --> struts2-core-2.3.24 --> struts-default.xml里面,这里面有很多
    //的 <interceptors>,里面还有许多defaultStack,也就是拦截器栈,这个栈里面帮助我们定义了许多interceptor。
//注意:这个xml文件是在strtus-core.jar包中。
//默认的拦截器是在defaultStack中定义的。

6.struts2框架完成简单登录操作 ★★★★★
*使用struts2框架完成登陆操作的步骤
[1]导入13个jar包
[2]配置文件 在web.xml里面配置一个StrutsPrepareAndExecuteFilter
[3]在WebContent 下面创建一个jsp文件,起名叫login,jsp,
[4]创建一个登陆成功的jsp,用做用户登录成功后跳转的页面
[5]创建一个登陆失败的jsp,用做用户登录失败后跳转的页面
[6]创建一个struts.xml 在src下面创建
[7]最后创建一个LoginAction的servlet (就把LoginAction看成我们以前学习的servlet)

*在LoginAction中如何得到username与password
    可以直接在Action类中提供成员属性(属性和表单name值一样),并为其提供get/set方法。就可以得到请求参数

    private String username;  
    private String password;
    提供相应的get/set方法

*如果实现路径跳转?
    1.我们可以给action中的方法添加一个String返回值
    2.在struts.xml配置文件中,在其对应的action配置上通过<result>来确定跳转的路径。

    //针对第一点:
    public String login(){
    //判断比较
    if("tom".equals(username) && "111".equals(password)){  //这里面的username和password一定要和上面private私有的值一样
        //正确
        return "success";
    }else{
        //错误
        return "failer";
    }

    //针对第二点:
    <result name="success">/success.jsp</result>
    <result name="failer">/failer.jsp</result>

7.struts2源代码导入
*源代码在src下

*对于struts2框架它的源代码我们主要使用三部分
    [1]struts2核心部分源代码
        ctrl按住想要看的代码的源代码,在源代码里面有以org.apache.struts2开头的包,就是struts2核心部分的源代码。
    点击上面的按钮Attach Source,我们需要关联他的核心部分,因为他是目录,我们点击Folder那个按钮,在里面选择目录
    src下面有个core(核心)--> main -->  java 一关联就可以了

    [2]struts2的xwork核心部分源代码
        如果你需要xwork核心源代码就在下面的路径下去寻找
        src\xwork-core\src\main\java\com\opensymphony\xwork2

    [3]struts2的插件的源代码
        如果你需要struts2的插件的源代码就在下面的路径下去寻找
        src\plugins

8.struts2.xml配置文件的加载顺序 ★★★★★
default.properties 加载一些默认常量
struts-default.xml 加载框架的默认配置(默认配置就是初始化配置)
struts-plugin.xml 加载插件的默认配置
struts.xml 加载自己定义配置(修改常量值)
web.xml 加载strtus2框架在web.xml文件中的相关配置

9.struts.xml文件配置介绍 ★★★★★
package配置
name属性 作用:定义一个包的名称,他必须唯一,名字可以随便取,也可以在配置文件中定义多个package
namespace属性 作用:主要与action标签的name属性联合使用来确定一个action的访问途径 //该访问途径在jsp里面form表单里
extends属性 作用:指定继承自哪个包(一般值是struts-default,他在项目下struts-default.xml里面)
//这里package是管理action的,也就是说在配置文件中所有的action必须在package中

扫描二维码关注公众号,回复: 3120881 查看本文章
action
    name属性      作用:主要是与package的namespace联合使用来确定一个action的访问路 径
    class属性         作用:用于指示当前的action类(class里面是类的全路径)
    method属性    作用:用于指示当前的action类中的哪个方法执行

//如果在action中,只写name不写class和method,它默认走ActionSupport这个类,会执行其中的excute方法,这个方法

//默认的返回值是success,也就是说result的name属性默认值是success,默认的跳转方式是请求转发

result
    它主要是用于指示结果视图
    name属性      作用是与action类的method方法的返回值进行匹配,来确定跳转路径
    type属性      作用是用于指定跳转方式,默认是请求转发

10.关于action配置中的class与method的默认值以及result中的name与type默认值问题
默认类 ActionSupport //action配置中的class的默认值是ActionSupport
默认方法 execute //action配置中的method的默认值是excute
默认返回值 success //result的name属性默认值是success
默认跳转方式 dispatcher //result的跳转方式是请求转发dispatcher

11.struts2框架的常量配置介绍
*我们怎样可以定义常量
可以在src下创建一个strtus.properties配置文件
可以在web.xml文件中配置
可以直接在strtus.xml文件中定义常量 (推荐)
//项目下 –> Libraries –> web app Libraries –> struts2-core-2.3.24.jar –> org.apache.struts2
//–> default.properties 在这里面看常量和值,这样一个键值对,具体的name和value,可以在上面路径的default.properties
//里面找到对应的粘贴复制即可

        <!-- 声明常量 -->
    <constant name="struts.i18n.encoding" value="UTF-8"></constant> <!-- 说明struts2框架是utf-8,可以帮助我们解决post请求乱码问题 -->
        <!-- <constant name="struts.action.extension" value="action"></constant> --><!-- 指定访问strtsu2框架路径的扩展名 -->
    <constant name="struts.devMode" value="true"></constant>
        <!-- 配置这项后,它会提供更加详细报错信息,以及在struts.xml文件修改后不在需要重启服务器 -->

    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant><!-- 开启动态方法调用 -->

12.struts2的action详解
*Struts2中的action,主要是完成业务逻辑操作。Action替代在servlet中完成的作用。

*action类的创建的三种方式
    [1]创建一个pojo类
        //pojo类就是一个简单的java对象,Pojo类就是没有实现任何接口没有继承任何类
        //优点:无耦合   缺点:所有的功能都要自己完成

    [2]创建一个类实现Action的接口
        //优点:耦合度低   缺点:还是需要自己来完成功能

    [3]创建一个类继承ActionSupport类
        //ActionSupport类也实现了Action接口。action是ActionSupport的子类
        //我们在开发中一般会使用这种方案:    优点:具有丰富的功能,例如  表单校验 错误信息设置  国际化   缺点:耦合度高
    //继承ActionSupport,我们可以用ActionSupport这个action的父类为我们提供的一些方法,比如错误信息提示的方法
    //比如  this.addActionError("用户名和密码错误"); 这里面的addActionError就是父类里面的方法

*action创建好后,他的访问方式
    [1]直接通过struts.xml配置文件中的<action>标签来配置,通过method来指定访问的方法,如果method没有,

默认访问的是execute的方法
[2]简化的action访问方式,可以使用*通配符来访问(不建议)

13.Struts2框架封装数据
*模型驱动:
让Action类要实现一个指定接口ModelDriven
实例化模型对象(就是要new出来javaBean)
重写getModel方法将实例化的模型返回。

public class LoginAction extends ActionSupport implements ModelDriven<User>{  //实现一个指定接口ModelDriven
                                            //实现ModelDriven<User>这个模型驱动,可以自动实现struts2的自动存储  
private User user = new User(); //实例化模型对象(就是要new出来javaBean)

@Override       //实现这个接口就要重写里面的方法
public User getModel() {    
    return user;
}

14.通配符匹配url

*号所代表的内容就是对应的方法名

复习笔记:

*今日重点
1).struts2框架如何完成原来由servlet完成的工作。
2).Struts2框架如何完成请求参数的封装处理
3).Struts2框架如何完成页面跳转。
a)我们可以给action中的方法添加一个String返回值
b)在struts.xml配置文件中,在其对应的action配置上通过来确定跳转的路径。

Struts2框架入门案例~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~★★★★★★★★★★
*在struts2框架中,我一点击链接href时,action里面的方法就能执行该怎么处理思路
我在web.xml文件中已经将struts2的filter配置了,也就是说我的struts2框架生效了,当我请求发送的时候
filter会拦截这个请求,拦截请求后struts2框架就会帮助我们根据你在struts.xml文件中的配置将类中指定的方法给访问了
//这是JSP页面里面的
//这个就是struts.xml里面的action标签
这里的method就是要执行类的方法名,class里面就是类全名,name就是你的JSP页面上href里面你所访问的路径名

代码案例:
[1] 在web.xml里面配置filter,让struts框架生效

struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/ *</url-pattern>
</filter-mapping>

[2] 在index.jsp页面给一个超链接a,给一个路径href
<body>
<a href="${ pageContext.request.contextPath }/struts2">struts2入门</a>
</body>
我们以前要写servlet,点击struts2入门我们要跳转到servlet,现在有了框架技术就不需要了

[3] 我们创建一个action类
public class Struts2Action {
public void show(){
    System.out.println("Struts2 你好..........");
}

}

问:写到这里我想做的事情是:我在谷歌网站上输入路径网页上显示struts2入门,当我一点击jsp里面的链接时,我就让

他执行action里面的show方法,如果执行成功,那么”Struts2 你好”肯定会打印在控制台上,那么该怎么办呢?
答:我们先来理一下思路:当前我们的操作是因为我在我们的web.xml文件中将struts配置了filter,那么也就是说当前我们
的struts2框架生效了,那么当我请求发送的时候这个filter会拦截你的请求,拦截到你的请求struts2框架就会帮助我们根据你在
struts.xml文件中的配置,将我们指定的类中的方法给访问到,所以下面我们还要在struts.xml配置文件里面写路径

[4] 在struts.xml文件中给一个action标签
<package name="default" namespace="/" extends="struts-default">
<action name="struts2" class="com.itheima.action.Struts2Action" method="show" ></action>

//

这个时候我一运行,在网页上输入http://localhost:8080/struts2_day001/index.jsp 网址后,页面就会跳出"struts2入门"

当我一点击”struts2入门”的时候,就会在控制台打印出”Struts2 你好……….”,所以我们的方法就被访问到了
~下面我们就把上面的小案例分析一下~
我们创建了一个index.jsp文件,在这个文件里面我们写了一个超链接,超链接里面我们写了一个路径 /struts2,
在action里面,其实他就是一个普通简单的java类,里面有一个show方法,方法里面打印了一句话。
其实就是当我们在浏览器访问index.jsp页面时,看到了连接,点击后就会发送请求,这时请求的路径是 /struts2,
因为当前我们的工程已经配置了一个StrutsPrepareAndExecuteFilter这样的filter,他拦截了所有的请求,
因为/ 这个filter里面是/ ,就是所有的意思,就会根据请求路径在struts2.xml文件中
进行判断调用指定的action标签的方法,因为请求路径是struts2入门
里面的/struts2,所以我们在struts.xml中通过namespace=”/”和action中的 name=”struts2”这两个加起来和路径/struts2一致
匹配成功后,系统就能找到action标签中的name为struts2,也就能访问到class(类名全路径),同时也就能访问method中的
show方法,所以就执行show方法从而打印里面的内容。

*我们在开发中,在jsp或者xml等一些文件中,按alt+ / 就会有提示,如果没有。就需要配置dtd约束
window –> preferences –> 输入框输入xml –> 选择xml catalog –> 选择add添加

猜你喜欢

转载自blog.csdn.net/pf503603/article/details/82498697