文章目录
struts2介绍
概念
前端框架,用于替代servlet处理访问服务器的请求。
使用优势
来自于https://www.w3cschool.cn/struts_2/struts_overview.html
- POJO表单及POJO操作 - Struts2 去除掉了Struts框架中的Action Forms部分。在Struts2框架下,你可以用任何一POJO来接收表单输入,同样的,你可以把任一POJO视为一个Action类。
- 标签支持 - Struts2 改进了标签表单,而新的标签可让开发人员减少代码编写量。
- AJAX支持 - Struts2 被认可接收进Web 2.0技术,并创建了功能非常类似于标准的Struts2 标签的AJAX标签,把AJAX支持整合进其结果中。
- 易于整合 - Struts有多种整合方式可使用,现在与其他类型的框架,如Spring、Tiles、SiteMesh之类的,整合更为容易了。
- 模板支持 - 支持使用模板生成视图。
- 插件支持 - 有大量的插件可用于Struts2,而使用插件可以增强和扩大Struts2 核心行为。
- 性能分析 - Struts2 为调试和配置应用程序提供综合的性能分析,此外,Struts也以嵌入调试工具的形式提供集成调试。
- 易于修改标签 - 在Struts2 中,可使用Freemarker的模板对标签标记进行调整,而修改标签不需要JSP或是Java知识,基本的HTML、XML和CSS知识就足够了。
- 促进减少配置 - Struts2 使用各种设置的默认值促进减少配置,而你不需要再配置什么除非是偏离了Struts2 设定的默认设置。
- 视图技术 - Struts2 为多种视图选项(JSP、Freemarker、Velocity、XSLT等)提供支持。
封装好的功能点
- 自动封装参数
- 参数校验
- 结果的处理(转发|重定向)
- 国际化
- 显示等待页面
- 表单的防止重复提交
sturts1和struts2
技术上没有什么关系,struts1的前端控制器是一个Servlet,名称为ActionServlet,struts2的前端控制器是一个filter。
struts2搭建
下载地址
https://struts.apache.org/download.cgi#struts2522
新建web项目
导入jar包
struts2_mini解压缩后lib中jar复制到项目中WEB-INF/lib中
书写Action类
package hello;
public class HelloAction {
public String Hello(){
System.out.println("Hello");
return "success";
}
}
新建xml并导入约束
导入约束
新建dtd文件夹用以保存我们的struts2所提供的dtd文件,因为struts2的dtd文件位于jar包内无法直接复制,只能在eclipse中打开后复制,并新建一个txt粘贴复制的内容,另存为dtd文件格式
struts2提供的dtd文件位置如下
再找到
复制
Add
再重新打开之前的xml,编辑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="hello" namespace="/hello" extends="struts-default">
<action name="HelloAction" class="hello.HelloAction" method="Hello">
<result name="success">/hello.jsp</result>
</action>
</package>
</struts>
新建hello.jsp
自行修改内容即可,为了测试用,我在jsp中加了行显示文字的代码
将struts2核心过滤器配置到web.xml[最重要的一步
项目中没自动创建xml解决方法
如果没有,灰色部分会被激活,成为可选,直接选择添加即可
在web.xml下添加
<display-name>struts2</display-name>
<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>
给eclipse配置tomcat
将tomcat加入运行环境
将tomcat包导入项目Libraries
再选中tomcat
运行即可(还有一件事情,需要点击运行后在这些卡项中的server(我的删了就找不到了qwq)更改加载路径到tomcat的webapps中
运行结果
struts2访问流程
struts2架构
AOP编程思想
应用于servlet
应用于拦截器Interceptor
配置详解
struts.xml详解
<struts>
<!-- package:将Action配置封装,即可以在package配置多action
name:给包起个名字,起到标识作用,随便起,不与其他包重名即可 比如/user标识用户域
extends:继承一个指定的包
abstract:包是否为抽象的,若是,则不能独立运行,专门用于被继承
比如struts2内置的 <package name="struts-default" abstract="true">
-->
<package name="hello" namespace="/hello" extends="struts-default">
<!-- action元素:配置action类
name:决定了Action可访问资源名
class:action的完整类名
method:指定调用Action哪个方法处理请求
-->
<action name="HelloAction" class="hello.HelloAction" method="Hello">
<!-- result:结果配置
name:表示结果处理的名称,与action方法的返回值对应
type:指定调用哪一个result类来处理结果,默认使用转发
<result-type name="dispatcher" class="org.apache.struts2.result.ServletDispatcherResult" default="true"/>
-->
<result name="success">/hello.jsp</result>
</action>
</package>
</struts>
struts2常量配置
struts2默认常量配置位置
修改struts2常量配置(加载顺序为序号顺序
方式一:在struts.xml中修改(推荐方法)
在<struts></struts>
根目录下新建<constant name=" " value=" "></constant>
再将name设置为想修改的元素,value设置为想改为的值
<constant name="struts.i18n.encoding" value="GBK"></constant>
方式二:新建struts.properties修改
在项目/src下新建struts.properties
将想修改的常量复制到文件内修改即可
方式三:在web.xml中修改
加入如下代码块
<!-- 配置常量 -->
<context-param>
<param-name>struts.i18n.encoding</param-name>
<param-value>GBK</param-value>
</context-param>
常量说明
常量 | 默认 | 说明 |
---|---|---|
struts.i18n.encoding | UTF-8 | 设置编码方式 |
struts.action.extension | action,, |
指定访问action时的后缀名,默认配置两个一个为action,一个为空 |
struts.devMode = false | false | 指定访问struts是否以开发模式运行 |
<struts>
<!-- 常量配置
i18n:国际化,即不同语言浏览器看到的语言不一样
可以解决post提交乱码,以及输出中文乱码
-->
<constant name="struts.i18n.encoding" value="GBK"></constant>
<!-- 常量配置
指定访问action时的后缀名,默认配置两个一个为action,一个为空
http://localhost:8080/struts2/hello/HelloAction.do
-->
<constant name="struts.action.extension" value="do"></constant>
<!-- 常量配置
指定struts是否以开发模式运行
1. 热加载主配置(不需要重启服务器即可更改生效)
2.提供更多错误信息,方便开发时调试
-->
<constant name="struts.devMode" value="true"></constant>
</struts>
struts2配置的进阶
动态方法调用
新建一个包及action类,并在新建包的路径下新建struts.xml
修改项目的struts.xml
<struts>
<!-- 引入其他struts配置文件 -->
<include file="/dynamic/struts.xml"> </include>
</struts>
方式一:配置动态方法调用常量
新的struts.xml添加如下代码块
<struts>
<!-- 配置动态方法调用常量
http://localhost:8080/struts2/dynamic/DemoAction/add
-->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="dynamic" namespace="/dynamic" extends="struts-default">
<action name="DemoAction" class="dynamic.DemoAction">
<result name="success">/hello.jsp</result>
</action>
</package>
</struts>
此时再根据action类中方法名填写路径即可。
方式二:通配符方式(推荐方法
<!-- 方式二:通配符方式
_并非必须,只是为了代码规范
*代表通配,在填写路径时需要什么换成什么,由{1}取出第一个*所填写的方法
http://localhost:8080/struts2/dynamic/DemoAction_add
-->
<package name="dynamic" namespace="/dynamic" extends="struts-default">
<action name="DemoAction_*" class="dynamic.DemoAction" method="{1}">
<result name="success">/hello.jsp</result>
</action>
</package>
struts2的默认配置
<struts>
<package name="dynamic" namespace="/dynamic" extends="struts-default">
<!-- 找不到对应action会使用DemoAction作为action的默认请求 -->
<default-action-ref name="DemoAction"></default-action-ref>
<!-- 默认配置
method属性:execute
result name:success
result type:dispatcher 转发
class:com.opensymphony.xwork2.ActionSupport
-->
<action name="DemoAction_*" class="dynamic.DemoAction">
<result name="success">/hello.jsp</result>
</action>
</package>
</struts>
action的创建方式
方式一:创建一个类,可以是POJO
POJO:不用继承任何父类,也不用实现任何接口
缺点:使struts框架侵入性更低
方式二:实现一个接口Action
优点:
- Action接口预置了一些字符串,可以在返回结果时使用,更加方便
- 里面有execute方法,提供action方法的规范
public class DemoAction implements Action{
@Override
public String execute() throws Exception{
return null;
}
}
方式三:继承一个类ActionSupport(最常用)
优点:
- 帮我们实现了Validateable,ValidationAware,TextProvider,LocalProvider这些接口
public class DemoAction extends ActionSupport{
}
来源:CSDN
作者:DUT_Walnut
链接:https://blog.csdn.net/DUT_Walnut/article/details/104535872