文档章节

Struts(一)

 梦醒时分_追梦
发布于 2016/11/09 22:08
字数 2513
阅读 50
收藏 8

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、开发包详解

                   apps:自带的示例

                   docs:文档

                   lib:jar包

                   src:源码

         2、搭建步骤:

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

                   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为后缀——放行了

明确:

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

8、struts2的内部执行图

         明确:

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

         重要:

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

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:该属性指定了常量的常量值

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

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

        

 

注意:和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有默认值:默认值是""

   

(2)配置Action

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

        属性:

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

            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取值的方式,前往指定的页面

        属性:

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

                    其默认值是success

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

                type属性常用取值:

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

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

                    redirectAction:重定向到另一个动作

12.访问Action的方式:

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

最普通的:

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

 

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

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

13、访问ServletAPI:

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

HttpServletRequest request = ServletActionContext.getRequest();

HttpSession session = request.getSessoin();

HttpServletResponse response = ServletActionContext.getResponse();

ServletContext application = ServletActionContext.getServletContext();

© 著作权归作者所有

上一篇: Struts(二)
下一篇: Hibernate(四)
粉丝 5
博文 10
码字总数 21413
作品 0
昌平
私信 提问
Struts 2再曝远程代码执行漏洞S2-037

导读 今年4月份,Apache Stuts 2之上发现的S2-033远程代码执行漏洞,以迅雷不及掩耳之势席卷而来。其利用代码很快就在短时间内迅速传播。而且官方针对这个高危漏洞的修复方案还是无效的。 悲...

linuxprobe
2016/06/22
0
0
MVC 框架 - Apache Struts

Struts 是 Apache软件基金会(ASF)赞助的一个开源项目。它最初是 Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用 Java Servlet/JSP 技术,实现了基于Java EE Web...

匿名
2008/09/07
0
8
Struts 源码学习之ActionServlet ( 一)

Struts 源码最新版本为 struts-1.3.8-src.zip ( 12-Mar-2007 00:06 ) 学习笔记使用struts-1.3.5-src.zip 的源码, 下载地址:http://archive.apache.org/dist/struts/source/ 1. 在web.x......

xiahuawuyu
2012/05/17
0
0
Apache Struts最新漏洞 远程代码执行漏洞预警

2018年11月8日,SINE安全监控检测中心,检测到Apache Struts官方更新了一个Struts漏洞补丁,这个漏洞是Apache Struts目前最新的漏洞,影响范围较广,低于Apache Struts 2.3.35的版本都会受到...

网站安全
2018/11/09
0
0
漏洞预警:Apache Struts 2 远程代码执行漏洞

Apache Struts 2是世界上最流行的Java Web服务器框架之一。然而不幸的是,有安全研究员在Struts 2上发现了一枚远程代码执行漏洞。 目前Apache官方已发布公告,该漏洞危险级别为高危。 FreeBu...

oschina
2016/03/16
11K
32

没有更多内容

加载失败,请刷新页面

加载更多

ant 中的fileset include等拷贝

拷贝一个目录到指定目录下 例:<copy todir="${basedir}/new"> <fileset dir="${basedir}/old"> <include name="appgen" /> <include name="appgen/" /> <include name=appgen/**" /> <incl......

shzwork
12分钟前
1
0
react-jianshu项目的创建

创建项目 1、github上创建仓库react-jianshu 2、将项目克隆到本地git clone git@github.com:startjcu/react-jianshu.git 3、在当前目录(项目目录的上级目录)下执行create-react-app react-...

星闪海洋
22分钟前
2
0
OSChina 周二乱弹 —— 小哥哥,你可以教我写代码吗

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @nnnm: 生活大爆炸,结束了,这部陪伴了漫长时间的情景喜剧,最终是以诺贝尔奖和大团圆收尾的。虽然,不算精彩,但也是温馨。而少年谢尔顿的...

小小编辑
今天
235
11
typescript 接口 函数类型 可索引类型

函数类型 可索引类型 数字索引签名 字符串索引签名 数字索引签名返回值 必须是 字符串索引签名返回值的子集 只读索引签名

lilugirl
今天
3
0
Oracle SQL语法实例合集

如需转载请注明出处https://my.oschina.net/feistel/blog/3052024 目的:迅速激活Oracle SQL 参考:《Oracle从入门到精通》 ------------------------------------------------------------......

LoSingSang
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部