概述
本文章为大家介绍以下用IDEA开发工具创建Maven项目使用Struts2框架,对方法的调用和参数赋值,即前后端的数据交互有所介绍。
目录
Struts2框架
2、使用Sturts2
3、子控制器类方法的调用
4、参数赋值
5、与J2EE容器交互
非注入
注入(实现接口为注入方式)
总结:
6、经典错误
Struts2框架
Struts2 是基于MVC设计模式的web应用程序框架,最初是以WebWork框架和Struts框架为基础,通过提供增强和改进的Struts框架,进而实现简化web技术人员开发工作的目标。
模型(Model)-视图(View)-控制器(Controller),通常简称MVC,是一种开发web应用程序的软件设计模式。该软件设计模式由以下三部分组成:
模型——属于软件设计模式的底层基础,模型主要负责管理应用程序的数据,它通过响应视图的请求和控制器的指令来更新自身的数据。
视图——这部分是负责向用户呈现全部或部分数据,通过控制器的指令触发所展现的一种特殊的数据格式。它们是基于像JSP、ASP、PHP之类模板系统的脚本,较易与AJAX技术进行整合。
控制器——通过软件代码控制模型和视图之间的交互,控制器负责响应用户输入并执行数据模型对象的交互。控制器在接收、确认输入后执行修改数据模型状态的业务操作
2、使用Sturts2
1、创建MavenWeb(3.0)项目(教程)并配置导入Maven的基本依赖
2、引入Sturts2的所有jar包
配置pom.xml文件
<!--struts2-->
<struts2.version>2.5.13</struts2.version>
<!--struts2-->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts2.version}</version>
</dependency>
3、配置核心过滤器 作用接收和分发请求
<filter>
<filter-name>struts</filter-name>
<!-- 此路径为struts2的核心配置文件路径-->
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<!--拦截*.action的请求 -->
<url-pattern>*.action</url-pattern>
</filter-mapping>
4、建立Struts2的核心配置文件 struts.xml 文件名为框架定义的,不能自定义
建议struts-base.xml文件,用于配置struts的基本配置
struts-base.xml
<struts>
<!--启用struts2的开发者模式
struts.devMode该属性设置Struts 2应用是否使用开发模式。如果设置该属性为true,
则可以在应用出错时显示更多、更友好的出错提示。该属性只接受true和flase两个值,
该属性的默认值是false。通常,应用在开发阶段,将该属性设置为true,当进入产品发布阶段后,
则该属性设置为false。
-->
<constant name="struts.devMode" value="true"></constant>
<!--启用struts2配置文件自动加载模式
struts.configuration.xml.reload该属性设置当struts.xml文件改变后,
系统是否自动重新加载该文件。该属性的默认值是false。
-->
<constant name="struts.configuration.xml.reload" value="true"></constant>
<!--继承struts的默认配置文件
默认配置文件路径如下图
并设置抽象包-->
<package name="struts-base" extends="struts-default" abstract="true">
<!--启用动态方法调用模式-->
<global-allowed-methods>regex:.*</global-allowed-methods>
</package>
</struts>
默认配置文件路径
以上的xml文件都引入DTD约束,因为我使用的是2.5版本的,所以是2.5的约束
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
以上约束复制位置在此找到对应的DTD约束
看到这个Use the following DOCTYPE 代表使用此约束,只需要复制下面就可以使用此约束,
但是在idea中有可能已经帮我读取到了,在创建xml文件时就给我们加入了DTD约束
5、建立Action类,再建立对应的Action的xml文件
struts-hellow.xml -->HellowAction.java
<struts>
<!--package
name 包名 代表当前配置名字
extends 继承
namespace 配置空间 默认/
在访问hellowAction的控制器类时,需要在前面加入
http://localhost:8080/项目名/sys/hellowAction_方法名.action
-->
<package name="struts-hellow" namespace="/sys" extends="struts-base">
<!-- action节点
name代表请求路径名 不要/和后缀 _*动态可变的调用方法名
class代表子控制器类全路径名
method 代表子控制器类中调用的方法名 默认excute 不写也默认调用此方法
-->
<action name="hellowAction_*" class="struts.action.HelloAction" method="{1}">
<!--resultv
name 请求结果码
注:标签体代表跳转的具体页面的路径
-->
<!-- type 跳转方式
转发 dispatcher
或者在重定向 redirect
(默认转发) -->
<result
name="success" type="dispatcher">/index.jsp</result>
</action>
</package>
</struts>
再把struts-base.xml和struts-hellow.xml导入到核心配置文件struts.xml中
必须先引入struts-base.xml文件
<!--每一个子控制器类单独对应一个xml文件-->
<struts>
<include file="struts-base.xml"></include>
<include file="struts-hellow.xml"></include>
</struts>
到这里基本配置已经完成
3、子控制器类方法的调用
1、在struts-base.xml文件的默认配置文件中启用动态方法调用模式,不设置那么方法就固定了,一个子控制器类只可以调用一个方法
<!--启用动态方法调用模式-->
<global-allowed-methods>regex:.*</global-allowed-methods>
2、在对应的子控制器类设置方法名 struts-hellow.xml
在对应的action的name属性中后面写_*,然后在method={1}
<action name="hellowAction_*" class="struts.action.HelloAction" method="{1}">
<!--resultv
name 请求结果码
注:标签体代表跳转的具体页面的路径
-->
<!-- type 跳转方式
转发 dispatcher
或者在重定向 redirect
(默认转发) -->
<result
name="success" type="dispatcher">/index.jsp</result>
</action>
4、参数赋值
1、在子控制器类定义属性,必须提供get/set方法
2、对象属性赋值
先实现ModelDrive<T>接口,并实现改接口所定义的getModel()方法
必须先对实体对象进行实例化,不需要给的get/set方法,并在getModel()方法中返回此对象
注:ModelDriven返回实体和Action中属性重名,ModelDriven中优先级更高
5、与J2EE容器交互
在子控制器类中
非注入
耦合
ServletActionContext
用ServletActionContext拿到两个内置对象
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
request.setAttribute("unam",unam);
解耦(建立使用解耦模式)
ActionContext
ActionContext ac = ActionContext.getContext();
Map<String, Object> Map = ac.getContextMap();
//给前端传入数据
Map.put("unam",unam);
注入(实现接口为注入方式)
耦合
ServletRequestAware/ServletResponseAware
实现ServletRequestAware和ServletResponseAware接口
再实现两个接口所定义的方法
定义两个属性
public HttpServletRequest req;
public HttpServletResponse resp;
@Override
public void setServletRequest(HttpServletRequest httpServletRequest) {
this.req=httpServletRequest;
}
@Override
public void setServletResponse(HttpServletResponse httpServletResponse) {
this.resp=httpServletResponse;
}
req.setAttribute("unam",unam);
解耦
实现RequestAware接口
实现此接口定义的方法setReuqest方法
public Map<String, Object> params;
@Override
public void setRequest(Map<String, Object> map) {
this.params=map;
}
params.put("unam",unam);
总结:
搭建struts2的运行环境步骤:
1、配置pom.xml文件导入jar包
2、配置struts2核心过滤器
3、配置struts2核心配置文件struts.xml文件 放置于resources目录下
struts.xml(注意引入顺序) struts-base.xml struts-xxx.xml
dtd约束 struts-2.5.dtd (动态方法配置)
4、子控制器类中的默认方法名excute
1、在sturts-base.xml中开启动态方法
2、在具体的struts-xxx.xml中的action节点中的name属性使用动态方法名
例:<action="hellowAction_*" class="" method="{1}">
3、调用:http://localhost:8080/xxx/hellowAction_方法名.action
5、传参和页面跳转
传参:
1、直接在Action中定义属性,并且提供get、set方法
2、实现ModelDriven接口,实体类必须实例化,实现getModel方法
页面跳转:
<result name="结果码" type="跳转方式(默认转发)" >/login.jsp</result>
6、J2EE容器交互
注入和非注入
耦合和解耦
6、经典错误
此项目的请求路径错误(子控制器类不存在)
调用方法异常
代码链接 提取码:b5t8
至此,Struts2入门基本介绍完毕,由于作者水平有限难免有疏漏,欢迎留言纠错。
最后
以上就是俊逸铅笔为你收集整理的Struts2入门Struts2框架2、使用Sturts23、子控制器类方法的调用4、参数赋值5、与J2EE容器交互总结:6、经典错误的全部内容,希望文章能够帮你解决Struts2入门Struts2框架2、使用Sturts23、子控制器类方法的调用4、参数赋值5、与J2EE容器交互总结:6、经典错误所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复