Struts2简单搭建
struts搭建步骤:
- 1.创建一个web项目,再lib中导入所需jar包,
- 2.在web.xml中配置过滤器
- 3.②定义一个java类 action,用于处理请求,返回值类型String
- 4.在src下,创建一个名为struts.xml(只能这么写)的文件,导入约束文件,然后写一个package标签,里面定义action标签,action里面定义一个result标签
1.什么是Struts2框架?
Struts2框架是替代了servelt、jsp的一种全新的框架,用于处理用户发送的请求。
2.Struts2的历史?
在Struts2是由webwork和Struts1组合而来,其中技术上采用了webwork公司的技术,也采用了Struts1的开发模式。其实跟Struts1没关系。
3.Struts2的优点?
①自动化封装前台穿过来的参数
②参数的校验
③可以控制页面的跳转(不常用)
④防止表单的数据进行重复提交(不常用)
⑤显示等待页面(不常用)
Struts2引入了几个新的框架特性:从逻辑中分离出横切关注点的拦截器、减少或者消除配置文件、贯穿整个框架的强大表达式语言、
支持可变更和可重用的基于MVC模式的标签API, Struts2充分利用了从其它MVC框架学到的经验和教训,使得 Struts2框架更加清晰灵活。
struts2是基于MVC设计模式的Java Web框架技术之一,struts2框架按照MVC的设计思想把Java Web应用程序分为控制层,包括核心控制器
FilterDispatcher和业务控制器Action,模型层,包括业务逻辑组件和数据库访问组件,视图层,包括HTML、JSP、struts2标签等。
1、struts2的控制器组件
在基于MVC的应用程序开发中,控制器组件的主要功能是从客户端接收数据、调用模型(JavaBean)进行数据处理以及决定返回给客户某个视图。
struts2的控制器主要有核心控制器FilterDispatcher和业务控制器Action。
1)FilterDispatcher控制器
基于MVC的Java Web框架需要在Web应用程序中加载一个核心控制器,struts2框架需要加载的是FilterDispatcher。FilterDispatcher是一个
过滤器,是struts2的核心控制器,控制着整个Java Web项目中数据的流向和操作。FilterDispatcher需要在web.xml中进行配置。除了用web.
xml配置文件配置核心控制器FilterDispatcher外,struts2控制数据的操作时,还需要用到struts2的另一个配置文件struts.xml。
2)struts.xml配置文件
struts2的核心配置文件是struts.xml。用户请求提交给核心控制器FilterDispatcher后,具体由哪个业务控制器Action来完成,是在struts.
xml配置文件事先配置好的,根据配置文件struts.xml中的数据,核心控制器FilterDispatcher调用某个具体的业务控制器Action来完成数据的
处理,处理完数据后把处理结果通过其他对象返回给核心控制器FilterDispatcher,核心控制器根据struts.xml配置文件中的配置决定下一步操作。
3)Action控制器
Action是struts2的业务控制器,可以不实现任何接口或者不继承任何struts2类。Action类是一个基本的Java类,具有很高的可重用性。Action
中不实现任何业务逻辑,只负责组织调度业务逻辑模型组件。Action类完全是一个简单的Java对象,具有良好的代码重用性。Action类无须与
Servlet API关联,降低了与Servlet的耦合度,所以应用和测试比较简单。Action类的execute()方法仅返回一个字符串作为处理结果,该处理
结果可传到任何视图或者另外一个Action。
2、struts2的模型组件
模型组件是可以实现业务逻辑的模块,在实际的项目开发中,对模型组件的区别和定义是比较模糊的,实际上也超出struts2框架的范围。
struts2框架的业务控制器不会对用户请求进行实质的处理,用户请求最终由模型组件负责处理,业务控制器只提供处理场合,是负责调度
模型组件的调度器。不同的开发者有不同的方式来编写模型组件,struts2框架的目的是使用Action来调用模型组件。
Action控制器保存来自页面的数据,在Action控制器中有一个execute()方法,可以在该方法中调用业务逻辑组件完成对数据的处理,处理的
结果是返回一个字符串,又称为逻辑视图,在struts2.xml配置文件中配置了逻辑视图和实际物理视图的对应关系。业务控制器可以通过创建
模型组件的实例的方法实现对业务逻辑的调用,通常,当业务控制器需要获得业务组件的实例时,不会直接获取业务逻辑组件实例,而是通过
工厂模式来获取业务组件的实例,或者使用其他Ioc容器来管理业务组件的实例。
运行条件:
struts-2.5.20
apache-tomcat-8.5.39
Eclipse Ide
struts搭建步骤:
- 1.创建一个web项目,再lib中导入所需jar包,
asm-5.2.jar
asm-commons-5.2.jar
asm-tree-5.2.jar
commons-fileupload-1.4.jar
commons-io-2.6.jar
commons-lang3-3.8.1.jar
freemarker-2.3.28.jar
javassist-3.20.0-GA.jar
log4j-api-2.11.1.jar
ognl-3.1.21.jar
struts2-core-2.5.20.jar
- 2.在web.xml中配置过滤器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
- 3.②定义一个java类 action,用于处理请求,返回值类型String
import com.opensymphony.xwork2.ActionSupport;
/*struts搭建:
* 1.创建一个web项目,再lib中导入所需jar包,
* 2.在web.xml中配置过滤器
* 3.②定义一个java类 action,用于处理请求,返回值类型String
4.在src下,创建一个名为struts.xml(只能这么写)的文件,导入约束文件,然后写一个package标签,里面定义action标签,action里面定义一个result标签
*/
public class StrutsDemo{
public String hello() {
System.out.println("hello...");
return "success";
}
}
- 4.在src下,创建一个名为struts.xml(只能这么写)的文件,导入约束文件,然后写一个package标签,里面定义action标签,action里面定义一个result标签
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<!-- package配置详解:
package:跟项目中的包没关系,用来管理action的,
name:给这个package起个名字
(名字随意起,但是package跟package之间名字不能重复,
一般情况下,命名根据当前package的分类来命名的)
namespace:访问路径地址 前缀 跟name无关 跟其他package的namespace能不能重复 没有要求
extends:必须继承struts-default 从struts2核心包中 struts2-core-2.3.24.jar 下的 struts-default.xml中继承
abstract:抽象 声明的一个标志当前这个配置文件不能独立运行 等待被继承
-->
<!--
action配置信息详解:
name:给action起名字 决定了访问路径最后的地址
class:访问了哪个类 完整路径名
method:访问类中的哪个方法
-->
<!--
result配置信息:
name对应的是action类中的method的返回值 这个名字可以随便写
但是必须要和action类中method的返回结果一样
但是一般情况下 使用特定的
type: dispatcher 转发:转发地址栏不会变 发送一次请求 浏览器不知道转发的发生
redirect 重定向:重定向地址栏会变 发送二次请求 浏览器知道重定向的发生
标签中的值是跳转页面的地址
-->
<!-- http://localhost:8080/05struts_study/hello/haha
http://localhost:8080/项目名/包命名空间/action名-->
<struts>
<package name="/" namespace="/hello" extends="struts-default">
<action name="haha" class="one.struts.dajian.StrutsDemo" method="hello">
<result name="success">/hello.html</result>
</action>
</package>
</struts>