`
SIHAIloveYAN
  • 浏览: 119985 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

struts2教程--快速入门

 
阅读更多

Struts2框架介绍

1、三大框架 : 是企业主流 JavaEE开发的一套架构

Struts2 + Spring + Hibernate

2、 什么是框架?为什么要学框架 ?

框架 实现部分功能的代码 (半成品),使用框架简化企业级软件开发

学习框架 ,清楚的知道框架能做什么?还有哪些工作需要自己编码实现

3、 什么是Struts2

Struts2 是一款优秀MVC框架

MVC:是一种思想,是一种模式,将软件分为 Model模型、View视图、Controller控制器

* MVC由来是web开发

JavaEE软件三层结构 : web层(表现层)、业务逻辑层、数据持久层 (sun提供JavaEE开发规范)

JavaEE开发更强调三层结构, web层开发注重MVC

struts2 就是 web层开发框架,符合MVC模式

* struts1 webworkjsfSpringMVC都是MVC

4Struts2Struts1关系

没有关系, Struts2 全新框架,引入WebWork很多技术和思想,Struts2保留Struts1类似开发流程

* Struts2 内核 webwork

Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNLthe Object Graph Navigation Language),IoCInversion of Control反转控制)容器等


下面这是struts的一张架构图



这些大概就是struts的核心的东西了。


Struts2快速入门

1、 下载开发包

这个在官网下载就可以了。

2、 目录结构

apps struts2官方demo

docs : 文档

lib jar

src : 源码

3、 导入jar包到开发工程

只需要导入 apps/struts2-blank.war 中所有jar---- 13jar

4、 编写页面

hello.jsp 请求页面

<a href="${pageContext.request.contextPath }/hello.action">访问struts2入门</a>

success.jsp 结果页面

5、在web.xml配置struts2前端控制器 (Filter

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


6、执行struts2过滤器后读取struts2配置文件将请求分发

src下创建struts.xml

  <package name="default" namespace="/" extends="struts-default">

<!-- <a href="${pageContext.request.contextPath }/hello.action">访问struts2入门</a> -->

<!-- 将请求 分发给一个Action -->

<!-- action的name 就是hello.action 去掉扩展名  -->

<action name="hello" class="com.sihai.struts2.demo1.HelloAction"></action>

    </package>


拦截器实现:

package com.sihai.filter;

import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class StrutsFilter implements Filter {

	public void init(FilterConfig filterConfig) throws ServletException {

	}

	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {

		// 1.强转
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) resp;

		// 2.操作

		// 2.1 得到请求资源路径
		String uri = request.getRequestURI();
		String contextPath = request.getContextPath();
		String path = uri.substring(contextPath.length() + 1);

		// System.out.println(path); // hello

		// 2.2 使用path去struts.xml文件中查找某一个<action name=path>这个标签
		SAXReader reader = new SAXReader();

		try {
			// 得到struts.xml文件的document对象。
			Document document = reader.read(new File(this.getClass()
					.getResource("/struts.xml").getPath()));

			Element actionElement = (Element) document
					.selectSingleNode("//action[@name='" + path + "']"); // 查找<action
																			// name='hello'>这样的标签

			if (actionElement != null) {
				// 得到<action>标签上的class属性以及method属性
				String className = actionElement.attributeValue("class"); // 得到了action类的名称
				String methodName = actionElement.attributeValue("method");// 得到action类中的方法名称。

				// 2.3通过反射,得到Class对象,得到Method对象
				Class actionClass = Class.forName(className);
				Method method = actionClass.getDeclaredMethod(methodName);

				// 2.4 让method执行.
				String returnValue = (String) method.invoke(actionClass
						.newInstance()); // 是让action类中的方法执行,并获取方法的返回值。

				// 2.5
				// 使用returnValue去action下查找其子元素result的name属性值,与returnValue做对比。
				Element resultElement = actionElement.element("result");
				String nameValue = resultElement.attributeValue("name");

				if (returnValue.equals(nameValue)) {
					// 2.6得到了要跳转的路径。
					String skipPath = resultElement.getText();

					// System.out.println(skipPath);

					request.getRequestDispatcher(skipPath).forward(request,
							response);
					return;
				}
			}

		} catch (DocumentException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		// 3.放行
		chain.doFilter(request, response);

	}

	public void destroy() {

	}

}



7、执行目标Actionexecute方法

8、在Actionexecute方法中返回 字符串,在struts.xml中配置字符串与页面对应关系

<result name="executesuccess">/demo1/success.jsp</result> 完成结果页面跳转


下面是具体的源代码


helloAction.java:

package com.sihai.action;

public class HelloAction {

	public String say() {
		System.out.println("hello action say method");
		return "good";
	}
}

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>

	<package name="default" namespace="/" extends="struts-default">
		<action name="hello" class="com.sihai.action.HelloAction"
			method="say">
			<result name="good">/hello.jsp</result>
		</action>
	</package>
	
	<package name="dd" namespace="/abc" extends="struts-default">
		<action name="hello" class="com.sihai.action.HelloAction"
			method="say">
			<result name="good">/hello.jsp</result>
		</action>
	</package>
</struts>

Struts2流程分析与工具配置

1、 运行流程

请求 ---- StrutsPrepareAndExecuteFilter核心控制器 ----- Interceptors拦截器(实现代码功能 ) ----- Actionexecuute ---结果页面 Result

* 拦截器 在 struts-default.xml定义

* 执行拦截器 是 defaultStack中引用拦截器

2、 配置struts.xml提示问题

如果安装Aptana编辑器 ,请不要用Aptana自带xml编辑器 编写struts2配置文件

struts.xml提示来自于 DTD约束,

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

"http://struts.apache.org/dtds/struts-2.3.dtd">

如果可以上网,自动缓存dtd,提供提示功能

如果不能上网,也可以配置本地DTD提示

3、 关联struts2源码

关联 zip

4Config Brower插件使用

提供在浏览器中查看 struts2 配置加载情况

将解压struts2/lib/struts2-config-browser-plugin-2.3.7.jar复制WEB-INF/lib

访问 http://localhost:8080/struts2_day1/config-browser/index.action查看 struts2配置加载情况




分享到:
评论

相关推荐

    struts2--1.入门程序

    入门程序"应该是针对初学者设计的一系列教程,旨在帮助开发者快速理解并掌握Struts2的基础用法。 在Java Web开发中,Struts2框架提供了良好的架构模式,可以有效地组织代码,提高开发效率,并且它支持多种视图技术...

    Struts2视频教程

    #### 二、Struts2入门案例 - **Hello Struts2**:通过创建一个简单的“Hello World”示例,帮助开发者快速上手Struts2的基本配置和运行流程。 - **Action类详解**:Action类是Struts2的核心组件之一,负责处理用户...

    Struts2入门教程-分析及讲解

    本入门教程将引导初学者深入理解Struts2的核心概念,通过源码分析和实际操作,帮助你快速上手。 1. **Struts2框架概述** Struts2是Struts1的升级版,它弥补了Struts1在灵活性、扩展性和性能上的不足。Struts2采用...

    java Struts2快速入门教程pdf

    本教程将带你深入理解Struts2的基础概念、核心组件以及如何快速入门。 一、Struts2框架概述 Struts2是Struts1的升级版,它吸收了WebWork框架的优点,极大地提高了开发效率和代码的可维护性。Struts2基于拦截器模型...

    struts2入门教程

    ### Struts2入门教程知识点概览 #### 一、Struts2简介 - **起源与发展**:Struts2...以上内容覆盖了Struts2框架的核心概念和技术要点,对于初学者来说,这些知识点可以帮助他们快速入门并掌握Struts2的基本使用方法。

    struts-2.3.7-docs.zip

    - **快速入门**:介绍如何设置开发环境,创建第一个Struts 2应用,以及配置基本的Action和Result。 - **核心概念**:深入解释框架的核心组件,如Action、Interceptor、Result和Value Stack,以及它们之间的交互机制...

    Struts2.0中文教程和struts2入门教程

    这个教程集合包括"Struts2.0中文教程"和"struts2入门教程"两个部分,旨在帮助初学者快速掌握Struts2框架的基本概念、配置和实践。 **1. Struts2框架概述** Struts2是Apache软件基金会下的开源项目,它是Struts1的...

    详细的Struts2教程

    MAX的Struts2教程.exe很可能包含了一系列视频课程或文档,涵盖了从入门到进阶的全方位教程。建议按照教程的顺序逐步学习,从搭建环境开始,理解MVC原理,然后深入学习Action、Interceptor、视图技术以及实际项目中的...

    struts-2.3.16.1-docs.zip

    1. **快速入门**:这通常是一份简明教程,帮助开发者快速了解Struts2的基本概念和配置,如Action、Result、Interceptor等,并指导如何搭建第一个运行的Struts2应用。 2. **使用文档**:这部分详细介绍了如何在实际...

    Struts2入门教程,有源码和实例

    这个入门教程包含了源码和实例,旨在帮助初学者快速理解并掌握Struts2的核心概念和工作原理。 首先,让我们深入了解一下Struts2的基础知识。Struts2是Apache软件基金会的开源项目,它是Struts1的升级版,融合了...

    Struts2入门教程

    本教程旨在帮助初学者快速入门Struts2,了解其基本概念和应用。 一、Struts2简介 Struts2是Apache软件基金会的一个开源项目,它是Struts1的升级版,继承并改进了其前任的许多特性。Struts2的核心是Action类,它负责...

    struts2初学者入门教程

    ### Struts2初学者入门教程知识点 #### 一、Struts2简介 Struts2是一个基于MVC模式的Web应用框架,其设计目标是简化Web应用的开发。它继承了Struts1和Webwork的优点,为用户提供了一种简单、快速开发Web应用的方法...

    struts2入门教程+实例源代码

    本教程旨在帮助初学者快速理解并掌握Struts2的基本概念和使用方法。 首先,从标题"struts2入门教程"我们可以了解到,这将是一个针对初学者的教程,涵盖了Struts2的基础知识。教程通常会从框架的基本结构、配置开始...

    struts2的jar包,中文教程,标签介绍

    总的来说,Struts2是一个功能强大的MVC框架,其jar包提供了丰富的功能支持,中文教程可以帮助开发者快速上手,而标签则简化了视图层的编程工作。通过深入学习这三个方面,你将能够有效地利用Struts2构建高效、稳定的...

    struts-2.5.16升级jar包.zip

    总之,Struts 2.5.16升级jar包提供了一个更新Struts 2框架的机会,确保你的应用程序能够利用最新的功能和安全修复,同时,提供的基础入门示例可以帮助新手快速掌握Struts 2的基本用法。在实际操作中,应仔细阅读官方...

    Struts2入门到精通教程.zip

    这个"Struts2入门到精通教程"旨在帮助初学者快速掌握该框架的基础知识,并逐步进阶到高级应用。以下是对Struts2框架的详细解析: 1. **什么是Struts2框架?** Struts2是基于MVC(Model-View-Controller)设计模式...

    struts快速入门的最好教程

    Struts2框架简介 Struts2历史 Struts2与MVC Struts2体系介绍 Struts2体系架构 Struts2工作流程 Struts2基本知识点 Struts2标签库简介 Struts2拦截器 默认配置文件struts-default.xml概要说明 Struts2核心配置文件...

Global site tag (gtag.js) - Google Analytics