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的核心文件。内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration1.3
//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans></form-beans>           //用于配置ActionForm
<global-exceptions></global-exceptions>//用于配置全局异常
<global-forwards></global-forwards>//用于配置全局跳转
<action-mappings></action-mappings>//用于配置Action
<message-resources parameter="cn.edu.fzy.struts.ApplicationResources"></message-resources>//用于配置资源文件路径,资源文件保存在文件夹WEB-INF\classes文件夹中,通过parameter属性指定路径及文件名称,文件名称后缀是properties。
</struts-config>

然后配置web.xml文件

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

<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/helloServlet</url-pattern>

</servlet-mapping>

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

<jsp-config>
<taglib>
<taglib-uri>http://edu.com.struts/bean</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://edu.com.struts/logic</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://edu.com.struts/html</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
</jsp-config>

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

这就是它的基本配置。

下面看以第一个Struts程序

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

<pre code_snippet_id="419333" snippet_file_name="blog_20140706_1_1272478" name="code" class="html"><%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="<span style="font-size: 18px; ">http://edu.com.struts/html</span>"%>
<pre name="code" class="html" style="font-size: 18px; "><%@ taglib uri="<span style="font-size: 18px; ">http://edu.com.struts/bean</span>"%>
<%@ taglib uri="<span style="font-size: 18px; ">http://edu.com.struts/logic</span>"%>

 
 
<html:html lang="true">
<body>
<span style="white-space:pre">	</span><html:errors/>
<span style="white-space:pre">	</span><logic:present name="msg"scope="request">//使用<logic:present>属性判断request内是否存在msg属性
<span style="white-space:pre">	</span>${msg}
<span style="white-space:pre">	</span></logic:present>
<span style="white-space:pre">	</span><html: form action="/Demo/hello.do" method="post">
<span style="white-space:pre">	</span>输入信息:<html:text property="info"></html:text>
<span style="white-space:pre">	</span><html:submit value="显示"></html:submit>
<span style="white-space:pre">	</span></html:form>
</body>
</html:html>

 
 

上边也可以使用普通的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>接着我们必须配置struts-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration1.3
//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans>
<form-bean name="hellForm" type="cn.edu.fay.struts.HelloForm"></form-bean>
</form-beans>
<global-exceptions></global-exceptions>
<global-forwards></global-forwards>
<action-mappings>
<action attribute="helloForm" input="/hello.jsp" name="helloForm"
path="/bootstrap1/hello" scope="request" type="cn.edu.fzy.struts.HelloAction">
<forward name="show" path="/bootstrap1/hello.jsp"></forward>
</action>
</action-mappings>
<message-resources parameter="cn.edu.fzy.struts.ApplicationResources"></message-resources>
<form-bean>:表示配置的每一个ActionForm,在此节点中敌营了name属性制动此ActionForm的名称,type属性表示的是此ActionForm对应的包、类名称。
<action>:表示配置的每一个Action,此节点的属性如下:attribute、name:指定此Action要使用的ActionForm名称,此名称在<form-bean>标签中配置。
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属性中指定的页面路径,此时可以通过<html:errors>标签显示所有错误信息;
第六:Action负责完成具体的业务操作,并根据操作的结果通过ActionMapping进行跳转,ActionMapping的findForward()方法返回一个ActionForward对象完成跳转。





























































你可能感兴趣的:(java,Web,程序员,CSDN博客)