序
刚开始接触struts2感觉非常难一方面可能是因为我不够smart,还有就是struts2框架确实帮我们做了很多事情,但是这些事情我们都不知道,就像我做好事一样从不留名,但后来还是上了报纸。记得刚开始写jsp页面、搭建tomcat、写servlet代码时那是很有成就感的,因为我能写很多代码啦,而struts2的action,短短几行代码,就把以前感觉有成就感的事情全部毁灭啦。但是随之而来的是什么,是一些严格的条件,比如表单提交的名字,要和对应的properties的名字一致,刚开始还真不知道,所以说呢,不是基于所有平台的HelloWorld都是那么简单,当然你理解之后也会是很简单的。对struts的整体感受是:
your life is much less complicated,thought at first it minght not seem to ! 摘自(struts in action)
struts2表单提交的介绍
搭建环境的过程在实际项目的记录中已经有拉,就不多说拉。
既然讲到表单提交,那就要说下前台view界面的书写作为login.jsp
<%@ 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>
</head>
<body>
<s:form action="login">
<s:textfield name="name" label="UserName"></s:textfield>
<s:password name="pwd" label="UserPwd"></s:password>
<s:submit value="表单提交"></s:submit>
</s:form>
</body>
</html>
效果如下
3、处理这次request请求的是Login 这个action
package org.struts2.llp02;
import com.opensymphony.xwork2.ActionSupport;
public class Login extends ActionSupport {
private static final long serialVersionUID = 1L;
//与前台一样的变量
private String name;
private String pwd;
//必须提供get和set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String execute()
{
//测试代码
System.out.println("username====>"+getName());
System.out.println("userpwd=====>"+getPwd());
//name:lupenglian,pwd:lupenglian
if ((getName().equals("lupenglian"))&&(getPwd().equals("lupenglian"))) {
return SUCCESS;
}
else {
return INPUT;
}
}
}
4、struts.xml文件的配置
<package name="default" namespace="/user01" extends="struts-default">
<!-- 第一天写的 helloworld,今天写个表单提交,和查询 -->
<action name="login" class="org.struts2.llp02.Login">
<result name="success">/user01/welcom.jsp</result>
<result name="input">/user01/login.jsp</result>
</action>
</package>
5、运行结果
console输出相应的用户注册信息
然后action返回success,result指向welcom.jsp页面,显示相应的信息:
今天是第二天,继续学习。
6、处理流程
Reuest 请求到来,携带者name、pwd,这是以string数组的形式在基于http的流中传播,首先被配置在web.xml文件的struts拦截器拦截,也就是核心拦截器。
Struts框架的各种拦截器,实现是在struts-default.xml文件下有一个实现的默认的interceptor的stack,主要说下parama这个拦截器,他会把所有的信息装配到对应的bean当中去。
框架在你按下提交表单的时候,会创建相应的action、ActionContext、valuestack对象,form中有对应的action的信息,通过查询struts.xml文件获取信息,与此同时该action实例会被push到valuestack上.name、pwd等属性的值会通过相应的action提供的set和get方法,完成bean的赋值。