Struts 1.x 工作流程 附第一个Struts 1.x实例讲解

初次接触Struts,感觉类似于SSH框架之类的技术都很高大上。现在的商业市场上,太多的Web应用和网站采用SSH框架,不可否认,SSH框架之所以广为流传的一点就是,它的包装性很强,使用者只需在它提供的容器之中调用相应借口,并进行配置就可以搭建出各种高大上的网站。对于任何一个Struts框架初学者来说,多余接触惯了Java Web的MVC模式的应用开发,Struts显得并不陌生,也不困难。简而言之,Struts是对MVC模式的一种封装,一种打包,从而让使用者更容易的使用这种技术。

开门见山,先展示一个Struts框架上的实例:第一个Struts 1.x 实例 —— HelloWorld

新建项目,命名为HelloWorld;

右键,Myeclipse,Project Facets ,为新项目添加Strus1.3容器环境;

右键,new, Others,Myeclipse ,Web Struts  1.x ,新建Struts Form,Action & JSP;

按照指示添加helloForm, hello.jsp, helloAction;



注:图14.5:在Forward选项下添加一个Name为 success,Path为“/form/helloSuccess.jsp"的选项。Path必须以”/“开头,helloSuccess.jsp为HelloAction的输出页面。

添加成功后,可以查看到hello.jsp如下:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%> 
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
 
<html> 
	<head>
		<title>JSP for HelloForm form</title>
	</head>
	<body>
		<html:form action="/hello">
			name : <html:text property="name"/><html:errors property="name"/><br/>
			<html:submit/><html:cancel/>
		</html:form>
	</body>
</html>

编辑helloSuccess.jsp如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'helloSuccess.jsp' starting page</title>

  </head>
  
  <body>
      Hello,${ helloForm.name }.Welcome to Struts world.
  </body>
</html>


HelloForm如下:

package com.zlg.struts.form;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

public class HelloForm extends ActionForm {

	private static final long serialVersionUID = 1L;

	private String name;

	public ActionErrors validate(ActionMapping mapping,
			HttpServletRequest request) {
		// TODO Auto-generated method stub
		return null;
	}

	public void reset(ActionMapping mapping, HttpServletRequest request) {
		// TODO Auto-generated method stub
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

HelloForm相当于一个java Bean,它把表单封装成一个JavaBean对象,有利于数据的存储和传输。

web.xml如下:

<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>3</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>3</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</servlet>

struts-config.xml如下:


从这个视图中,可以看得出,Struts的大体工作流程即:

hello.jsp提交表单——>表单信息封装到HelloForm中——>经过Struts内部机制的控制——>携带表单信息跳转到helloSuccess.jsp

具体这个过程中,Struts采用的是何种机制来控制应用程序的工作呢?

可以看到struts-config.xml的源码如下:

<struts-config>
  <form-beans >
    <form-bean name="helloForm" type="com.zlg.struts.form.HelloForm" />

  </form-beans>

  <global-exceptions />
  <global-forwards />
  <action-mappings >
    <action
      attribute="helloForm"
      input="/form/hello.jsp"
      name="helloForm"
      path="/hello"
      scope="request"
      type="com.zlg.struts.action.HelloAction"
      validate="false"
      cancellable="true">
      <forward name="success" path="/form/helloSucess.jsp" />
    </action>

  </action-mappings>

  <message-resources parameter="com.zlg.struts.ApplicationResources" />
</struts-config>


完成HelloAction代码,如下:

package com.zlg.struts.action;

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;
import com.zlg.struts.form.HelloForm;

public class HelloAction extends Action {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		HelloForm helloForm = (HelloForm) form;
		if(helloForm.getName() == null || helloForm.getName().trim().length() == 0){
			return mapping.getInputForward();
		}
		return mapping.findForward("success");
	}
}


到这里,第一个struts 1.x实例可以说已经完成了。运行,如下:


运行结果为:


若输入中文,会出现乱码,可以加入字符过滤器Filter,如下:

package com.zlg.struts.core;
import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;


public class CharacterEncodingFilter implements Filter {
	
	private  boolean enable;
	private  String character;
	
	public void init(FilterConfig config) throws ServletException {
		  
		  character = config.getInitParameter("character") ;
          enable = config.getInitParameter("enable").trim().equalsIgnoreCase("true");
	}

	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
		
		if(enable==true && (character != null || !character.equals(""))){
			req.setCharacterEncoding(character);
			resp.setCharacterEncoding(character);
		}
	    chain.doFilter(req, resp);
	}
	
	public void destroy() {
		character=null;
	}

}


web.xml中配置如下:

 <filter>
     <filter-name>CharacterEncodingFilter</filter-name>
     <filter-class>com.zlg.struts.core.CharacterEncodingFilter</filter-class>
     <init-param>
        <param-name>enable</param-name>
        <param-value>true</param-value>
     </init-param>
     <init-param>
        <param-name>character</param-name>
        <param-value>UTF-8</param-value>
     </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

从上面的实例可以看出,struts的工作流程如下:






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值