[Struts] Hello World Demo
Struts 是一个基于 MVC 模式的框架。Struts 2 并不是 Struts 的下一个版本,几乎重写了 Struts。本文中提到的 Struts 均指 Struts 2。
Model, 负责维护应用的数据,根据 View 的请求返回数据,根据 Controller 的指令更新数据
View,在指定的格式下显示数据,由 Controller 控制
Controller,接收用户的输入,验证输入数据的有效性,然后做出响应的业务逻辑处理并更改 Model 数据状态,最后通过 View 进行数据显示

上图是Struts 2 的 Model,View,Controller 高度抽象的关系图。一个用户请求大概会进过下面几个流程
- 用户在浏览器发送一个页面请求给服务器
- FilterDispatcher 根据请求的 url 决定响应的动作
- 拦截器( interceptors )对输入进行校验,或上传文件等
- 执行响应动作
- 拦截器再次发挥作用,进行需要的后校验
- View 渲染结果页面,并将页面返回给用户
代码目录结构

web.xml 是项目的入口。
struts.xml 配置了 URL 和 java 逻辑代码,以及视图 jsp 文件的映射关系。
logging.properties 配置日志功能
index.jsp 是项目的默认页面文件
HelloWorldAction.java,业务逻辑代码
HelloWorld.jsp,在 HelloWorldAction.java 处理完业务逻辑后,进行页面显示
代码详情
web.xml,所有发送给 Struts 2 的请求都会先由 web.xml 处理。这里通过 StrutsPrepareAndExecuteFilter 进行处理。本例子的欢迎页面是 index.jsp 文件
<?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"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
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>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<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>
</web-app>
Struts.xml,本例子
将URL index 和视图文件 index.jsp 关联起来
将URL hello 和模型文件 HelloWorldAction.java,以及视图文件 HelloWorld.jsp 关联起来。当 HelloWorld.execute 方法的执行结果是 success 是,则调用视图文件 HelloWorld.jsp 。
打开 struts.devMode 会显示和开发相关的日志信息。
package 元素用来归类请求,这里将 index action 和 hello action 归于 helloworld package 里面。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="helloworld" extends="struts-default">
<action name="index">
<result>/index.jsp</result>
</action> <action name="hello" class="dwpTest.HelloWorldAction" method="execute">
<result name="success">/HelloWorld.jsp</result>
</action>
</package>
</struts>
index.jsp 这是个简单的 jsp 文件。表单的 hello 动作在 Struts 2 上会被映射到 HelloWorldAction.execute 方法
<%@ 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> title here</title>
</head>
<body>
<h1>hello world from struts2</h1>
<form action="hello">
<label for="name">pls enter your name</label>
<input type="text" name="name" />
<input type="submit" value="say hello" /> </form>
</body>
</html>
HelloWorldAction.java,Action 是 Struts 2 的关键部分,大多是的业务逻辑在 action 类中实现。这里是一个简单例子,execute 方法直接返回 success 。运行过程中,Struts 2 会创建一个 HelloWorldAction 对象,并调用其 execute 方法来回应用户的请求。
package dwpTest;
public class HelloWorldAction {
private String name;
public String execute() throws Exception{
return "success";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
HelloWorld.jsp, taglib 指令告诉 servlet 容器使用 Struts 2 的 tag 进行处理。s:property 显示 action 类属性( property ),其中 name 是由 HelloWorldAction.getName 返回
<%@ 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>submit result</title>
</head>
<body>
Hello World <s:property value="name"/>
</body>
</html>
本例子使用到的 jar 文件如下

参考资料
Struts 2 - Hello World Example, tutorialspoint
[Struts] Hello World Demo的更多相关文章
- Spring与Struts整合
Spring框架是一个非常优秀的轻量级Java EE容器,Spring框架是整个轻量级Java EE框架的核心.大部分的Java EE应用,都会考虑使用Spring容器管理应用中的组件,从而保证各组件 ...
- 在Struts 2中实现IoC
IoC(Inversion of Control,以下译为控制反转)随着Java社区中轻量级容器(Lightweight Contianer)的推广而越来越为大家耳熟能详.在此,我不想再多费唇舌来解释 ...
- java框架篇---struts实现拦截器
Struts2的拦截器和Servlet过滤器类似.在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept ...
- Struts初始
1.首先我们先创建一个maven的简单工程, 如图 然后点击创建一个简单的工程,点击下一步, 然后, 再次输入工程的各项信息,1组织名,2.项目名称,版本名,一般为默认,3,jar包暂时默认,当前的j ...
- Struts2笔记1:--Struts2原理、优点、编程流程、6大配置文件以及核心配置文件struts.xml
Struts2原理(底层使用的是Servlet的doFilter方法): Struts2优点: 第一个Struts程序: 在开发Struts程序之前,首先要导入额外的jar包,基本需求的是14个jar ...
- struts2入门Demo
一.引入必要的jar包,所需jar包如下: 二.配置web.xml.主要目的是拦截请求 <?xml version="1.0" encoding="UTF-8&qu ...
- SSH框架的简单示例(执行流程)
本文转自一篇博文,感觉通俗易懂,适用于初学j2ee者,与大家一起分享 (一)struts框架部分 1.打开Myeclipse,创建一个web project,项目名称为TestSSH. 2.在web的 ...
- Struts2+JQuery发送Ajax请求
Action类代码: package com.example.action; public class JsonAction { private String name; private int id ...
- struts2 通配符简化配置
在struts映射中反复出现的模式 动作方法 描写叙述 下一个动作方法 add 为save准备网页 save save 提交INSERT list edit 为update准备网页 update up ...
随机推荐
- asp.net命名规范
以下命名规范是在编程中,可以辅助快速编程的良好方式之一,我一点点的整理出来,以便形成自己的编程规范.还有待完善... 0.产品命名规范: 结构 层次 产品 模块 功能 命名规则 UI(界面层) Web ...
- Redhat linux DNS配置指南(SCANIP配置手册)
在oracle 11g的RAC中增加了SCAN IP,而使用 SCAN IP的一种方式就是使用DNS,这里介绍在Redhat Linux 5.4中DNS的详细配置操作在配置DNS之前修改主机名Redh ...
- linux创建守护进程
守护进程deamon 是一个后台进程,无需用户输入就能运行,用来在系统后台提供某种服务. 常见的守护进程有Wbe服务器.邮件服务器以及数据库服务器等等.守护进程不能控制终端,所以任何的输入和输出都需要 ...
- 基于matlab的GUI界面开发软件
matlab工具deploytool编译M为可执行程序 http://blog.sina.com.cn/s/blog_60f8483a0100gnsm.html
- Linux 特殊权限位
特殊权限位 LINUX 基本权限有9位但是还有三位特殊权限. suid s(有x权限) S(没有x权限) 4 在用户权限的第三位 sgid s(有x权限) S(没有x权限) 2 在用户组权限的第三位 ...
- grub2 使用memdisk工具 启动任意iso
root@zhanghua-Inspiron-:/home/zhanghua# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/sda6 60G 12G 46G 21% / none ...
- wndows 7 Wifi热点
2016年09月13日 14時52分 wanglinqiang整理 Step1 cmd.exe(管理员身份运行) Step2 命令行输入[netsh wlan set hostednetwork mo ...
- EasyPHP的Apache报错
今天安装了最新版本的软件:EasyPHP-DevServer-14.1VC11-install.exe 启动报错: 打开Cport软件: 可见80端口被系统占用,导致Apache不能启动. (1)手动 ...
- Spring3+MyBatis3整合log4j无法输出SQL语句问题的解决
今天遇到了跟下面文章一模一样的问题,下面文章的解决方案很好,在这里记录保存一下. Spring3+MyBatis3整合无法输出SQL语句问题的解决
- [BZOJ 1221] [HNOI2001] 软件开发 【费用流 || 三分】
题目链接:BZOJ - 1221 题目分析 算法一:最小费用最大流 首先这是一道经典的网络流问题.每天建立两个节点,一个 i 表示使用毛巾,一个 i' 表示这天用过的毛巾. 然后 i 向 T 连 Ai ...