Struts教学视频

Domain Name (DDD 领域模型驱动)

Pattern          

Framework

 

UI(Presentation) Layer -- Business Layer -- Persistence Layer

Structs           Spring                  Hibernate

 



Struts教学视频_第1张图片
 
 

 面向请求驱动(Structs1.x Structs 2.x Webwork)

 面向事件驱动 (JSF)

 

 Action, ActionForm, ActionMapping

 

 JSP页面 --> ActionServlet (doPost ) --> RequestProcessor.process() 截取url (/login)

              --> ProcessMapping --> findActionMapping (struts-config.xml)--> FormBean (ActionFrom)

              --> 收集表单数据 (processPopulate) --> processValidate --> processActionPerform

              --> processForwardConfig

 


Struts教学视频_第2张图片
 

 

动态验证框架 

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">

       <set-property  property="patchnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml/>

</plug-in>

 

ActionForm

 @Override
 public void reset(ActionMapping mapping, HttpServletRequest request) {
  System.out.println("----------LoginActionForm.reset()-----------");
 }

 收集数据前重置数据

 

 @Override
 public ActionErrors validate(ActionMapping mapping,
   HttpServletRequest request) {
  System.out.println("----------LoginActionForm.validate()-----------");
  return null;
 } 

 服务器端验证(表单验证,原则上不做数据库的验证)

 可以在struts-config.xml 里面设置是否执行。默认validate="true"

 

<body>
	<%
		LoginActionForm laf = (LoginActionForm)request.getAttribute("loginForm");
	%>
	<%=laf.getUsername() %>,登录成功
</body>

 

 

 动态ActionForm (避免actionform过多)

 org.apache.struts.action.DynaActionForm

 

	<form-beans>
		<form-bean name="dynaForm" type="org.apache.struts.action.DynaActionForm">
			<form-property name="username" type="java.lang.String"/>
			<form-property name="age" type="java.lang.Integer"/>
		</form-bean>

 

 

 ActionForm_Struts上传

 

org.apache.struts.upload.FormFile

 

public class UploadTestAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		UploadActionForm uaf = (UploadActionForm)form;
		System.out.println("title" + uaf.getTitle());
		FormFile myFile = uaf.getMyfile();
		if (myFile != null) {
			System.out.println("fileName=" + myFile.getFileName());
			
			FileOutputStream fos = new FileOutputStream("c:\\" + myFile.getFileName());
			fos.write(myFile.getFileData());
			fos.flush();
			fos.close();
		}
		return mapping.findForward("success");
	}

}

 

 <controller maxFileSize="10M"/>  可配置各种上传文件的限制

 

空字段问题

 

UI不存在这个字段, JS和EL效果不一样,JS为null,EL为“”

UI存在这个字段,JS和EL效果一样

 

类型转换器

 

实现接口Convert接口,需注册,在servlet启动时

 

public class UtilDateConverterInitWithServlet extends HttpServlet {

	@Override
	public void init() throws ServletException {
		System.out.println("UtilDateConverterInitWithServlet.init()");
		ConvertUtils.register(new UtilDateConverter(), Date.class);
	}

}

 

Plugin注册

 

 <plug-in className="com.bjsxt.struts.UtilDateConverterInitWithPlugin"/>

 

public class UtilDateConverterInitWithPlugin implements PlugIn {

	public void destroy() {
	}

	public void init(ActionServlet servlet, ModuleConfig config)
			throws ServletException {
		System.out.println("UtilDateConverterInitWithPlugin.init()");
		ConvertUtils.register(new UtilDateConverter(), Date.class);
	}
}

 

 

public class UtilDateConverter implements Converter {

	public Object convert(Class type, Object value) {
		System.out.println("UtilDateConverter.value=" + value);
		if (value == null) {
			return value;
		}
		if (value instanceof Date) {
			return value;
		}
		Date d = null;
		if (value instanceof String) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			try {
				d = sdf.parse((String)value);
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return d;
	}

}

 

DTO   数据传输对象

VO     值对象

 

ActionForm就是一个DTO对象

 

ActionForward

 

重定向 <forward name="login" path="/login.jsp" redirect="true"/>

 

全局ActionForward

 

 <global-forwards>
  <forward name="login" path="/login.jsp" redirect="true"/>
 </global-forwards>

 

 ActionForward af = mapping.findForward("login");
 af.setRedirect(false);
 return af;
   

 

public class MustLoginAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		if (request.getSession().getAttribute("user") == null) {
			
			ActionForward af = mapping.findForward("login");
			
			//af.setRedirect(false);
			return af;
			
			//response.sendRedirect(request.getContextPath() + "/login.jsp");
			//return null;
		}
		return mapping.findForward("success");
	}

}

 

动态ActionForward

  ActionForward af = new ActionForward();
  af.setPath("/page" + page + ".jsp?name=Tom");
  return af; 

 

 自己写actionForward  className属性

 

 ActionMapping

 

对应配置信息,一个标签对应一个instance

 

validate 校验错误到input

parameter

 

unknowActionMapping

 

forward属性,空action,从do过去

<action path="/login1"    forward="/login.jsp"  ></action>

 

  <action path="/testunknown"
    unknown="true"
    forward="/testunknown.jsp"
  ></action>

针对do请求

 

和type互斥,配了以后就不执行action属性定义的类了

 

 

Struts 国际化

 

request.getSession().setAttribute(Globals.LOCALE_KEY, currentLocale);

或者

this.setLocale 在Action里面

 

动态国际化文本

创建国际化消息文本

ActionMessage message = new ActionMessage("user.login.success",username);

 

传递国际化消息文本

this.saveMessage(request,messages);   普通消息

this.saveErrors    错误消息

 

通过<html:messages>标签(可以显示普通和错误消息)

通过<html:errors>只能显示错误消息

你可能感兴趣的:(spring,Hibernate,UI,struts,领域模型)