一、前言

1、了解三大框架

什么是框架?

框架是一种规范,一种规则,一种把技术组织起来的规则,这就是框架。

什么是三大框架(SSH),Struts、hibernate和spring的作用是什么?

Struts主要负责层的显示,spring利用IOC和AOP来处理控制业务(负责对数据库的操作),hibernate主要作用是数据的持久性到数据库。

Struts的处理流程:

在Struts 2下载文件Struts-core-2.5.2.文件中(注意:不同jarStruts核心控制器的名称不同),StrutsPrepareAndExecuteFilter是Struts 2框架的核心控制器,

它负责拦截由<url-pattern>/*</url-pattern>指定的所有用户请求,当用户请求到达时,该Filter会过滤用户的请求。

默认情况下,如果用户请求的路径不带后缀或者后以.action结尾,这时请求将被转入Struts2框架处理,否则Struts 2框架将略过该请求的处理。

当请求转入Struts 2框架处理时会先经过一系列的拦截器,然后再到Action。与Struts1不同,Struts 2对用户的每一次请求都会创建一个Action,所以Struts2中的Action是线程安全的。

2、搭建Struts 2环境

(1)下载关于Struts 2所需要的jar文件,这里使用的是struts-2.5.2-all.zip,下载地址(这里)

(2)编写Struts 2配置文件,分为struts.xml

(3)在Web.xml加入Struts 2的框架启动配置

(4)笔者这里的开发环境是:Eclipse

搭建Struts 2开发环境——所需的jar包

下载完毕之后解压文件,将所需要的文件拷贝到项目的lib文件下,这里配置的是Struts 2.5所需要的配置文件

必备jar包:尤其是log4j.jar和javassist.jar为必备包

struts2-core-2.x.x.jar :      Struts 2框架的核心类库

ognl-2.6.x.jar :           对象图导航语言(Object Graph Navigation Language),struts2框架通过其读写对象的属性

freemarker-2.3.x.jar :       Struts 2的UI标签的模板使用FreeMarker编写

commons-logging-1.x.x.jar :     ASF出品的日志包,Struts 2框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录。

commons-fileupload-1.2.1.jar: 文件上传组件,2.1.6版本后必须加入此文件

搭建Struts 2开发环境——Struts 2应用的配置文件

Struts 2默认的配置文件为struts.xml,所在位置是WEB-INF/classes下,注意:如果clesses没有的话,自行创建,然后创建struts.xml

配置模板代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!--注意:有时候创建不会自动生成以下的<!DOCTYPE>,所以需要自动引入,
如果使用的是2.3或者是1点几的话,只需要将Confinuration2.5//EN和下面的struts-2.5.dtd中的2.5改变为2.3或者1.几即可-->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
</struts>

搭建Struts 2开发环境——Struts 2在Web中的启动配置

在struts1.x中, struts框架是通过Servlet启动的。在struts2中,struts框架是通过Filter启动的。在web.xml中的配置如下:

  <!--为Struts2定义一个过滤器  -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

注意:<!-- 自从Struts 2.1.3以后,下面的FilterDispatcher已经标注为过时

     <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> -->

在StrutsPrepareAndExecuteFilter类中的init方法会读取路径下的配置文件struts.xml完成初始化操作

在读取完struts.xml的内容后,会以javabean形式存放到内容中,以后struts 2对用户的每次请求都会使用内存中的数据,而不是去读取文件。

入门例子:(该例子是官方文档例子)

在新建的struts.xml配置文件中加入配置:

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="tutorial" extends="struts-default">
<!--name:可自己定义名称,class:实现类的准确路径-->
<action name="helloword" class="com.hello.HelloWord" method="execute">
<result name="success">HelloWorld.jsp</result>
</action>
</package>
</struts>

在Struts2框架中使用包来管理action,主要用于管理一组业务相关的action,实际开发中,应该把一组业务相关的Action放在同一个包下。

注意:struts.xm和Actoin配合使用,难免会使文件变得臃肿,我们可以通过<include file="文件名.xml"/>将struts.xml分割成多个。

解析struts.xml中的标签:

Action中的name属性:

配置包时必须指定name属性,可以任意命名但是必须唯一,不能对应java类名,如果要让其他包继承该包,可使用该属性进行引用。

method属性:

指定服务器调用哪个方法,默认为execute。

namespace属性:

表示命名空间,作为访问路径的一部分,如果路径是helloword.action的话,则加上/命名空间/helloword.action,如果不指定,默认为""(空字符串)

通常每个包都应该继承struts-default包, 因为Struts2很多核心的功能都是拦截器来实现。

使用Action元素必须指定系列的result元素,每个result元素定义逻辑视图和物理视图之间的映射。

result元素中type属性默认jsp为视图,可设置type的值改变数据所要显示的视图。

例子中使用的HellWord.java实现类代码:

package com.hello;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWord extends ActionSupport {

    public static final String MESSAGE = "Struts is up and running ...";
private String message;
public void setMessage(String message){
this.message = message;
} public String getMessage() {
return message;
}
public String execute() throws Exception {
setMessage(MESSAGE);
return SUCCESS;
}
}

struts.xml配置文件中的HelloWord.jsp代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!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>Hello World</title>
</head>
<head>
<title>Hello World!</title>
</head>
<body>
<h2><s:property value="message" /></h2>
</body>
</html>

访问struts2中action的URL路径由两部份组成:包的命名空间+action的名称,例如访问本例子HelloWord的URL路径为:/helloworld (注意:完整路径为

http://localhost:端口/项目名称/helloworld)。另外我们也可以加上.action后缀访问此Action。

入门例子运行效果如下:

Struts2入门(一)——环境搭建和简单例子(Struts2 2.5.2版本)的更多相关文章

  1. Hibernate4.2.4入门(一)——环境搭建和简单例子

    一.前言 发下牢骚,这段时间要做项目,又要学框架,搞得都没时间写笔记,但是觉得这知识学过还是要记录下.进入主题了 1.1.Hibernate简介 什么是Hibernate?Hibernate有什么用? ...

  2. Android入门之环境搭建

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/1376935560.html 原创:An ...

  3. 使用maven+eclipse搭建最简单的struts2的helloworld

    使用maven+eclipse搭建最简单的struts2的helloworld 一.web分层结构简介 1.web[细]粒度分层结构: 按细粒度分层可以分为以下6种: 1).表现层:html/css/ ...

  4. 新手嘛,先学习下 Vue2.0 新手入门 — 从环境搭建到发布

    Vue2.0 新手入门 — 从环境搭建到发布 转自:http://www.runoob.com/w3cnote/vue2-start-coding.html 具体文章详细就不搬了,步骤可过去看,我这就 ...

  5. 总结Vue 第四天:vue-cli(Vue2.0 新手入门 — 从环境搭建到发布)

    总结Vue 第四天:vue-cli(Vue2.0 新手入门 - 从环境搭建到发布) 一.Vue CLI----(Vue2.0 新手入门 - 从环境搭建到发布): ■   CLI是Command-Lin ...

  6. 【个人笔记】003-PHP基础-01-PHP快速入门-03-PHP环境搭建

    003-PHP基础-01-PHP快速入门 03-PHP环境搭建 1.客户端(浏览器) IE FireFox CHROME Opera Safari 2.服务器 是运行网站的基本 是放置程序代码的地方 ...

  7. scala 入门Eclipse环境搭建

    scala 入门Eclipse环境搭建及第一个入门经典程序HelloWorld IDE选择并下载: scala for eclipse 下载: http://scala-ide.org/downloa ...

  8. android Jni NDK开发环境搭建及其简单实例的编写

    android  Jni  NDK开发环境搭建及其简单实例的编写 由于工作需要,需要采用开发想要的JNI,由于之前没有接触过安卓的开发,所以更加网上的帖子,学习了下.遇到了些问题,然后总结下学习过程中 ...

  9. scala 入门Eclipse环境搭建及第一个入门经典程序HelloWorld

    scala 入门Eclipse环境搭建及第一个入门经典程序HelloWorld 学习了: http://blog.csdn.net/wangmuming/article/details/3407911 ...

随机推荐

  1. Java Web应用的开发环境配置

    1:第一是下载好Eclipse开发工具,这里不做叙述,自行下载安装. 2:使用Eclipse开发WEB项目,启动Eclipse,选择File--->new --->other---> ...

  2. Sql Server系列:触发器

    触发器的一些常见用途: ◊ 强制参照完整性 ◊ 常见审计跟踪(Audit Trails):这意味着写出的记录不仅跟踪大多数当前的数据,还包括对每个记录进行实际修改的历史数据. ◊ 创建与CHECK约束 ...

  3. 实战MEF(3):只导出类的成员

    通过前面两篇文章的介绍,相信各位会明白MEF中有不少实用价值.上一文中我们也讨论了导入与导出,对于导出导入,今天我们再深入一点点,嗯,只是深入一点点而已,不会很难的,请大家务必放心,如果大家觉得看文章 ...

  4. Gridview里添加合计行

    ShowFooter="true" ; ; ; protected void gvIncomeYG_RowDataBound(object sender, GridViewRowE ...

  5. mpi4py实践

    版权声明:本文为博主原创文章,未经博主允许不得转载. 1.概述 MPI(Message Passing Interface),消息传递接口,是一个标准化和轻便的能够运行在各种各样并行计算机上的消息传递 ...

  6. 在 ML2 中配置 Vlan Network- 每天5分钟玩转 OpenStack(93)

    上一节我们学习了 Neutron Vlan Network 的原理,今天讨论如何在 ML2 配置中 enable 它. 首先在 /etc/neutron/plugins/ml2/ml2_conf.in ...

  7. 应用程序框架实战十三:DDD分层架构之我见

    前面介绍了应用程序框架的一个重要组成部分——公共操作类,并提供了一个数据类型转换公共操作类作为示例进行演示.下面准备介绍应用程序框架的另一个重要组成部分,即体系架构支持.你不一定要使用DDD这样的架构 ...

  8. 前端编码风格规范之 JavaScript 规范

    JavaScript 规范 全局命名空间污染与 IIFE 总是将代码包裹成一个 IIFE(Immediately-Invoked Function Expression),用以创建独立隔绝的定义域.这 ...

  9. geotrellis使用(十一)实现空间数据库栅格化以及根据属性字段进行赋值

    Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 安装空间数据库 空间数据库栅格化 根据属性字段进行赋 ...

  10. 关于一道数据库例题的解析。为什么σ age>22 (πS_ID,SCORE (SC) ) 选项是错的?

    本人大二学子.近段时间在做数据库复习题的时候遇到一道题,如下. 有关系SC(S_ID,C_ID,AGE,SCORE),查找年龄大于22岁的学生的学号和分数,正确的关系代数表达式是( ) . ⅰ. πS ...