Struts2学习笔记二之入门案例

原创 2015年11月18日 20:08:19

1. Struts2的演化史

先有servlet后有jspjsp只是把servlet简化了

2004年出现了struts1Apache),它解决了什么问题,就是咱们刚才这些问题

 

1)写了action

3) 写了中控servlet

3)增加了ActionForm来封装表单的参数,这样不用再写枯燥的request.getParameter(“”),而实现自动封装,自动类型转换。

Struts1流行了56年后,就落伍了,逐渐被struts2所替代。

 

接下来webwork就做了两件非常牛的事,

1)使action完全和servlet容器松耦合了

2)使用属性驱动和模型驱动获取页面表单中的数据

3)还利用拦截器的概念解决了一个方法过于复杂,做的相当漂亮,这个也是学习struts2的最重要的一个内容。很多后续的框架都模拟它这点。

 

doGet(){

用户注册

用户头像图片上传

验证表单

权限的验证

注册

}

 

Webwork出来,apache眼红了。当时webwork逐渐在绽放光辉,struts1逐渐在衰落。结果Apache老谋深算,干脆把webworkstruts1结合起来,推出了struts2struts2融合了struts1webwork的特点。现在struts2也已经有快10年了。目前mvc这个框架已经遇到发展瓶颈了,想再有技术上的突破已经很难了。

 

框架封装的越好,它的灵活性越差,灵活性越高,它的稳定性越低。

2003struts2不是有个致命漏洞吗?听过这事没?严重到什么程度呢?一个连接直接让服务器宕机。为什么呢?那就是struts2在这方面太灵活了。

 

2. Struts2的第一个例子

2.1. 第一步:创建一个Web工程struts2

2.2. 第二步:导入jar

struts-2.3.15.3-all.zip

struts2-blank.war是个最简单的例子,它下面有最基础的jar包和依赖包

序号

JAR包

说明

1

asm-3.3.jar

动态代理

2

asm-commons-3.3.jar

动态代理

3

asm-tree-3.3.jar

动态代理

4

commons-fileupload-1.3.jar

文件上传

5

commons-io-2.0.1.jar

文件IO

6

commons-lang3-3.1.jar

公用工具

7

commons-logging-1.1.3.jar

公用日志

8

freemarker-2.3.19.jar

模板

9

javassist-3.11.0.GA.jar

动态代理

10

log4j-1.2.17.jar

Log4j日志

11

ognl-3.0.6.jar

ognl表达式

12

struts2-core-2.3.15.3.jar

struts2核心包

13

xwork-core-2.3.15.3.jar

xwork核心包

 

 

将这些包拷贝到项目的lib目录下


 

2.3. 第三步:编写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_3_0.xsd" id="WebApp_ID" version="3.0">

  <display-name>struts2</display-name>

  

<filter>

<filter-name>StrutsFilter</filter-name>

<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>StrutsFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

</web-app>

 

8行代码是不就搞定了,这个类里干了太多的事情

 

2.4. 第四步:编写action

package struts2;

 

import com.opensymphony.xwork2.ActionSupport;

 


public class LoginAction extends ActionSupport {

public String execute(){

System.out.println("hello LoginAction");

return SUCCESS;

}

}

 

可以看出这个action是不没有request,response这两个参数了,说明什么,struts2是不实现了和servlet容器完全解耦。

 

2.5. 第五步:编写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="struts2" namespace="/" extends="struts-default">

<action name="loginAction" method="execute" class="struts2.LoginAction">

<result>/index.jsp</result>

</action>

</package>

</struts>

 

2.6. 第六步:部署测试

http://localhost/struts2/loginAction.action

 

 

针对上面的例子进行详细的解析

 

3. Struts.xml配置文件



源码方法跟踪

这个过程如果觉得难以理解,光记结果就行。

 

可以看到最终struts2加载了3个文件,最后一个就是struts.xml

 

上图为struts配置文件加载流程

 

注意:

1struts.xml必须放在classpath的根目录下

2)名称不能改变,这样当struts2启动时,就自动加载了根目录下的struts2.xml配置文件

3)因为整个加载过程写在filterinit方法中,所以tomcat启动时就将该文件加载了。

 

4. 详解package

假设一个项目有成百个上千个action,你琢磨下,都放在这一个配置文件中,那一下堆积了3000多行,那让你找一个action,容易吗?没法找了,是吧。

怎么办?如果能跟java类一样,加个包路径来区分,该多好的。

 

Strust2支持这个功能,利用package来分模块。

name属性为包的名称,是唯一的,继承时使用。

namespace命名空间,url访问时的路径。


http://localhost/struts2/a/b/c/loginAction.action

 

先找struts2/a/b/c下的action,如果找不到,则查找上一层/struts2/a,再找不到再找上一层,直到找到,如果最上层找不到,则报错。

注意:只要命名空间加一层,最后跳转到相应的jsp以后,也会加上相应的路径。

 

