JavaWeb框架SSH_Struts2_(一)
1. 框架入门
2.1 Struts2简介
(1). Struts2是一种基于MVC模式的的轻量级Web开发框架。
MVC模式:MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
- Model(模型):是应用程序中用于处理应用程序数据逻辑的部,通常模型对象负责在数据库中存取数据;
- View(视图):是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的;
- Controller(控制器):是应用程序中处理用户交互的部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
(2). Struts2是以WebWork为核心的,它采用拦截器的机制来处理用户的请求。这样的设计也会使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts2可以理解为webwork的产品。
(3). 区别Struts2和Struts1:
在技术方面,Stuts1有个核心控制器,但是只提供了一个接口,也就是execute,还要配置actionform之类的,所以依赖性比较强;而Struts2是基于webwork,针对拦截器开发的,也就是所谓的AOP思想,可以配置多个action,用起来比较方便,但是因为请求之前的拦截器有一些注入的操作,速度相对Struts1来说慢一点。
(4). Struts2的优点:
- 项目开源,使用及拓展方便
- 提供Exception处理机制
- Result方式的页面导航,通过Result标签很方便地实现重定向和页面跳转
- 提供强大的、可以减少页面代码的标签
- 提供良好的Ajax支持
2.2 Struts2入门案例
笔者利用Intellj idea写了个简单的案例。希望通过这个简单的案例,能够帮助初步认识struts2的运行流程。当然,还有IntelliJ idea的相关配置操作。笔者使用的是ubuntu的系统,不再讲述idea的安装以及JDK配置,tomcat的配置等等问题,相关教程很多,自己动手找找就好啦。
(1)到官网上面,下载Struts2的最新版本,推荐下载Struts-xxx-min-lib.zip。下载完成之后,lib目录下应该有如下所示的jar包:

(2)打开IntellJ idea,创建项目create new Project

(2)选择Java Enterprises--->Web Application(...)--->Struts2(...)--->Use Library

(3)选择use library,不要选择Download,因为idea配置的Struts2版本不一定一致,我们直接选择自己下好的Struts2中的jar;选择Create-->(找到步骤(1)中的jar包路径)用Ctrl全部选中加进来。

(4)接着next---->命名(我这里命名是Struts2_TestDemo_Project)完成后,项目栏如下所示:

(5)完成的项目中,包括了Struts.xml, web.xml, index.jsp。接下来进行简单的配置工作;
- 打开File--->Project Structure--->Problem--->如果有问题提示,则单击fix,选择add Struts2 to the artifact--->OK;
- 修改web.xml的filter-class中内容为org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
- 将鼠标点到StrutsPrepareAndExecuteFilter上面出现如下所示提示:

