您的位置:首页 > 编程语言 > Java开发

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

2015-10-07 16:17 447 查看
初次接触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的工作流程如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息