Struts2代码流程分析

以一个修改的小例子来阐述Struts2的工作流程

页面from表单

    <form action="ModifyPassword.action" method="post">
	    <table cellspacing="0" cellpadding="5" width="100%" align="left">
		     <tr>
			    <td width="20%">新密码:</td>
			    <td><input type="text" name="login_password"  id="login_password" maxlength="7"/></td>
		     </tr>
		     <tr>
			    <td width="20%">确认新密码:</td>
			    <td><input type="text" name="passwordnew"   id="passwordnew"  maxlength="7"/></td>
			    </tr>
		     <tr>
			    <td><input type="hidden" name="id" value="${admin.id}"/></td>
			    <td><input type="submit" name="submit" value="修改" onclick="check();"/> <input type="button" name="Input" value="返回" onclick="window.location.href=‘website_set.jsp‘;" class="button"/></td>
		    </tr>
	    </table>
   </form>

Struts.xml

from表单中的Modifypassword

<action name="ModifyPassword" class="com.yinguo.action.admin.ModifyPassword">
			<result name="success">success.jsp</result>
			<result name="error">error.jsp</result>
		</action>

写对应的action方法

public class ModifyPassword  extends ActionSupport{

	private static final long serialVersionUID = 1L;
	private int id;
	private  String login_password;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getLogin_password() {
		return login_password;
	}

	public void setLogin_password(String loginPassword) {
		login_password = loginPassword;
	}

	public String execute()
	{
		AdminServiceImpl adminService = new AdminServiceImpl();
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpSession session = request.getSession();
		Admin admin = (Admin) session.getAttribute("admin");
		if (admin == null) {
			return "fail";
		}
		Admin admin1 = new Admin();
		admin1.setLoginPassword(login_password);
		admin1.setId(id);
		try {
			if (!(adminService.modifyPassword(admin1))) {
				return ERROR;
			}

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return SUCCESS;
	}
}

表单中的字段name要和action中的字段对应,每个action都要继承actionSupport ,必须有个execute方法并且是String 类型。

web.xml配置

<!-- struts2过滤器配置 -->
	<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>
时间: 2024-12-08 08:41:53

Struts2代码流程分析的相关文章

nova boot代码流程分析(三):nova与neutron的交互(2)

继续<nova boot代码流程分析(三):nova与neutron的交互(1)>的分析. #/nova/virt/libvirt/driver.py:LibvirtDriver # NOTE(ilyaalekseyev): Implementation like in multinics # for xenapi(tr3buchet) def spawn(self, context, instance, image_meta, injected_files, admin_password,

nova boot代码流程分析(五):VM启动从neutron-dhcp-agent获取IP与MAC

1.   network和subnet创建代码流程 [[email protected] ~(keystone_user1)]# neutron net-create demo-net [[email protected] ~(keystone_user1)]# neutron subnet-create  demo-net 1.1.1.0/24 --name demo-subnet --gateway 1.1.1.1 --enable_dhcp true 这里,我们主要分析上面两个命令的代码流

u-boot移植(三)---修改前工作:代码流程分析2

一.vectors.S 1.1 代码地址 vectors.S (arch\arm\lib) 1.2 流程跳转 跳转符号 B 为 start.S 中的 reset 执行代码,暂且先不看,先看看 vector.S 中的执行. 1.3 代码分析 ldr{条件} 目的寄存器 <存储器地址> 1 _start: 2 3 #ifdef CONFIG_SYS_DV_NOR_BOOT_CFG 4 .word CONFIG_SYS_DV_NOR_BOOT_CFG 5 #endif 6 /* LDR{条件} 目的

nova boot代码流程分析(二):nova-scheduler主机选择

本篇文章将分析nova-scheduler服务在创建VM时如何进行主机的选择.完整来说,nova-scheduler主机选择的过程主要分为以下几个阶段: 1. nova.scheduler.rpcapi.SchedulerAPI发出RPC请求到nova.scheduler.manager.SchedulerManager. 2. 从SchedulerManager到调度器(类SchedulerDriver). 3. 从SchedulerDriver到Filters. 4. 从Filters到权重

nova boot代码流程分析(一):Claim机制

nova boot创建VM的流程大致为: 1. novaclient发送HTTP请求到nova-api(这里内部细节包括keystone对用户的验证及用户从keystone获取token和endpoints等信息,具体参考<keystone WSGI流程>). 2. nova-api通过rpc调用到nova-conductor. 3. nova-conductor调用rpc进入nova-scheduler进行compute节点的选择,nova-scheduler将compute节点选择的信息的

u-boot移植(三)---修改前工作:代码流程分析3---代码重定位

一.重定位 1.以前版本的重定位 2.新版本 我们的程序不只涉及一个变量和函数,我们若想访问程序里面的地址,则必须使用SDRAM处的新地址,即我们的程序里面的变量和函数必须修改地址.我们要修改地址,则必须知道程序的地址,就需要在链接的时候加上PIE选项: 加上PIE选项后,链接时候的地址就会生成,然后存储在段里面,如下段(u-boot.lds): 然后我们根据这些地址的信息来修改代码,程序就可以复制到SDRAM的任何地方去. 二.代码流程 start.S中执行到了 bl _main,跳转到_ma

u-boot移植(二)---修改前工作:代码流程分析1

一.代码执行总体流程图 1.1 代码路径 U-boot.lds (arch\arm\cpu) vectors.S (arch\arm\lib) start.S (arch\arm\cpu\arm920t) lowlevel_init.S (board\samsung\jz2440) crt0.S (arch\arm\lib) relocate.S (arch\arm\lib) Board_init.c (common\init) Board_f.c (common) Jz2440.h (incl

hyperledger fabric超级账本java sdk样例e2e代码流程分析

一  checkConfig  Before 1.1  private static final TestConfig testConfig = TestConfig.getConfig(); 这里加载一个配置文件(test路径/src/test/java/org/hyperledger/fabric/sdk/testutils.properties,文件不存在就加载代码中写死的默认配置), 配置文件需要设置peer,orderer,ca,eventhub的地址,组织mspid,组织域名.解析配

六、uboot 代码流程分析---start.S

6.1 _start 入口函数 6.1.1 vectors.S (arch\arm\lib) 从上一节可以知道,uboot 的入口函数为 _start .此 函数定义在 vectors.S (arch\arm\lib) 中. 在此文件中,定义了异常向量表,及其操作函数._start 开始后,直接跳入  reset 复位中执行启动. 1 /* 头文件包含,包含架构和配置相关的头文件,自动生成的 */ 2 #include <config.h> 3 4 /* 5 * A macro to allo