Struts2框架整理(HelloWorld环境搭建)
Posted Nothing_doit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2框架整理(HelloWorld环境搭建)相关的知识,希望对你有一定的参考价值。
Struts2简介 Struts2是一个工作在表现层的MVC的流程框架,它本质上相当于一个Servlet在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。 Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开。Struts相对于WebWork差别不大,相对于Struts1差别很大MVC设计模式 M(Model):模型包含数据模型和业务模型(JavaBean,业务逻辑) V(View):视图,将不同的数据展示到页面上 C(Controller):控制请求处理(接收请求,处理请求,响应结果)它作为数据库与视图之间的一个媒介存在,将对数据库的操作和结果的显示分离。
MVC模式流程: 请求与响应的过程 【1】提交请求,提交数据 方式:
地址栏:http://ip:port/contextPath/index.jsp 表单:收集客户端数据 链接:<a href="/contextPath/userServlet?username=xiaoma&age=22">请求</a> 异步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,用于操作数据 ...
框架整体核心结构
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">
<struts> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <!--这里在完成helloworld的时候写--> </package> </struts>
③在web.xml中配置核心控制器 <!-- 核心控制器 --> <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>
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"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <!-- 使用绝对路径访问 --> <a href="$pageContext.request.contextPath/hello">Hello</a> </body> </html>
②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">
<struts> <constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default"> <action name="hello" class="com.atguigu.action.hello.HelloWorld" method="hello"> <result>/success.jsp</result> </action> </package> </struts>
④成功页面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"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>向Struts2的工作者致敬</h1> </body> </html>
Action类定义规则 ①Action程序代替Servlet来处理请求。 ②就是一个普通的JavaBean程序,可以不用继承任何父类,可以不用实现任何接口。 ③多实例。每一次请求都会创建一个新的Action对象。目的:解决线程安全问题。(Action类通过声明成员变量,来获取请求参数,当多个请求共用一个成员变量会发生线程安全问题) ④Action类中可以存在多个处理请求的方法。至少有一个。 ⑤Action可以提供请求参数名称的set方法来接收请求参数。对于简单类型,可以可以自动的进行类型转换。 ⑥处理请求的方法声明规则: 必须public 必须返回类型String 必须是无参数的 异常声明可以省略的 方法名称,一般与<action>标签的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,便于对问题的解决。 ②修改配置后,不需要重新启动服务器,框架会自动识别配置文件是否修改过,如果修改过会自动重新加载。 <constant name="struts.devMode" value="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配置。
<package name="default" namespace="/" extends="struts-default"> <!--这里在完成helloworld的时候写--> </package>
3.action标签 action标签用于声明action的映射配置。将请求uri和目标Action类关联在一起。写在page标签中 在同一个命名空间下,不能定义同名的action.否则,只执行最后一个。 class : 处理请求Action类的全类名。 class属性可以省略。默认值是com.opensymphony.xwork2.ActionSupport,默认处理请求方法execute 当系统跳转成功页面,不需要进行任何业务逻辑处理时,可以通过默认ActionSupport进行请求处理。 method :如果省略,那么,框架会通过默认的方法名称来执行请求处理,默认方法名称:execute
<action name="hello" class="com.atguigu.action.hello.HelloWorld" method="hello"> <!--这里写result标签--> </action>
4.result标签 result标签用于声明结果映射配置。将Action类方法返回结果字符串,与一个物理视图文件关联在一起 name : 表示结果名称。与Action类方法的返回结果字符串相匹配。 name="success" 默认值,可以省略 type : 表示结果类型。对不同的跳转方式进行封装。 type="dispatcher" : 用于转发。默认值,可以省略。 type="redirect" : 用于重定向
<result name="success" type="dispatcher">/success.jsp</result>
代码整理: web.xml配置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>mystruts2_day01_helloword</display-name> <!-- 配置一个核心控制器 --> <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> </web-app>
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> <!--配置开发者模式--> <constant name="struts.devMode" value="true" /> <!-- package name用来定义包名, namespace定义请求路径(namespace+action的name属性值共同构成请求路径) extends="struts-default"必须写,否则不能获取Struts框架支持,例如request的处理,转发,重定向... --> <package name="com/atguigu/action/hello" namespace="/" extends="struts-default"> <!-- action标签 name属性设置请求名,与namespace共同构成请求路径(SpringMVC中加在类上@RequestMapping+加在方法上的@RequestMapping共同构成请求路径) class表示方法所在的全类名, method定义处理请求的方法名 --> <action name="hello" class="com.atguigu.action.hello.HelloWorld" method="hello"> <!-- name属性设置返回值,里面的文本框设置跳转页面 type设置是重定向还是转发,默认是转发 type="dispatcher"用于转发。默认值,可以省略。 type="redirect"用于重定向 type类型不能随便设置,必须是struts2-core下struts-default.xml中设置的 --> <result name="success" type="redirect">/success.jsp</result> <!--重定向到目标资源 这里指定目标资源的虚拟路径时,不能包含Web应用的虚拟路径, 因为Struts2会自动添加,我们再加就是画蛇添足。 --> </action> </package> </struts>
处理请求的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;
以上是关于Struts2框架整理(HelloWorld环境搭建)的主要内容,如果未能解决你的问题,请参考以下文章
Struts2框架使用之用Struts2写一个HelloWorld
Java Web框架-----------------------struts2(官网教程版HelloWorld)