(这个时候直接删掉该行中的"ng."即可,完成后不再有提示)
(6)基本的配置到这里也就完成了,接下来写一个登陆Demo;
- 后端部分,在src中建一个java包(test_login)---->包中建一个java类(LoginAction)代码如下:
LoginAction:
package test_login;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private String username;
private String password;
@Override
public String execute() throws Exception {
if (username.equals("admin") && password.equals("123")) {
return SUCCESS;
} else {
return LOGIN;
}
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
- Struts.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd"> <struts>
<package name="default" namespace="/" extends="struts-default">
<action name="Login" class="test_login.LoginAction">
<result name="success">/success.jsp</result>
<result name="login">/index.jsp</result>
</action>
</package>
</struts>
- 登录界面index.jsp
<%--
Created by IntelliJ IDEA.
User: mairr
Date: 17-11-17
Time: 下午6:41
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户登陆界面</title>
</head>
<body>
<h1>这是一个用户登陆的地方</h1>
<form action="Login.action" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td colspan="2" style="text-align: center"><input type="submit" value="登录"></td>
</tr>
</table>
</form>
</body>
</html>
- 登陆成功跳转页面success.jsp
<%--
Created by IntelliJ IDEA.
User: mairr
Date: 17-11-17
Time: 下午7:00
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登陆成功</title>
</head>
<body>
<h1>恭喜你,登陆成功啦~~~</h1>
</body>
</html>
- 完成之后,进行项目的发布,File--->Project Structure--->Artifacts--->将struts2项目加到OutputLayer--->OK---->最后Run--->index.jsp,打开google浏览器(http://localhost:8080/index.jsp),登陆登陆界面如下:

- 输入用户名:admin,密码:123;登陆成功后浏览器界面如下:

2.3 Struts2执行流程分析
Struts2的执行流程图如下所示:

(1)客户端浏览器发送一个请求,(HttpServletRequest);
(2)程序会调用StrutsPrepareAndExecuteFilter,然后询问ActionMapper这个请求是否需要调用某个Action;
(3)如果ActionMapper决定需要调用某个Action,StrutsPrepareAndExecuteFilter会把这个请求处理给ActionProxy(Action代理);
(4)ActionProxy通过配置管理器(Configuration Manager)从配置文件(Struts.xml)中,读取框架配置信息,从而找到需要调用的Action类;
(5)ActionProxy会创建一个ActionInvocation的实例;
(6)ActionInvocation使用命名模式来调用Action,在调用Action前,会依次调用所有配置的拦截器(Intercepter1、Intercepter2、Intercepter3..);
(7)一旦Action执行完成,返回结果字符串,ActionInvocation就会负责查找结果字符串对应的Result,然后执行这个Result。通常情况下Result会调用一些模板(JSP等)来呈现页面。
(8)产生的Result信息返回ActionInvocation,此过程中拦截器会被再次执行(顺序与Action执行之前相反);
(9)产生一个HttpServletResponse的响应行为,通过StructsPrepareAndExecuteFilter反馈给客户端;
参考书籍:《SSH框架整合教程》
参考文章:http://blog.csdn.net/rcnjtech/article/details/77914381
JavaWeb框架SSH_Struts2_(一)的更多相关文章
- JavaWeb框架SSH_Struts2_(二)
1. Struts2的核心配置(详解) 本章内容目录: 配置struts.xml文件 struts.xml文件 常量配置 包配置 包含配置 Action配置 实现Action控制类 配置Action ...
- JavaWeb框架SSH_Struts2_(三)
1. Struts2的拦截器(使用拦截器实现权限控制) 拦截器简介 拦截器概述 拦截器工作原理 拦截器的配置 Struts2的内建拦截器 内建拦截器的介绍 内建拦截器的配置 自定义拦截器 实现自定义拦 ...
- JavaWeb框架SSH_Struts2_(四)----->表达式语言OGNL
1. 表达式语言OGNL OGNL简介 OGNL基本语法 常量 操作符 OGNL表达式 OGNL基础 OGNL上下文 OGNL值栈 OGNL的访问 2. 具体内容 2.1 OGNL简介 OGNL(Ob ...
- JavaWeb框架的基石
JavaWeb框架的基石(一) 初学JavaWeb开发,请远离各种框架,从Servlet开始. Web框架是开发者在使用某种语言编写Web应用服务端是关于架构的最佳实践.很多Web框架 ...
- 从零开始写JavaWeb框架(第一章节)
买了本<从零开始写JavaWeb框架> 因为是第一次用IDEA,期间遇到很多问题,比如:怎么在IDEA中配置tomcat: 在IDEA界面的右上角点击: 点击+,选择Maven 到了如下界 ...
- JavaWeb框架之Struts2 ---- 系列学习
JavaWeb框架_Struts2_(七)----->文件的上传和下载 JavaWeb框架_Struts2_(六)----->Struts2的输入校验 JavaWeb框架_Struts2_ ...
- Servlet---JavaWeb技术的核心基础,JavaWeb框架的基石(一)
初学JavaWeb开发,请远离各种框架,从Servlet开始. Web框架是开发者在使用某种语言编写Web应用服务端是关于架构的最佳实践.很多Web框架是从实际的Web项目抽取出来的, ...
- Servlet---JavaWeb技术的核心基础,JavaWeb框架的基石(二)
一.Servlet之Request Web服务器会对收到的每一次客户端http请求分别创建一个用于代表请求的request对象和代表响应的response对象.要获取客户端提交的数据需 ...
- JavaWeb框架_Struts2_(六)----->Struts2的输入校验
1. 输入校验章节目录 输入校验概述 客户端校验 服务器端校验 手动编程校验 重写validate方法 重写validateXxx()方法 输入校验流程 校验框架校验 Struts2 内置的校验器 常 ...
随机推荐
- tomcat 内存大小配置
Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个java虚拟机.JAVA程序启动时JVM都会分配一个初始内存和最大内存给这个应用程序.这个初始内存和最大内存在一定程度都会 ...
- 解决Android5.0以下Dialog引起的内存泄漏
最近项目开发中,开发人员和测试人员均反应在android5.0以下手机上LeakCanary频繁监控到内存泄漏,如下图所示,但凡用到Dialog或DialogFragment地方均出现了内存泄漏. 如 ...
- 浅谈Java抽象类
什么是抽象类?这名字听着就挺抽象的,第一次听到这个名字还真有可能被唬住.但是,就像老人家所说的,一切反动派都是纸老虎,一切有着装x名字的概念也是纸老虎.好吧,我们已经从战略上做到了藐视它,现在就要战术 ...
- 数据迁移过程中hive sql调优
本文记录的是,在数据处理过程中,遇到了一个sql执行很慢,对一些大型的hive表还会出现OOM,一步一步通过参数的设置和sql优化,将其调优的过程. 先上sql ) t where t.num =1) ...
- VS2010 c/c++ 本地化 emscripten 配置
配置环境 1.下载emsdk-1.35.0-full-64bit.exe,有VS2010的话直接安装. 2.安装好之后,打开cmd,# emsdk update # emsdk install lat ...
- Hibernate 学习笔记 - 2
五.映射一对多关联关系 1. 单向多对一 即 单向 n-1 1)单向 n-1 关联只需从 n 的一端可以访问 1 的一端 ① 域模型: 从 Order 到 Customer 的多对一单向关联需要在Or ...
- 知识树杂谈Java面试(4)
一. Java集合 1. 集合分类: Collection.Map. 2. Collection: 3. Map 4. 注意点 a. List 有序.可重复:Set 无序.不可重复:Map 键值 ...
- mac 通过brew安装php70 +php-fpm+ phalcon3.0.3
安装php7.0.15 brew install homebrew/php/php70 brew install homebrew/php/php70-mcrypt brew install home ...
- 基于Python实现matplotlib中动态更新图片(交互式绘图)
最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和mat ...
- Kotlin——最详细的数据类型介绍
任意一种开发语言都有其数据类型,并且数据类型对于一门开发语言来说是最基本的构成,同时也是最基础的语法.当然,kotlin也不例外.kotlin的数据类型和Java是大致相同的,但是他们的写法不同,并且 ...