Struts2框架整理(HelloWorld环境搭建)

「爱情、让人受尽委屈。」 2022-07-15 16:47 358阅读 0赞

Struts2简介

Struts2是一个工作在表现层的MVC的流程框架,它本质上相当于一个Servlet在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。

Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开。Struts相对于WebWork差别不大,相对于Struts1差别很大

MVC设计模式

M(Model):模型包含数据模型和业务模型(JavaBean,业务逻辑)

V(View):视图,将不同的数据展示到页面上

C(Controller):控制请求处理(接收请求,处理请求,响应结果)它作为数据库与视图之间的一个媒介存在,将对数据库的操作和结果的显示分离。

Center

![Image 1][]

MVC模式流程:

请求与响应的过程

【1】提交请求,提交数据

方式:

地址栏:http://ip:port/contextPath/index.jsp

表单:收集客户端数据

链接:请求

异步JS:ajax

【2】接收请求,接收数据

方式:

String value = request.getParameter(“key”);

将接收的数据封装成模型对象

【3】视图跳转,传递数据

跳转方式:

转发:

request.getRequestDispatcher(“资源路径”).forWard(requeset,response);

重定向:

response.sendRedirect(“资源路径”);

将数据保存到域对象中进行传递

常用域对象

request (HttpServletRequest ), session(HttpSession ) ,application(ServletContext )

【4】展示数据

使用JSTL/EL在JSP页面展示保存在域对象中的数据

原生webMVC【2】【3】都是由Servlet完成

框架

将通用代码封装起来,提供程序员开发使用,可以大大提高开发效率。

程序员只需要将开发重点放在业务逻辑的实现上,不用再去花费精力解决公共的问题了。

重复性,扩展性,稳定性…

Struts2具备核心功能

①可以将请求数据封装模型对象

②拦截器

文件上传

国际化

表单数据验证

类型转换

表单重复提交

③Action 处理请求,作用相当于Servlet

④Result 封装跳转方式

⑤支持多种视图技术:JSP , Freemarker

⑥ValueStack 存储数据

⑦Ognl 类似EL,用于操作数据

框架整体核心结构

Center 1 ![Image 1][]

apps框架给我们提供的学习案例

docs框架文档

lib框架类库

src框架源码

国际惯例—-HelloWorld(使用Struts2框架)

1.框架环境搭建

①导入 jar

参考案例:\struts-2.3.15.3\apps\struts2-blank…

asm-3.3.jar

asm-commons-3.3.jar

asm-tree-3.3.jar

commons-fileupload-1.3.jar

commons-io-2.0.1.jar

commons-lang3-3.1.jar

commons-logging-1.1.3.jar

freemarker-2.3.19.jar

javassist-3.11.0.GA.jar

log4j-1.2.17.jar

ognl-3.0.6.jar

struts2-core-2.3.15.3.jar

xwork-core-2.3.15.3.jar

②新建一个conf专门放配置文件,文件名为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">











③在web.xml中配置核心控制器



struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter



struts2

