Struts 2工作流程

Struts2是一个基于MVC设计模式的Web开发框架, 正如官网上介绍的那样:

ApacheStruts 2 is an elegant, extensible framework for creating enterprise-ready Javaweb applications. The framework is designed to streamline the full developmentcycle, from building, to deploying, to maintaining applications over time.

Struts2是由Struts和Webwork这两个优秀的框架演化而来,它的出现解决了表现层和业务逻辑层紧耦合的问题。

为了支持Struts 2,通常我们需要添加以下类库:

  • commons-fileupload.jar            文件上传
  • commons-io.jar        I/O类库
  • commons-lang-2.4.jar     Java.lang包
  • commons-lang3-3.1.jar   Java lang包扩展
  • commons-logging.jar       日志
  • freemarker-2.3.19.jar      表现层框架
  • javassist-3.9.0.GA.jar      代码生成工具Hibernate用它在运行时扩展java类和实现,同cglib包
  • ognl-3.0.6.jar            对象图导航语言
  • struts2-core-2.3.14.2.jar                   Struts2核心组件
  • struts2-json-plugin-2.3.14.2.jar       Struts2对Json数据格式支持(非必须)
  • xwork-core-2.3.14.2.jar            webwork核心类库

接下来编辑Web应用中的web.xml,配置Struts2的核心类库,下面是配置文件的代码片段,在web.xml文件中,定义了框架的拦截器FilterDispatcher,Servlet初始化Struts框架并且处理所有请求。“/*”表示对于所有的请求都允许。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter>
<!-- 定义Struts2的核心Filter -->
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>com.mycompany.myapp.actions</param-value>
</init-param>
</filter>
<!-- 让struts2的核心Filter拦截所有的请求 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- web应用的默认首页 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

Jsp页面(welcome.jsp和error.jsp省略):login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<body>
<s:form action="login.action">
<s:textfield name="username" key="user"></s:textfield>
<s:textfield name="password" key="pass"></s:textfield>
<s:submit key="login"></s:submit>
</s:form>
</body>

Action类:

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; public class Demo extends ActionSupport {
private String username;
private String password; 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;
} public String execute() throws Exception {
if (getUsername().equals("Beta")) {
ActionContext.getContext().getSession().put("user", getUsername());
System.out.print(getUsername());
return SUCCESS;
} else {
return ERROR;
} } }

接下来需要配置stuts.xml文件,该文件的最大作用就是配置Action和请求之间的对应关系,并配置逻辑视图名和物理视图资源之间的关系。

<?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.custom.i18n.resources" value="mess" />
<!-- 指定国际化编码字符集 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<package name="no-default" extends="struts-default">
<action name="login" class="ntci.cloud.openstack.action.Demo">
<!—定义了三个逻辑视图和物理视图之间的映射 -->
<result name="input">/login.jsp</result>
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
</package>

它的整个业务流程如下图所描述的:

1.        在web.xml中定义核心的Filter来拦截用户的请求;

2.        在struts.xml中查找匹配的Action实例,并调用该Action的业务逻辑方法,上图中如果用户请求url为login.action,则使用ntci.cloud.openstack.action.Demo来处理;

3.        当Action处理用户请求完毕后,通常会返回一个处理结果,通常我们称之为逻辑视图名,这个逻辑视图和物理视图进行关系映射;

4.        Action将数据传给视图资源。

Struts 2常量配置

Struts2中有一些常量配置:

struts.i18n.encoding:指定web应用的指定编码集。该常量的默认配置是UTF-8,对于获取中文请求参数,应该将常量设置为GBK或者GBK2312

struts.devMode:该常量设置Struts2应用是否使用开发模式

Struts 2默认会加载类加载路径下的struts.xml、struts-default.xml、struts-plugin.xml三类文件,其中struts.xml是开发者定义的默认配置文件,struts-default.xml是struts 2框架自带的配置文件,而struts-plugin.xml则是Struts     2插件的默认配置文件。除了以上三个文件,我们也可以在struts.properties、web.xml文件中配置struts常量。在struts.xml文件中,在根目录下添加:

<constantname="struts.i18n.encoding" value="UTF-8" />

在web.xml文件filter目录下,添加

<init-param>
<param-name> struts.i18n.encoding</param-name>
<param-value> UTF-8</param-value>
</init-param>

为了避免struts.xml过于庞大,我们可以将一个struts.xml配置文件分解为多个配置文件,然后在struts.xml文件中包含这些文件。

<?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>
<!—通过include元素导入其它配置文件-->
<include file=”struts-part1.xml”/>
</struts>

Action类

Action类中的属性,不仅可以用于封装请求参数,也可以封装处理结果,Action类并不会对此进行区分。如果请求参数中包含了username属性,则系统会调用Action类中username的setter方法,通过这种方法,username参数就可以传给Action实例。

Struts 2提供了一个Action接口,这个接口提供了Struts2的Action类应该事先的规范,下面是Action接口的代码:

public interface Action{
public static final java.lang.String SUCCESS = "success";
public static final java.lang.String NONE = "none";
public static final java.lang.String ERROR = "error";
public static final java.lang.String INPUT = "input";
public static final java.lang.String LOGIN = "login";
public abstract java.lang.String execute() throws Exception;
}

Struts 2为Action接口提供了一个实现类ActionSupport,为了方便开发,该类里面提供了很多默认方法,包括数据校验的方法、国际化信息的方法等。

Struts 2开发基本流程的更多相关文章

  1. 使用 Struts 2 开发 RESTful 服务

    REST 简介 REST 是英文 Representational State Transfer 的缩写,这个术语由 Roy Thomas Fielding 博士在他的论文<Architectu ...

  2. EClipse开发NDK流程

    EClipse开发NDK流程(现在studio也在2.2之后支持了非常简单,只要创建项目的时候勾选c++支持就可以了)   什么情况下使用ndk,1.保护代码,java很容易反编译,c/c++反汇编比 ...

  3. 模拟IC芯片设计开发的流程

    模拟IC芯片设计开发的流程 IC的设计,模拟和数字, 还有混合IC, 在设计方法, 注意点, 工具等有明显的区别, 我主要以模拟无线接收IC系统设计为例说明. 一个IC芯片的设计开发大致包括如下步骤. ...

  4. git开发部署流程

    git的分支操作 https://blog.csdn.net/QH_JAVA/article/details/77853605 Git 开发部署流程 采用业界成熟方案 Git Flow 分支方式进行开 ...

  5. smart git使用+单人开发一般流程

    单人开发一般流程 clone checkout develop start gitflow start feature 写代码... 选中文件stage(相当于add) commit push fea ...

  6. [转] electron实战开发详细流程

    [From] http://www.myk3.com/arc-8856.html 很久没有更新博客,人越来越懒了,唉 说好做的electron教程距离上次玩electron已经过去了好几个月了.. 这 ...

  7. webWMS开发过程记录(一)- 软件开发的流程

    前言:计划开发一个webWMS,并将开发过程比较完整的记录下来.希望可以完成这个目标 软件开发的流程: 1. 了解该项目的相关概念. 了解所要开发的软件属于什么产品.该产品的基本定义是什么?基本功能模 ...

  8. 【1】TensorFlow光速入门-tensorflow开发基本流程

    本文地址:https://www.cnblogs.com/tujia/p/13862339.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...

  9. 03python开发之流程控制

    03 python开发之流程控制 目录 03 python开发之流程控制 3 流程控制 3.1 流程判断之if判断 3.1.1 代码块 3.1.2 if判断基础语法 3.1.3 案例 3.1.4 if ...

随机推荐

  1. RSA加密

    1.RSA的公钥和私钥到底哪个才是用来加密和哪个用来解密? 答:公钥加密私钥可解,私钥加密公钥可解. 2.RSA非对称加密特点? 答:算法强度复杂.加密解密速度比对称加密解密的速度慢.一个公钥,对外开 ...

  2. leetcode 406

    该算法题就是leetcode 406题, 题目描述: Suppose you have a random list of people standing in a queue. Each person ...

  3. 编写第一个MapReduce程序—— 统计气温

    摘要:hadoop安装完成后,像学习其他语言一样,要开始写一个“hello world!” ,看了一些学习资料,模仿写了个程序.对于一个C#程序员来说,写个java程序,并调用hadoop的包,并跑在 ...

  4. vbs让电脑发音说话

    Dim vbs1 'set vbs1 = WScript.CreateObject("WScript.Shell") set vbs1 = WScript.CreateObject ...

  5. 18.有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?

    方法1(对于PHP5及更高版本): $readcontents = fopen("http://www.phpres.com/index.html", "rb" ...

  6. IPC-->PIPO

    Programing python 4th page 228 """ IPC http://www.cnblogs.com/BoyXiao/archive/2011/01 ...

  7. 什么是JAVAbean

    JavaBean 是一种JAVA语言写成的可重用组件.为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器.JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性 ...

  8. android开发中难免遇到listview刷新数据出现异常

    异常:java.lang.IllegalStateException: The content of the adapter has changed but ListView did not rece ...

  9. Java 导入Excel文件到数据库

    原文:http://www.jb51.net/article/44021.htm 项目中要求读取excel文件内容,并将其转化为xml格式.常见读取excel文档一般使用POI和JExcelAPI这两 ...

  10. HashMap与ConcurrentHashMap的区别

    从JDK1.2起,就有了HashMap,正如前一篇文章所说,HashMap不是线程安全的,因此多线程操作时需要格外小心. 在JDK1.5中,伟大的Doug Lea给我们带来了concurrent包,从 ...