Struts2 简介
首先明确,Struts2 是一个基于 MVC 设计模式的 WEB 层框架。它本质上相当于一个servlet,在 MVC 设计模式中,Struts2 作为控制器(Controller)来建立模型与视图的数据交互。
Struts2是 Struts1 的下一代产品。是在 struts1 和 WebWork 的技术基础上进行了合并的以 WebWork 为核心全新的框架。采用拦截器的机制来处理用户的请求。
常见 WEB 层框架:Struts2, Struts1, Webwork, SpringMVC。WEB 层框架的特点是基于前端控制器模型来设计。
快速入门
下载strusts框架
目录结构
- apps: Struts2提供的应用,里面就是一个最简单的一个项目
- docs: Struts2的开发文档和API
- lib: Strtus2框架的开发的jar包
- src: Struts2的源码
创建一个web工程
点击 file -> new -> project
,找到 Java Enterprise
,一般就在 Java
的下一个,选择 Web Application
,其他的全部默认,点击 next
引入jar包
所需 jar 包全部在 lib 目录下,准备工作做完,下面开始写代码
执行流程
配置前端控制器
我们说,Struts2 是 WEB 层框架,而 WEB 层框架都是基于前端控制器来实现的。好,那我们先来配置一下前端控制器
我们知道,一个 WEB 工程,最先加载的是 web.xml
,我们就在这里面配置,将下面这段代码添加进去
<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>
这段代码的意思就是,我们配置了一个 strust2 类型的过滤器叫 struts2,过滤所有请求,也就是 <url-pattern>/*</url-pattern>
配置 strust.xml
我们刚配置好了一个 strust2 类型的过滤器,那现在来配置一下strust2
在src当中创建一个配置文件 strust.xml,将下面这段代码添加进去
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="struts" extends="struts-default">
<action name="hello" class="com.mju.cn.HelloAction">
<result name="success">./my.jsp</result>
</action>
</package>
</struts>
这段代码的意思就是,我们配置了一个 action 叫 hello 指向 com.mju.cn.HelloAction 类,如果访问 hello.action 的话,这个类就响应,结果是 success 的话,就跳转到 my.jsp
创建 action 类
在源码目录下,创建一个类,复制下面代码:
package com.mju.cn;
public class HelloAction {
public String execute(){
System.out.println("接受到一个请求");
return "success";;
}
}
execute 方法是固定写法,类相应就默认执行这个方法,return 是返回信息,回到 action 里面,看看 result 里面有没有一个叫 success 的
创建 jsp
刚才还有一个 my.jsp 没创建是吧,在 web 目录下新建:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>I'm here~</h1>
</body>
</html>
配置网页入口,在 index.jsp 里写一个链接,指向 hello.action
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<a href="hello.action">Hello Struts</a>
</body>
</html>
运行项目
执行流程:
注:配置文件可以在 blank 项目的 classes 目录下找到
相关配置
配置文件加载顺序
- default.properties
- struts-default.xml
- struts-plugin.xml
- struts.xml
- struts.properties
- web.xml
后配置的常量的值会覆盖先配置的常量的值
Package 和 action
Package
包,这个包与Java中的包的概念不一致。包为了更好管理action的配置。属性:
- name 包的名称,只有在一个项目中不重名即可。
- extends 继承哪个包,通常值为struts-default。默认我们继承的是Struts-default。在这个包当中,定义了很多结果类型和很多的拦截器,继承了这些东西之后,action才有了这些功能。
- namespace namespace+name共同决定了访问路径。名称空间有三种写法,带名称的名称空间 namespace=”/aaa” 根名称空间 namespance=”/” 默认名称空间 namespace=” ”
- abstract 抽象的,用于其他包的继承,现在这个包想被别人继承,设置abstract值为true,设置成abstract后就不能用自己运行了
action
配置Action类。属性:
- name 与namespace共同决定访问路径
- class Action类的全路径
- method 执行Action中的哪个方法的方法名,默认值execute
- converter 用来自定义类型转换器,一般不设置,内部提供的转换器已经够用
常量配置
在Struts2的框架中,提供了非常多的常量
在default.properties struts.i18n.encoding=UTF-8 Struts2中所有的post请求的中文乱码不用处理。
struts.action.extension=action,, Struts2请求的默认的扩展名。默认扩展名是.action或者什么都不写。
在Struts2中修改一些常量的值
在 default.properties 当中的值是不允许直接修改的,修改常量的值,可以有三个位置进行修正
- struts.xml中进行修改,通过
标签 - struts.properties中进行修改,自己新建的,只能修改常量,基本不使用
- web.xml中进行修改,通过过滤器的初始化参数来修改常量
后面的会覆盖前面的内容
include
在一个配置文件当中引入其它的配置文件,以后做团队开发时,很多人都需要去修改配置文件,防止被改乱,可以单独的创建一个配置文件,在主配置文件当中引入创建的配置文件
Action类的三种写法
Action类是POJO的类
自己手动实现execute方法
Action类实现一个Action的接口
实现接口时,会让你覆盖execute方法
在此接口当中定义了5个常量(逻辑视图)
- String SUCCESS = "success"; 成功
- String NONE = "none"; 没有跳转
- String ERROR = "error"; 失败
- String INPUT = "input"; 表单校验时出错
- String LOGIN = "login"; 登录出错页面跳转
Action类继承ActionSupport类
推荐使用此方式。Actionsupport当中提供了很多功能,数据校验,国际化等一系列操作方法
资源包
我们通常在根目录下新建一个 resource 文件夹,标记为资源包,将所有配置文件放在这