/*






2.完成HelloWorld

①index.jsp(发送请求)

<%@ page language=”java” contentType=”text/html; charset=UTF-8”

pageEncoding=”UTF-8”%>

<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd">







Insert title here







Hello








②HelloWorldAction(处理请求)

package com.atguigu.action.hello;




public class HelloWorld {




public String hello() {

System.out.println(“接收到请求”);

return “success”;

}

}




③配置action(就写在 struts.xml的page标签中,这主要完成页面转换

<?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">















/success.jsp










④成功页面success.jsp(切换的页面)

<%@ page language=”java” contentType=”text/html; charset=UTF-8”

pageEncoding=”UTF-8”%>

<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd">







Insert title here





向Struts2的工作者致敬













Action类定义规则

①Action程序代替Servlet来处理请求。

②就是一个普通的JavaBean程序,可以不用继承任何父类,可以不用实现任何接口。

③多实例。每一次请求都会创建一个新的Action对象。目的:解决线程安全问题。(Action类通过声明成员变量,来获取请求参数,当多个请求共用一个成员变量会发生线程安全问题)

④Action类中可以存在多个处理请求的方法。至少有一个。

⑤Action可以提供请求参数名称的set方法来接收请求参数。对于简单类型,可以可以自动的进行类型转换。

⑥处理请求的方法声明规则:

必须public

必须返回类型String

必须是无参数的

异常声明可以省略的

方法名称,一般与标签的method属性值一致。否则,会查找默认execute方法来处理请求。




ActionSupport(com.opensymphony.xwork2.ActionSupport)

在编写Action类时,可以选择继承框架提供ActionSupport父类。

ActionSupport实现了6个接口

Action, 可以获取5个常量支持,代码编写规范化。

Validateable , 手动编码验证

ValidationAware, 框架验证(通过框架配置文件来对表单数据进行验证)

TextProvider, 用于操作国际化资源文件

LocaleProvider, 用于获取Locale对象

Serializable 支持可序列化

当需要实现表单验证,国际化,序列化功能时,需要继承ActionSupport来获取框架支持。否则,不需要继承。




Strurts2框架配置解释

1.常量标签解释

常量标签:constant

name=struts.devMode : 开发模式

作用:①开发阶段一般设置为true,便于对问题的解决。

②修改配置后,不需要重新启动服务器,框架会自动识别配置文件是否修改过,如果修改过会自动重新加载。









框架核心jar包(struts2-core-2.3.15.3.jar)中含有org/apache/struts2/default.properties属性文件。定义了框架默认用到属性值。

可以使用constant常量标签对框架默认属性值进行修改。




2.package标签

package标签用于管理action等配置。

name : 设置包的名称。应该具有唯一性。

namespace :名称空间.用于分区不同包下的同名的action.相当于访问的路径。

如果定义了名称空间,那么,在请求的路径中就一定使用名称空间来访问action

namespace+ action的name值就是请求路径




extends : 用于包之间的继承。

struts-default 包是框架定义的默认父包。我们的包一般都是需要继承这个父包的。否则,无法使用框架提供帮助。

例如:结果类型,拦截器,拦截器栈,默认拦截器引用,默认的Action类引用就都无法使用了。

abstract=”true” 表示声明一个抽象的包。抽象包一般是用于给子包做继承使用的。不能定义action配置。













3.action标签

action标签用于声明action的映射配置。将请求uri和目标Action类关联在一起。写在page标签中

在同一个命名空间下,不能定义同名的action.否则,只执行最后一个。

class : 处理请求Action类的全类名。

class属性可以省略。默认值是com.opensymphony.xwork2.ActionSupport,默认处理请求方法execute

当系统跳转成功页面,不需要进行任何业务逻辑处理时,可以通过默认ActionSupport进行请求处理。

method :如果省略,那么,框架会通过默认的方法名称来执行请求处理,默认方法名称:execute
















4.result标签

result标签用于声明结果映射配置。将Action类方法返回结果字符串,与一个物理视图文件关联在一起

name : 表示结果名称。与Action类方法的返回结果字符串相匹配。

name=”success” 默认值,可以省略

type : 表示结果类型。对不同的跳转方式进行封装。

type=”dispatcher” : 用于转发。默认值,可以省略。

type=”redirect” : 用于重定向




/success.jsp








代码整理:

web.xml配置




<?xml version=”1.0” encoding=”UTF-8”?>



mystruts2_day01_helloword





struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

struts2

/*

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">











!-- action标签 name属性设置请求名,与namespace共同构成请求路径(SpringMVC中加在类上@RequestMapping+加在方法上的@RequestMapping共同构成请求路径) class表示方法所在的全类名, method定义处理请求的方法名 \--





/success.jsp







处理请求的Action类

package com.atguigu.action.hello;

public class HelloWorld {

/**

* Struts2通过定义成员变量(属性)来获取请求参数

* ①设置属性②定义set/get方法(Struts2通过使用setXXX方法给属性赋值,属性的名字不影响赋值操作)

* 若成员变量进行共享会出现线程安全性问题,Struts2通过使用多实例的方式来解决

* Struts2默认请求地址execute(返回成功页面)

*

*/

private int age;

/**

* 执行请求的方法,同时要在xml中配置

* 何时,如何执行这个请求

* @return

*/

public String hello() {

System.out.println(“接收到请求”);

System.out.println(“请求参数age=” + age);

return “success”;

}

public void setAge(int age) {

this.age = age;

}

}

[Image 1]:

发表评论

表情:
评论列表 (有 0 条评论,358人围观)

还没有评论,来说两句吧...

相关阅读