001--Struts2快速入门与使用IntelliJ IDEA创建第一个web项目

Struts2是一种基于MVC模式的轻量级web框架,自问世以来,就受到了广大Web开发者的关注,并广泛应用于各种企业系统的开发中。

本系列将针对Struts2的简介、特点、安装、执行流程等内容进行讲解。

简介

概念

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。

在介绍Struts2之前,先来认识一下Struts1。Struts1是最早的基于MVC模式的轻量级web框架,他能够合理的划分代码结构,并包含了验证框架、国际化框架等多种实用工具框架。但随着技术的进步,Struts1的局限性也越来越多的暴露出来。为了符合更加灵活、高效的开发需求,Struts2框架应用而生。

Struts2是Struts1的下一代产品,是在Struts1和WebWork技术基础上进行合并后的全新框架。虽然Struts1和Struts2名字类似,但其设计思想却有很大不同。实质上,Struts2是以WebWork为核心,采用拦截器机制来处理用户的请求。这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以从另一方面可以理解为Struts2是WebWork的更新产品。

优势

  • 项目开源,使用及拓展方便
  • 提供Exception处理机制
  • Result方式的页面导航,方便进行重定向和页面跳转
  • 通过简单、集中的配置来调度业务类,轻松进行配置和修改
  • 提供简单统一的表达式语言来访问所有可供访问的数据
  • 提供了标准 强大的验证框架和国际化框架
  • 提供了强大的标签,有效减少页面代码
  • 对Ajax提供了支持
  • 拥有简单的插件,只需要放入相应的JAR包,轻松扩展Struts2框架,比如自定义拦截器、自定义结果类型以及自定义标签等
  • 拥有智能的默认配置

常见web框架

  • Struts2
  • Struts1
  • SpringMVC
  • WebWork

Web层框架都是基于前端控制器模式实现开发的。

前端控制器模式

在传统开发方式中,一次请求就会对应一个Servlet,这样就会造成很多Servlet存在。

而在Struts2中,所有的请求都会经过一个前端控制器,在前端控制器中实现框架的部分功能,剩下的具体操作交给具体的Action中。

如果所有的请求都要经过前端控制器,那么这个控制器该怎么实现呢?其实,过滤器就是最好的一个实现方式,因为所有的请求都可以被过滤器拦截,然后再过滤器中实现部分功能。Struts2的前端控制器也是基于过滤器实现的。


这里写图片描述

Struts2开发包下载与介绍

下载安装包

点我下载

这里写图片描述

  • all:包含官方提供的Struts2示例,以及docs文档,lib库,源码等。
  • apps:官方提供的Struts2示例程序。为war文件,可通过zip工具解压缩
  • min-lib:最小集成lib包
  • lib:Struts2所有依赖库
  • docs:官方提供的Struts2文档,包含快速入门、文档以及api文档等
  • src:Struts2的源代码

Struts2中jar简介

将上面下载的apps中struts2-blank.war(此项目为一个空工程,包含基本的开发包),解压缩,并进入WEB-INF目录下。


这里写图片描述

上面就是struts2的基本开发包了,那这些包各代表什么呢?请看下图:


这里写图片描述

从上图中可以看出,当前版本的Struts2项目依赖13个基础jar,不同的Struts2版本所依赖的基础jar可能也不完全相同,不过基本变化不大。

需要注意一点,通常是由Struts2的web项目并不需要用到Struts2的全部jar,因此没有必要一次将Struts2的lib目标下所有jar都添加到项目中,根据需要来就好了。

使用IntelliJ IDEA创建第一个Struts2项目

新建项目

打开InrelliJ IDEA,选择新建项目,如下,选择Struts2 WebApplication,并把Libraries设置为Set up library later,如下:

这里写图片描述

下一步,输入项目名及项目目录,点击finish

这里写图片描述

进入项目目录后,在web/WEB-INF下新建lib文件夹,同时将在上一节整理的struts2开发包拷入lib文件,之后,右键lib目录,选择Add as library选项,将开发包配置好。如下:

这里写图片描述

配置web.xml核心过滤器

打开web/WEB-INF中的web.xml,配置filter,这个就是之前提到过的前端控制器。如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <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>

编写Action

在项目目录src下新建包com.happy.demo,新建HelloAction.java,代码如下:

public class HelloAction {
    public String sayHi() {
        System.out.println("hello world");
        return "success";
    }
}

配置struts.xml

打开项目目录下的struts.xml,将刚编写的HelloAction进行配置,如下:

<struts>
    <package name="hello" namespace="/hello" extends="struts-default">
        <action name="sayHi" class="com.happ.demo.HelloAction" method="sayHi">
            <result name="success">sayHi.jsp</result>
        </action>
    </package>
</struts>

暂时先无视这些字段代表的含义,后续会详细讲解配置文件。

新建sayHi.jsp

在上面xml配置中,通过result标签配置了当success时跳转的页面sayHi.jsp,下面我们就来新建这个页面。
又因为在上面配置的namespace=hello,页面跳转时寻找规则为web/namespace/xxx.jsp,所以,在web目录下,新建hello文件夹,并新建sayHi.jsp文件。详细如下:

这里写图片描述

sayHi.jsp内容如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>SayHi</h1>
</body>
</html>

配置全局Tomcat

  1. Tomcat下载
    点我去下载

  2. 打开Edit Configurations,如下:

    这里写图片描述

  3. 在弹窗中,选择Defaults,找到Tomcat ServerLocal,如下:

    这里写图片描述

  4. 配置介绍

    这里写图片描述

    点击Configure,在弹出的框中配置本机Tomcat地址,如下:
    这里写图片描述

    选择OK即可。

  5. 进入项目Project Structure,进行配置,如下:

    这里写图片描述

    点击右上角Fix,选择add lib to artifacts:
    这里写图片描述

配置项目Tomcat

  1. 为工程配置Tomcat,步骤如下:


    这里写图片描述
  2. 命名及根据需要修改自定义配置,如端口号等


    这里写图片描述
  3. 配置Deployment

    这里写图片描述

  4. 点击下方applyok完成配置

启动并访问项目

  1. 启动项目


    这里写图片描述
  2. 访问项目
    通过浏览器访问http://localhost:8080/hello/sayHi,可控制台会打印HelloAction中的hello world,同时页面会跳转到struts.xml中配置的sayHi.jsp页面,页面显示之前写的SayHi文字。

好了,到此,第一个Struts2项目跑起来了,下一篇会对Struts2的执行流程、各种配置以及Action的创建访问配置方式进行讲解。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容