java web进阶篇(九) Struts基础开发

Struts是Apache基金组织中Jakarta项目组的一个开源项目。主要实现MVC设计模式,其操作本质仍然是JSP、Servlet、JavaBean等技术应用。

在struts中一共提供了4种标签。

NO 标签库 描述
1 Bean标签 管理JSP页面中的Bean操作
2 Logic标签 完成各种逻辑控制操作
3 Html标签 显示标签,主要是生成HTML标记
4 TILES标签 使用动态模板构造显示页面
5 NESTED 使用潜逃标签进行复杂的页面显示


下面是MVC与Struts中各个组件的对应关系。MVC是标准,Struts是实现,实现了此接口。

NO 组成部分 传统MVC Struts
1 试图(view) JSP(可加入JSTL减少页面代码) 在传统页面中提供了标签库的支持
2 控制器(Controller) Servlet Action
3 模型(Model) JavaBean ActionForm     JavaBean

首先看配置Struts开发环境。最新的可以从http://jakarta.apache.org/下载。将下载下的压缩包解压,将lib文件夹下的全部jar包复制到工程的lib目录下,或者tomcat的lib目录下。

配置完之后我就就需要在WEB-INF文件夹中简历struts-config.xml的核心文件。内容如下:


//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">

          //用于配置ActionForm
//用于配置全局异常
//用于配置全局跳转
//用于配置Action
//用于配置资源文件路径,资源文件保存在文件夹WEB-INF\classes文件夹中,通过parameter属性指定路径及文件名称,文件名称后缀是properties。

然后配置web.xml文件

此处实际上配置的是一个ActionServlet,此映射路径是*.do;在Struts中配置的*.do的映射已经是一个注明的标志,一般当看到提交路径是以此种形式表示的基本上都属于Struts开发的项目。


action
org.apache.struts.action.ActionServlet
0


action
*.do


helloServlet
/helloServlet

接着配置web.xml文件,增加标签库配置



http://edu.com.struts/bean
/WEB-INF/struts-bean.tld


http://edu.com.struts/logic
/WEB-INF/struts-logic.tld


http://edu.com.struts/html
/WEB-INF/struts-html.tld


其一共提供了5大类标签库,即bean, logic,   html,   nested  ,tiles后面两个很少用。

这就是它的基本配置。

下面看以第一个Struts程序

首先建立页面,引入tablib标签库。

<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="http://edu.com.struts/html"%>
<%@ taglib uri="http://edu.com.struts/bean"%>
<%@ taglib uri="http://edu.com.struts/logic"%>

 
  
	
	//使用属性判断request内是否存在msg属性
	${msg}
	
	
	输入信息:
	
	

 
  

上边也可以使用普通的HTML标签。下面在hello.jsp页面中输出所有的错误信息,所有信息由ActionForm和Action进行设置。

更需要注意的是表单提交的路径是hello.do,这个路径需要在struts-config.xml文件中进行配置。

建立ActionForm--------HelloFrom.java

package cn.edu.fzy.struts;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.mvel2.util.ThisLiteral;

public class HelloForm extends ActionForm {
	private String info;
	@Override
	public ActionErrors validate(ActionMapping mapping,
			HttpServletRequest request) {
		// TODO Auto-generated method stub
		ActionErrors errors=new ActionErrors();
		if (this.info==null||"".equals(this.info)) {
			errors.add("info",new ActionMessage("error.info"));
		}
		return errors;
	}

	@Override
	public void reset(ActionMapping mapping, HttpServletRequest request) {
	}

	public String getInfo() {
		return info;
	}

	public void setInfo(String info) {
		this.info = info;
	}
	
	
}

HelloForm类的主要功能是用于验证,继承ActionForm类,类中定义的info属性与表单提交的参数一致,并设置了setter和getter操作,

然后我们定义Action---------HelloAction.java

package cn.edu.fzy.struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class HelloAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		// TODO Auto-generated method stub
		HelloForm helloForm=(HelloForm) form;
		String info=helloForm.getInfo();
		request.setAttribute("msg", info);
		return mapping.findForward("show");
	}
	
}

接着我们必须配置struts-config.xml



//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">








path="/bootstrap1/hello" scope="request" type="cn.edu.fzy.struts.HelloAction">



:表示配置的每一个ActionForm,在此节点中敌营了name属性制动此ActionForm的名称,type属性表示的是此ActionForm对应的包、类名称。
:表示配置的每一个Action,此节点的属性如下:attribute、name:指定此Action要使用的ActionForm名称,此名称在标签中配置。
input表示当验证出错(ActionForm不为空)时跳转的错误显示页面;path此Action对应的路径,此时为hello.do;type此Action对应的包、类名;

上面就是Struts的第一个程序,我们针对Struts的流程就行说明;
第一:在web.xml中为ActionServlet配置一个映射路径,一般都为*.do;
第二:当一个JSP页面执行时,如果使用的是HTML标签定义的表单,会根据action指定的路径与struts-config.xml文件中的路径相匹配,匹配失败则报错;
第三:在运行一个JSP页面,会调用指定ActionForm中的Reset()方法,进行表单元素的初始化;
第四:用户提交表单时会将所有的操作都提交到ActionServlet(由*.do决定)中,之后由ActionServlet根据struts-config.xml文件中的配合调用指定的ActionForm和Action进行处理;
第五:表单提交的数据首先会交给ActionForm处理,并自动调用其中的validate()方法,如果验证成功则交给相应的Action处理;验证失败,则跳转到提交Action中配置的input属性中指定的页面路径,此时可以通过标签显示所有错误信息;
第六:Action负责完成具体的业务操作,并根据操作的结果通过ActionMapping进行跳转,ActionMapping的findForward()方法返回一个ActionForward对象完成跳转。





























































你可能感兴趣的:(java,web学习,csdn博客,java,web,程序员)