第一个struts案例及分析

软件中的框架,是一种半成品; 我们项目开发需要在框架的基础上进行!因为框架已经实现了一些功能,这样就可以提高开发效率!

Struts2 = struts1  +  xwork  (struts是基于MVC模式的框架)

struts2预先实现的功能:

  1、请求数据自动封装

  2、文件的上传

  3、国际化功能的简化

  4、数据效验

  ..........

Struts开发步骤:

1. web项目,引入struts - jar包

版本: 2.3

  commons-fileupload-1.2.2.jar   【文件上传相关包】

  commons-io-2.0.1.jar

  struts2-core-2.3.4.1.jar           【struts2核心功能包】

  xwork-core-2.3.4.1.jar           【Xwork核心包】

  ognl-3.0.5.jar                          【Ognl表达式功能支持表(类似于el表达式,但语法不同)】

  commons-lang3-3.1.jar          【struts对java.lang包的扩展】

  freemarker-2.3.19.jar            【struts的标签模板库jar文件】

  javassist-3.11.0.GA.jar           【struts对字节码的处理相关jar】

2. web.xml中,引入struts的核心功能(在项目的web.xml中引入过滤器),如下

 (struts的核心功能是通过滤器来完成初始化,Filter【init(服务器启动的时候执行)/doFilter(用户访问的时候执行)/destory(销毁执行)】

<!-- 引入struts核心过滤器 -->
  <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>

这个class文件的路径下的StrutsPrepareAndExecuteFilter就是一个核心过滤器(注意: 使用的struts的版本不同,核心过滤器类是不一样的!)

3. 开发action

(action类—动作类,取代之前的servlet,即处理请求类,action中的业务方法,处理具体的请求,一般返回string,方法中不带有参数)

4. 配置action

src/struts.xml



案例:

1、导入响应的jar包之后。配置xml文件(web.xml)

<?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" 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>firstStruts</display-name>

  <!-- 引入struts核心过滤器 -->
  <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>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

2、开发action,处理请求,通常实现actionSupport接口。

package com.gqx.action;

import com.opensymphony.xwork2.ActionSupport;

//开发action,处理请求
public class HelloAction extends ActionSupport{

	//处理请求
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		System.out.println("访问到了action,正在处理请求。");
		System.out.println("使用service方法");
		return "success";
	}
}

3、配置action,在src下写入struts.xml文件(和前面写的那个mystruct相似)

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<!-- START SNIPPET: xworkSample -->
<struts>
    <package name="gqx" extends="struts-default">
       <action name="test" class="com.gqx.action.HelloAction" method="execute">
            <result name="success">/success.jsp</result>
        </action>
    </package>

</struts>

<!-- END SNIPPET: xworkSample -->

4、在success.jsp页面写入

<body>
    This is success page. <br>
  </body>

访问写的action(根据在struts.xml中配置的信息,根据action的name去访问即可得到相对应的信息),如下,访问http://localhost:8080/firstStruts/test,页面会自动跳转到success.jsp


struts执行流程

一、服务器启动:

1. 加载项目web.xml

2. 创建Struts核心过滤器对象, 执行filter中的init(),里面有加载以下文件的方法

struts-default.xml,    核心功能的初始化

       struts-plugin.xml,     struts相关插件

       struts.xml                 用户编写的配置文件

二、访问,可以在HelloAction类中添加一个无参构造方法

public HelloAction() {
		// TODO Auto-generated constructor stub
		System.out.println("HelloAction.HelloAction()");
	}

每当我们访问的时候可以看到控制台的信息,同时不论第一次访问,还是第二次访问,他都会调用这个无参构造方法,与servlet的一次调用不同。

所以用户每次访问都会创建一个acton实例。

时间: 2025-01-06 20:59:31

第一个struts案例及分析的相关文章

一个测试案例的分析

