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 、webwork、jsf、SpringMVC都是MVC
4、 Struts2和 Struts1关系
没有关系, Struts2 全新框架,引入WebWork很多技术和思想,Struts2保留Struts1类似开发流程
* Struts2 内核 webwork
Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL– the Object Graph Navigation Language),IoC(Inversion of Control反转控制)容器等
下面这是struts的一张架构图
这些大概就是struts的核心的东西了。
Struts2快速入门
1、 下载开发包
这个在官网下载就可以了。
2、 目录结构
apps : struts2官方demo
docs : 文档
lib : jar包
src : 源码
3、 导入jar包到开发工程
只需要导入 apps/struts2-blank.war 中所有jar包 ---- 13个jar包
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 blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 3.放行chain.doFilter(request, response);}public void destroy() {}}
7、执行目标Action中execute方法
8、在Action的execute方法中返回 字符串,在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";}
}
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>
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拦截器(实现代码功能 ) ----- Action的execuute ---结果页面 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包
4、 Config 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教程--快速入门相关推荐
- 最简单的dubbo教程-快速入门《一》
最简单的dubbo教程-快速入门<一> 目录(?)[+] 所需环境 zookeeper作为dubbo的注册中心,dubbo服务提供方和消费方都需要在zookeeper注册中心注册. 可参考 ...
- Spring MVC 教程,快速入门,深入分析
目录 转载自:http://elf8848.iteye.com/blog/875830 资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf 点击打开链接 SpringMVC核 ...
- springmvc教程--快速入门教程
springmvc教程系列: springmvc史上最好教程(3) springmvc史上最好教程(2) 一. SpringMVC架构 1.1. Spring web mvc介绍 Spring web ...
- 工业机器人入门z50的含义_工业机器人基础教程——快速入门学习
六轴.水平关节(SCARA).DELTA等不同类型的机器人入门基础教程,学完这些,您将成为一名优秀的机器人应用工程师! 到2020年,工业机器人密度达到每万名员工使用100台以上.我国工业机器人市场将 ...
- 工业机器人基础教程——快速入门学习
想成为一名优秀的机器人应用工程师,从这里学起,六轴.水平关节(SCARA).DELTA等不同类型的机器人入门基础教程推荐. 1.<机器人学导论> 本书曾作为美国斯坦福大学机器人学导论的教材 ...
- hibernate教程--快速入门(增删改查)
一. Hibernate框架的概述: 1.1 什么是Hibernate: 框架:软件的半成品,完成部分功能代码. Hibernate:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC ...
- Spring MVC 教程,快速入门,深入分析【转】
2019独角兽企业重金招聘Python工程师标准>>> 转自:赵磊 地址:http://elf8848.iteye.com 目录 一.前言 二.spring mvc 核心类与接口 ...
- JavaFX开发教程——快速入门FX
本文章主要针对JavaFX的入门内容进行讲解 创建项目 next 下一步的其他组件可以不用选 项目结构 HelloApplication-项目运行入口 HelloController-前后端交互类(跟 ...
- Spring MVC 教程,快速入门,深入分析——多视图控制器
十八.多视图控制器 当有jsp,flt (模板)等多种页面生成展示方式时,spring默认使用的是"视图解析器链". 真是一个链,所以性能不好,spring会在"视图解析 ...
最新文章
- 动态规划总结与题目分类
- [译]管理IIS日志的存储
- java 全排序_Java排序算法全
- Django获取当前页面的URL——小记
- Nitro PDF 数据遭大规模泄露,波及微软、谷歌、苹果等
- 【Kettle】date类型不能被excel输出
- Windows10一键优化工具 v4.0.25
- 我为什么离开华为加入ThoughtWorks(思特沃克)
- windows 安装h2o_H2O-安装
- 计算机无法检测更新失败怎么办,Windows更新错误解决方案
- 百家号不收录限流无推荐阅读为零抄袭的解决方法!
- dock接口_回看手机接口发展史:TypeC将实现大一统?
- Mysql 各个版本区别及官网下载
- QT中使用C++ socket通信,socket通信原理三次握手和四次握手详解、客户端与服务端实例详解
- 一个专业的地图制作网站,怎么自己制作地图?
- 机器学习-第2关:信息熵与信息增益
- [Rx86OS-XIX] 应用程序和系统调用
- 关于采购订单价格错误导致移动平均价错误处理
- HTML+CSS+JavaScript实现电子时钟(数字换成图片)
- Struts2(一)——总体介绍
热门文章
- 基于stm32的can总线彻底研究
- 智能合约重构社会契约(10)超级账本之跨链Hyperledger Lab
- (chap6 Http首部) 响应首部字段 LocationProxy-AuthenticateRetry-After
- Device is not certified by Google
- 无法上外网又需要同步Gradle
- 用Go语言建立一个简单的区块链part4(1):交易(1)
- 【攻防世界011】Windows_Reverse1
- IDA __OFSUB__ 测试
- angr学习笔记(1)
- ubuntu shell实现99乘法表