5. 详解action

Action元素代表一个类,name属性和url相对应。

Class为类的全名(限定名),class属性可以不写


Class名不写,就会找com.opensymphony.xwork2.ActionSupports

但注意这样写有好处吗?当然没有,这不就真正执行自定义的action的业务处理了。

 

extends属性是struts2中非常巧妙的的一个设计,这样就形成了xml的继承

则只需ActionSupportexecute方法,而该方法什么都没做。仅仅返回了一个SUCCESS字符串。

典型的模板设计模式应用。起什么作用?子类继承时实现,这样子类到底做什么,完全由子类自己控制,这样代码就非常灵活了。

6. Result代表一种结果集

nameaction中某个方法的返回值要一样,不写时默认为SUCCESS

 

type代表结果集的类型,不写时默认为dispatcher

struts-default.xml文件中定义了很多返回type

<result-type 

name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult"

default="true"/>

 

 

Type属性不写,则默认和struts-default中的结果集类型中的default=”true”的结果集保持一致。默认是dispatcher。这就是转发,struts2对它包装了下。

Result标签中的内容就是要转发到的页面。

Resultname属性可以不写,默认值为”success”

 

总结:可以看到struts.xml文件,通过package来分模块,同时还可以继承;通过action可以配置模块下的类。每个action可以配置对应的actionresult

这个结构比之前的任何一个框架都先进,struts1也有action但它没有package,特别包的继承机制。发明还是很有难度和技术含量的。


版权声明:本文为博主原创文章,未经博主允许不得转载。

zTree学习笔记(一)——第一个入门实例

用了小一天的时间学习了zTree插件,做出了一个地区树的小例子,感觉这个插件真的蛮强大的,实现的过程中也遇到了一些困惑,现在总结一下。 从官网http://www.ztree.me/v3/main....
  • dengxue0
  • dengxue0
  • 2014年07月28日 14:50
  • 3259

《OpenCV3编程入门》学习笔记一:邂逅OpenCV

一:内容介绍本节主要介绍以下内容: 1. OpenCV3环境搭建 2. 快速上手尝试:图像显示、读取并播放视频、调用摄像头采集图像二:学习笔记1. 环境配置在OpenCV3中,项目架构发生了一些变...
  • NNNNNNNNNNNNY
  • NNNNNNNNNNNNY
  • 2016年09月14日 10:50
  • 4364

windows下《七天学会NodeJS》学习笔记之一--NodeJS基础

什么是NodeJS。浏览器可以解析JS,NodeJS也可以解析JS,它就是一个JS的解析器。浏览器利用JS操作DOM,而NodeJS利用JS操作磁盘文件或搭建HTTP服务器。NodeJS的作者创造No...
  • fm2005
  • fm2005
  • 2014年11月21日 14:44
  • 7709

struts2入门教程和学习笔记

  • 2013年04月23日 14:00
  • 2.43MB
  • 下载

spring+hibernate+jpa+struts1+struts2+springmvc+jquery+freemaker 学习笔记 案例.rar

  • 2010年07月27日 10:40
  • 1.08MB
  • 下载

Struts2入门-第一天学习笔记

Struts2入门-第一天学习笔记初学struts2,根据一个视频教程(Struts2基础框架精讲视频课程-51CTO学院)学习简单struts2项目的搭建,搭建步骤: 新建web项目 导入所需的ja...
  • paopao10060341
  • paopao10060341
  • 2016年10月24日 20:54
  • 114

Struts2 入门学习笔记(五)——上传下载

Struts2 入门学习笔记(五)——上传下载 一.简介 首先要明确为了能进行上传,必须将表单设为POST,并且添加属性enctype="multipart/form-data",只...
  • SUNFC_nbu
  • SUNFC_nbu
  • 2016年04月16日 13:04
  • 346

java 从零开始,学习笔记之基础入门<Struts2_实战演练(中)>(三十九)

Struts2_实战演练(中) 面向切面编程 针对特定功能写出通用类,所关注的业务方面即切面   Login.Jsp->login.do 拦截器拦截login.do 所对应的action...
  • lulu147
  • lulu147
  • 2014年02月17日 09:40
  • 1279

学习笔记-Struts2入门

本文是基于慕课网的《Struts2入门》视频教程笔记。 一.MVC模式=control+view+model 1、jsp+javaBean=model jsp里会嵌入大量的js片段和java代码...
  • yan_blog
  • yan_blog
  • 2017年02月26日 22:47
  • 76

java 从零开始,学习笔记之基础入门<Struts2_实战演练(上)>(三十八)

Struts2_实战演练(上) 三个准备: 1.导入Struts2库(jar包) 2.添加核心配置文件struts.xml 3.配置properties文件   准备二,配置strut...
  • lulu147
  • lulu147
  • 2014年02月14日 09:38
  • 1253
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Struts2学习笔记二之入门案例
举报原因:
原因补充:

(最多只允许输入30个字)