案例: 某软件公司在开发一个城镇居民保险系统时,在单元测试.集成测试阶段,为了追赶进度,开发人员与测试人员都没有介入测试工作. 系统测试阶段,测试小组借助缺陷管理工具和开发人员交互进行测试与缺陷修复工作.期间,发现"扭转文档无法归档"的严重错误,开发人员在修改时,认为难度太大,决定暂停修改,得到测试人员认可.在产品发布前,该问题在开发环境下得到解决. 回归测试结束后,开发人员把开发环境下的产品打包,发送给客户. 分析:在案例中,有几处显然不合理的地方: 1.测试介入太晚 2.回归测试做

机器学习 - 文本分析案例 - 新闻分析

文本分析概念 停用词 语料中大量出现, 无用数据, 如下类似的这种词语 Tf  - 词频统计 TF 的计算方式有很多, 最常见的用 某词文章中出现次数 / 文章总词数 idf  - 逆文档频率 TF - idf   关键词提取 相似度 分词 语料库 词频 词频向量 整体流程 语料清洗 (去掉停用词, 去掉大量重复的非正常用语等) 计算公式 文本分析案例 - 新闻分析 样本数据 数据来源于 搜狗实验室新闻数据   数据需要处理成  pandas 便于读取的数据才可以使用 import pandas

[转]Struts1.x系列教程(1):用MyEclipse开发第一个Struts程序

转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/13/251101.html 本系列教程将详细介绍Struts 1.x的基本原理和使用方法,读者可以参阅<Struts 2系列教程>来比较Struts 1.x和Struts 2.x的相同点和不同点.    在这篇文章中将以一个简单的例子(mystruts)来演示如何使用MyEclipse来开发.运行Struts程序,并给出了解决ActionForm出现乱码问题的方法.读者可以从本文中了解

一个可以实时跟踪分析iOS App视图的小工具

一个可以实时跟踪分析iOS App视图的小工具(已开源) GitHub入口:https://github.com/sx1989827/RunTrace 前言 作为iOS的开发者,常常为了UI界面搞得头破血流,你是不是经常遇到这样的痛点:这个view是从哪里来的,它的父视图是什么,它的子视图有哪些,它的frame会发生什么样的变化,它怎么突然隐藏了,它什么时候会被释放掉,对于像自动布局,错误常常如潮水般的涌来,我想动态获取一个view的约束怎么办,我想知道这个view此时此刻和其他哪些view产生

拿到一个新 bug 怎样分析

1. 拿到一个新 bug, 首先要重现问题. 这对 code 问题是必须的, 对客户的 data 问题, 几乎也是必须的. 如果是 code 问题, 不重现就没办法修改代码, 改好了也无法验证是不是改对了. 客户的 data 出问题, 多数情况也是能够重现的. 毕竟客户是用我们的系统操作的, 只要拿到客户的历史数据, 对照着是可以自己做出同样的数据. 以前我遇到 data fix 的时候不喜欢重现, 都是凭感觉给出脚本. 但这样常常忽略一些重要的数据, 容易出错. 如果确定是 data fix,

发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser

发布一个高效的JavaScript分析.压缩工具 JavaScript Analyser 先发一段脚本压缩示例,展示一下JSA语法压缩和优化功能. try { //xxxx(); } catch (e) { yyyy(); function f1() { } } finally { zzzz(); } function f2(var1) { var var2 = 2; var var3 = 3; var withObject = {var2:-2} with(withObject){ alert

java中一个memcached案例

下面先来一个网络上的案例,这个案例比较简单,直接在类中进行一些参数的配置,具体代码如下: package com.wzpmt; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.danga.MemCached.MemCachedClient; import com.danga.MemCached.SockIOPool; public class MemCachedManager

工厂方法和观察者模式的一个真实案例

1 import java.util.ArrayList; 2 3 class Manager 4 { 5 private String name; //经理的名字 6 public Manager(String string) { 7 name=string; 8 } 9 public void update(String id) 10 { 11 System.out.println("哈哈"+id+"房子已经被买了,好开心"); 12 } 13 14 15 }

零基础学习java------35---------删除一个商品案例,删除多个商品

一. 删除一个商品案例 将要操作的表格 思路图  前端代码 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>> <!DOC