Struts2框架详细用法第一课
来源:互联网 发布:论持久战的影响知乎 编辑:程序博客网 时间:2024/05/29 13:05
1. 框架的意义
所谓框架就是把一些繁琐的重复性代码封装起来,使程序员在编码中把更多经历放到业务需求的分析和理解上面。特点:封装了很多细节,使程序员在使用的时候会非常简单。
2. Struts2概述
Struts2是Apache发行的mvc开源框架,是表现层框架。是Apache和openSymphony组织合并开发出来的,里面包含了WebWork2的核心和struts的一些特性和功能,除此之外和struts1没有任何关系。
3. Struts2搭建环境
① 下载Struts2开发包
下载地址:http://struts.apache.org
② 导入所需jar包到项目中
找到开发包自带的例子中,struts-blank的war包,在它的\WEB-INF\lib目录下的所有jar包就是使用struts2必须要的jar包,目录如下:
③ 创建struts2的配置文件
在src路径下建立一个默认名称为struts.xml的配置文件,并导入约束。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
</struts>
④ 配置控制器
配置位置:在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>
⑤ 验证是否成功,启动tomcat,不报错表示搭建成功
4. Struts2的入门案列
① 搭建环境
② 建立一个jsp文件
<%@ pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>struts2入门案例</title>
</head>
<body>
<%--在web.xml配置的核心控制器的匹配的路径是/*,访问动作类的路径扩展名是默认的.action,也可以不加扩展名 --%>
<a href="${pageContext.request.contextPath}/hello">访问helloAction</a><br>
<a href="${pageContext.request.contextPath}/hello.action">同样访问helloAction</a>
</body>
</html>
③ 在struts.xml文件中配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<packagename="p1"extends="struts-default">
<actionname="hello"class="com.mangocity.web.action.HelloAction"method="hello">
<resultname="success">/success.jsp</result>
</action>
</package>
</struts>
④ 建立动作类和动作方法
public class HelloAction {
public String hello(){
System.out.println("hello,这是struts2的入门案例!");
return "success";
}
}
⑤ 结果试图页面
<%@ pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Struts2入门案例-执行结果试图</title>
</head>
<body>
执行成功 <br>
</body>
</html>
拓展:需求要配置shtml作为访问动作类的扩展名。
在struts.xml中配置访问动作类的扩展名:
<constant name="struts.action.extension" value="shtml" />
5. Struts2的配置文件
① 加载时机:当应用被tomcat加载的时候,struts2的配置文件就已经被加载过了
② 加载顺序,struts2jar包中及我们的项目中的配置文件有6个,其中加载顺序为:
顺序
配置文件名
所在位置
说明
1
default.properties
struts2-core-2.3.15.3.jar\org\apache\struts2
不能修改
2
struts-default.xml
struts2-core-2.3.15.3.jar
不能修改
3
strtuts-plugin.xml
在struts2提供的插件jar包中
不能修改
4
struts.xml
我们的应用中
我们修改的:推荐
5
struts.properties
我们的应用中
我们修改的
6
web.xml
我们的应用中
我们修改的,可以给过滤器配置参数
注意:struts2中提供了两种配置的方式:properties和xml.当多个配置文件中有相同的参数,后加载的值会把前面加载的值给覆盖掉。
6. Struts2框架提供的常量
① 常用的常量
常量定义在了default.properties配置文件中,所有的strtuts2应用都会用到这些常量。
常用的常量:
常量名
常量值
说明
struts.i18n.encoding
UTF-8
应用中使用的编码
struts.objectFactory.spring.autoWire
name
和spring框架整合有关
struts.multipart.parser
jakarta
指定文件上传用的组件
struts.multipart.maxSize
2097152
文件上传总文件大小限制:2M
struts.action.extension
action,,
能进入Struts2框架内部的url地址后缀名。多个值用逗号分隔
struts.enable.DynamicMethodInvocation
false
是否允许动态方法调用
struts.devMode
false
是否是开发模式。开发模式:改了配置文件,不需要重启。输出更多的错误信息。开发阶段建议为true。
struts.ui.theme
xhtml
页面展示用的主题
② 在struts.xml中覆盖常量
使用<constant name=”” value=””></constant>元素进行覆盖,例:
把扩展名改成以.shtml结尾
<constant name="struts.action.extension" value="shtml" />
③ 创建struts.properties文件覆盖
例:
#设置为开发模式
struts.devModel=true
#设置请求资源URI扩展名
struts.action.extension=shtml
④ 在web.xml中配置过滤器参数
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>struts.devModel</param-name>
<param-value>true</param-value>
</init-param>
</filter>
7. Xml配置文件的主要元素
7.1 package元素
7.1.1作用:在struts2的配置文件中引入了面向对象思想,使用了分包管理,易于管理动作类,便于模块化开发动作类
7.1.2属性:
name:包的名称,必须写且唯一
extends:一般情况下需要继承struts-default包,但不是必须的,但如果不继承,将无法使用struts2提供的核心功能
abstract:把包声明为抽象包,抽象包是用来继承的,只要是没有<action>元素的包就可以声明为抽象包
namespace:名称空间。名称空间+动作名称 =访问路径
7.1.3动作类的搜索顺序:
Namespace的默认值:a.不写改属性 b.该属性=”” 注意默认值不是”/”
7.2 action元素
7.2.1作用:配置动作类
7.2.2属性
name:动作类名称
class:动作类全路径,默认的动作类是:com.opensymphony.xwork2.ActionSupport,如果要替换默认的动作类,可以在package标签中加入:
<default-class-ref class="类全路径"/>
Method:动作类中的方法名称,默认是:public String execute(){}
7.3 result元素
7.3.1作用:为动作指定结果试图
7.3.2属性
Name:逻辑视图的名称,对应动作类的返回值,默认是SUCCESS
Type:结果类型,指的是用什么方式跳转到定义的页面。默认是dispatcher
常用结果类型:
dispatcher:请求转发
redirect:重定向
redirectAction:重定向到另一个动作类
a. 重定向到另一个相同名称空间的动作
<result name=”success” type=”redirectAction”>action2<result>
b. 重定向到不同名称空间的动作
<result name=”success” type=”redirectAction”>
<param name=”namespace”>/n2</param>
<param name=”actionName”>action2</param>
</result>
chain:请求转发到另一个动作类
a. 请求转发到另一个相同名称空间的动作
<result name=”success” type=”chain”>action2<result>
b. 请求转发到不同名称空间的动作
<result name=”success” type=”chain”>
<param name=”namespace”>/n2</param>
<param name=”actionName”>action2</param>
</result>
7.3.3result元素中param子元素
在转发或者重定向到不同包下的动作时,都用到了param子元素
Param元素的作用:依赖注入(Dependence Injection)思想
8. 创建动作类的三种方式
方式一:创建一个普通的java类
方式二:动作类实现Action接口,Action接口中定义的一些常量:
常量变量名
对应的值
说明
SUCCESS
success
动作方法执行一切OK
ERROR
error
动作方法执行时遇到了异常
INPUT
input
回显
LOGIN
login
一般转向登陆页面
NONE
none
不转向任何的视图
方式三:动作类继承ActionSupport类
9. 动作类的访问
9.1 使用通配符
普通版:
<actionname="*"class="com.mangocity.web.action.UserAction"method="{1}">
<resultname="success">/{1}.jsp</result>
</action>
升级版:
<actionname="*_*"class="com.mangocity.web.action.{1}Action"method="{2}">
<resultname="success">/success.jsp</result>
</action>
9.2 动态方法调用
9.2.1在struts.xml中配置允许动态方法调用
<constant name="struts.enable.DynamicMethodInvocation"value="true"/>
<package name="hello" extends="struts-default" namespace="/hello">
<actionname="hello"class="com.mangocity.web.action.HelloAction">
<resultname="success">/success.jsp</result>
</action>
</package>
9.2.2动态方法调用:动作名称!动作方法名称
10. 自定义结果类型
结果类型就是一个类,这些类都实现了com.opensymphony.xwork2.Result接口或者继承自该接口的实现类org.apache.struts2.dispatcher.StrutsResultSupport,这些类都有一个doExecute方法,用于执行结果试图。
示例:创建验证码结果试图:
第一步:创建验证码结果类型类
public class CaptchaResultextends StrutsResultSupport {
@Override
protected void doExecute(String arg0, ActionInvocation arg1)
throws Exception {
ValidateCode code=new ValidateCode(200,100,4,10);
HttpServletResponse response=ServletActionContext.getResponse();
code.write(response.getOutputStream());
}
}
第二步:在struts.xml中配置
<packagename="p1"extends="struts-default">
<result-types>
<result-typename="captcha"class="com.mangocity.web.result.CaptchaResult"></result-type>
</result-types>
<actionname="captchaAction">
<resulttype="captcha"></result>
</action>
11. 配置全局视图
结果视图的查找顺序:先找局部的结果视图,没有再找全局结果视图
<packagename="myDefault"extends="struts-default"abstract="true">
<result-types>
<result-typename="captcha"class="com.mangocity.web.result.CaptchaResult"></result-type>
</result-types>
<global-results>
<resultname="success"type="captcha"></result>
</global-results>
</package>
<package name="p1" extends="myDefault">
<actionname="captchaAction"></action>
12. 在动作类中访问Servlet的API
第一种方式:使用ServletActionContext类
HttpServletRequest request=ServletActionContext.getRequest();
HttpServletResponse response=ServletActionContext.getResponse();
第二种方法:使用实现接口的方式,实现ServletRequestAware,ServletResponseAware
public class Demo2Action implements ServletRequestAware,ServletResponseAware {
private HttpServletResponseresponse;
private HttpServletRequestrequest;
public void setServletResponse(HttpServletResponse response) {
this.response=response;
}
public void setServletRequest(HttpServletRequest request) {
this.request=request;
}
public String add(){
System.out.println(request);
System.out.println(response);
return "success";
}
}
- Struts2框架详细用法第一课
- Struts2框架第一讲
- Struts2框架详细解析
- 搭建第一个struts2框架web程序
- struts2框架开发的第一个应用
- 《struts2》框架第一个实例的搭建
- Struts2框架学习(第一讲)
- struts2框架的第一部分的总结
- struts2+spring+mybatis框架整合详细介绍
- Struts2 框架的详细搭建步骤
- struts2自学第一课-在eclipse上部署helloworld(随笔,非详细步骤)
- struts2--详细了解struts2框架的校验器
- scrapy爬虫框架的详细用法
- scrapy爬虫框架的详细用法
- 第一课 struts2工作原理
- struts2框架的第一个hello world程序
- struts2效验框架学习笔记(第一季)
- 我的第一个Struts2框架开发-Hello World
- 最长回文子串
- java 并发安全的思考
- hdu 1241 Oil Deposits (dfs经典入门)
- oracle插入数据报ORA-00001:违反唯一约束条件
- 练习 2-3 编写函数 htoi(s),把由十六进制数字组成的字符串(包含可选的前缀 0x 或 0X)转换为与之等价的整型值。字符串中允许包含的数字包括:0~9、a~f 以及 A~F。
- Struts2框架详细用法第一课
- shell脚本定时重启tomcat
- Hint: This may be the result of an unspecified view, due to default view name generation.)]
- springMVC中直接访问controller404
- dijkstra+dfs模板
- ubuntu 14.04 安装qq 2015
- 网站的安全校验
- 万用头文件#include<bits/stdc++.h>
- 处理listview的滑动冲突