Struts(一)

1、三层架构

         web层:表现层

            作用:负责接收请求参数

                    展示数据

         service层:业务层

            作用:完成项目的需求。

                    处理业务逻辑。

         dao层:持久层                                           Hibernate

            作用:对数据库进行增删改查操作的。

                    dao接口和类

                    实体类(JavaBean的一种:实体bean。和数据库的表结构一一对应)

2、表现层的模型:MVC

         明确:MVC是一个表现层的模型。model2(jsp+servlet+javabean)   model1:jsp+javabean

         M:Model       模型

           在很早以前:表单有自己的bean,FormBean表单bean。它是和表单中的数据一一对应。

           作用:封装数据的,用于层和层之间的数据传递。

           可以做模型的:

                   JavaBean(实体Bean和表单Bean)

         V:View  视图

           作用:用于展示数据的。

           可以做视图的:

                   JSP,HTML

         C:Controller [con'trol·ler || -lə] 控制器

           作用:用于控制程序流转的。

           可以做控制器的:

                   Servlet:

                      它是一个运行在服务器端的java小程序,用于接收和响应来自客户端请求,通常使用HTTP协议。

                      Servlet的生命周期:

                            出生:请求第一次到达Servlet的时候

                            活着:只要应用一直提供服务,对象一直存在

                            死亡:应用卸载或服务器宕机,对象消亡

                      Servlet是单例模式:

                            一个应用只有一个Servlet实例。

                            线程不安全。

                   Filter:

                      它可拦截访问web应用中的所有资源。并且进行控制流转。它有一个放行的功能。

                      Filter的生命周期:

                            出生:应用一加载对象创建。

                            活着:只要应用一直提供服务,对象一直存在

                            死亡:应用卸载或服务器宕机,对象消亡

                      Filter是单例模式的。

                      放行:如果有下一个过滤器执行下一个过滤器,如果该过滤器是最后一个,则前往目标资源。

                      过滤器不是目标资源。

                   WEB三大组件:Servlet,Filter和Listener全都是单例的。

3、MVC中的控制器:

   Servlet和Filter的区别:

       1、Servlet是一个目标资源,它可以在浏览器地址栏直接访问。过滤器不是目标资源,不能直接访问。

       2、他们都是单例模式,都有一个核心的方法:service,doFilter。

                   service方法中有两个参数:ServletRequest,ServletResponse

                   doFilter方法中有三个参数:ServletRequest,ServletResponse,FilterChian

            结论:

               Servlet能做的,过滤器都能做。因为他们都有请求和响应对象。但是过滤器比Servlet更强大,它不仅可以处理请求和响应,还可以控制程序能否继续执行,它有放行的功能。

               如果用过滤器做控制器,就比用Servlet做控制器更好。

       3、创建对象的时机不一样。Servlet默认是请求第一次到达。Filter是应用一加载。

4、Struts2框架

         概述:

             它是一个使用了MVC模型的表现层框架。(注意:它只能干表现层的事)

             是用了一个过滤器作为了核心的控制器。

         起源:

             在2005年之前:apache公司的struts1很流行。(struts1的核心控制器是一个Servlet)

             WebWork(XWork)的核心控制器是一个过滤器。

5、搭建开发环境

         1、开发包详解

220147_skmb_2892414.png

                   apps:自带的示例

                   docs:文档

                   lib:jar包

                   src:源码

         2、搭建步骤:

                   a、拷贝必备的13个jar包到工程的lib目录中

220217_BwHl_2892414.png

                   b、在类的根路径下创建一个名称为struts.xml的文件

                   c、导入dtd约束

                   d、在web.xml中配置核心控制器:过滤器

<!-- 配置Struts2的核心过滤器:前端控制器 -->
<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>

                  e、验证是否搭建成功:

                            成功的标准:启动tomcat时,没有报异常

6、struts2入门案例

         需求:

            通过浏览器请求一个地址,访问到struts2提供动作类。

            动作类:

                   就是我们处理请求的类。相当于在我们web阶段综合案例中的各个实现功能的Servlet。

7、入门案例的执行过程

分为2部分:

         第一部分:启动tomcat

                   加载我们的应用——加载应用的web.xml——创建核心控制器(过滤器)——加载struts.xml

         第二部分:浏览器发送请求

                   浏览器发送请求——到达核心控制

                            ——是以.action为后缀,或者没有后缀——进入struts2的核心内部

                            ——不是以.action为后缀——放行了

220311_cUwN_2892414.png

明确:

                   动作类是多例的。每个线程自己一个实例。所以不会有线程安全问题。

220335_R2lF_2892414.png

8、struts2的内部执行图

         明确:

            在实际开发中我们要做的就是:写动作类,写jsp和写配置文件。

         重要:

            配置文件是我们学习struts2的重点。

220356_DIb9_2892414.png

9、Struts2中的配置文件

         配置文件的数量:

                   一共有6个配置文件。

         6个配置文件执行时机:

                   default.properties

                            它都是key=value的形式。类似于开关。

                   struts-default.xml

                            配置的都是struts2的核心。纯struts2核心。

                   struts-plugin.xml

                            它是当我们使用了plugin的jar包时才有的配置文件。如果没用插件,就没有。

                   struts.xml

                            我们程序中的struts2核心配置。是针对当前项目的核心配置。   推荐的    

                   struts.properties

                            struts2不仅支持基于xml的配置还可以再使用.properties。但是我们不推荐使用

                   web.xml

                            配置的是struts2的一些开关性配置。靠过滤器的初始化参数配置

                            它最后加载,但是加载的只是和struts2相关的配置。

         它会按照上面的顺序逐个加载,如果遇到相同的配置,后加载的覆盖先加载的。

10、Struts常量的配置:

(1)在struts.xml文件中使用<constant> ['kɑnstənt /'kɒn-]标签配置常量

         需要指定两个必填的属性name和value

                   name:该属性指定了常量的常量名

                   value:该属性指定了常量的常量值

220419_TRUF_2892414.png

(2)在struts.properties文件中配置常量

         struts.properties是一个标准的properties文件,其格式为key-value对,即每一个key对应一个value,key表示的是Struts2框架中的常量,而value则是其常量值:

         220435_FveQ_2892414.png

 

注意:和struts.xml文件一样,struts.properties文件也应该存放于WEB-INF/classes路径下

(3)在web.xml文件中通过初始化参数配置常量

         在web.xml文件中配置核心过滤器StrutsPrepareAndExecuteFilter时,通过初始化参数来配置常量。

<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>

11.struts.xml文件的配置

(1)<package>的配置:

package元素详解:

    作用:把配置文件按照面向对象的思想来管理。给配置文件创建一个包。

    属性:

        name:包的名称。必须写,一个应用包名称必须唯一。

        extends:指定当前包的父包。子包自动具备父包所定义的内容。它就是面向对象管理配置文件的具体体现。

                我们一般都会继承struts-default这个包,该包在struts-default.xml配置文件中定义着。

                如果不继承该包,就不能使用struts2的核心功能。

        abstract:把当前包声明为抽象包。抽象包一般就是用来被继承的,里面定义的基本都是公共配置。

                 只有没有action标签的包,才能声明为抽象包。

        namespace:指定当前包的名称空间。

                    它是把访问url按照模块化的方式来管理。

                    当我们使用了该属性之后,访问URL就变成了:名称空间+动作名称

                    名称空间的写法: /xxxx   /是必须写的

                    namespace有默认值:默认值是""

    220513_GJdW_2892414.png

(2)配置Action

        作用:配置动作名称,动作类和动作方法的对应关系

        属性:

            name:指定的是动作名称。此处不能写后缀

220527_m5t3_2892414.png

            class:指定的是动作类的类全名

            method:指定的是执行的方法名称

            动作类的三种创建方式:

                第一种:使用无侵入式的创建方式

                    定义一个普通类即可

                    此种方式的弊端:失去了一些框架已经实现好的功能

                第二种:通过实现Action接口来创建动作类

                    定义一个普通类实现Action接口即可

                    默认的动作方法是:Action接口中的execute方法

                    此种方式的弊端;失去了一些框架已经实现好的功能

                        SUCCESS:一般多用于执行成功

                        ERROR:一般多用于动作方法执行产生异常

                        INPUT:一般多用于数据回显

                        LOGIN:一般多用于登录

                        NONE:只用于不返回任何结果的视图。等同于return null;


import com.opensymphony.xwork2.Action;
/**
 * 实现Action接口
 * @author xiaoqiang
 *
 */
public class StrutsDemo02 implements Action{
	@Override
	public String execute() throws Exception {
		System.out.println("StrutsDemo1中的execute执行了。。。");
		return SUCCESS;
	}
}

                第三种:通过继承Action接口的实现类来创建动作类

                    定义一个普通类,继承ActionSupport

                    实际开发中推荐的方式。以后我们自己写的动作类都需要继承ActionSupport

                    默认的动作类和默认的动作方法:

                        默认的动作类:ActionSupport

                        默认的动作方法:execute方法


import com.opensymphony.xwork2.ActionSupport;
/**
 * 继承ActionSupport类
 * @author xiaoqiang
*/
public class StrutsDemo03 extends ActionSupport{
	
	public String show(){
		System.out.println("StrutsDemo1中的execute执行了。。。");
		return "success";
	}
}

(3)result标签详解

        作用:根据name属性的取值和动作方法返回值匹配,如果一致,采用type取值的方式,前往指定的页面

220658_fqOM_2892414.png

        属性:

            name:和动作方法的返回值匹配。当一致时,就前往指定的页面

                    其默认值是success

            type:采用何种方式前往。——请求转发和重定向

                type属性常用取值:

                    dispatcher  [dɪ'spætʃə]:请求转发,默认值

                    redirect:重定向(它可以实现redirectAction的功能) [rɪːdɪ'rekt]

                    redirectAction:重定向到另一个动作

12.访问Action的方式:

(1)一个动作配置一个action        掌握

最普通的:

220725_jrk6_2892414.png

(2)使用一个通配符来配置

 

(3)使用多个通配符来配置          掌握

220742_92wO_2892414.png

(4)使用动态方法调用             了解

13、访问ServletAPI:

使用的是ServletActionContext对象中的静态方法

HttpServletRequest request = ServletActionContext.getRequest();

HttpSession session = request.getSessoin();

HttpServletResponse response = ServletActionContext.getResponse();

ServletContext application = ServletActionContext.getServletContext();

转载于:https://my.oschina.net/changenow/blog/785319

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值