本文主要是介绍struts 1.1 框架基本原理,以及介绍struts 1.1 安装和一个简单的例子。
1. struts的起源
struts是作为apache jakarta项目的组成部分。该项目的目标是为建立java web 应用程序而提供的一个开源框架,目前大家一般使用的版本为1.1,但也出现了1.2。通过使用struts 框架可以改进和提高java server pages (jsps)、servlet、标签库以及面向对象的技术在web应用程序中的应用。应用struts框架可以减少你应用mvc(model- view -controller)设计模式的开发时间,从而提高开发效率。把struts应用于j2ee客户端,应该是一个不错的选择。
2. struts的工作原理
谈到struts,我们就不得不提到mvc设计模式。mvc即model-view-controller的缩写,它是web应用当中的常用的设计模式。mvc 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。
struts是mvc的一种实现,它很好的结合了jsp,java servlet,java bean ,taglib等技术。那么我们来看看struts框架的工作原理:
控制:在struts中,actionservlet起着一个控制器(controller)的作用。actionservlet是一个通用的控制组件。这个控制组件提供了处理所有发送到struts的http请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是action类的子类)。另外控制组件也负责用相应的请求参数填充 action form(通常称之为frombean),并传给动作类(通常称之为actionbean)。动作类实现核心商业逻辑,它可以访问java bean 或调用ejb。所有这些控制逻辑利用struts-config.xml文件来配置。
视图:主要是由jsp来控制页面输出的。它接收到action form中的数据,利用html,taglib,bean,logic等显示数据。
模型:在struts中,主要存在三种bean,分别是:action,actionform,ejb或者java bean。actionform用来封装客户请求信息,action取得actionform中的数据,再由ejb或者java bean进行处理。
3 struts 优点与缺点
优点:1.利用struts提供的taglib可以大大节约开发时间。2. 表现与逻辑分离。 3.维护扩展比较方便。 4 便于团队开发
缺点:大量的使用标签,对于初学者难度较大。
4. struts 1.1 安装
安装struts 1.1 比较简单。假设我们使用的是tomcat 5.0,并且安装在d:\tomcat下。首先,请到http://jakarta.apache.org/struts/ 下载struts 1.1,解压缩后,可以看到jakarta-struts-1.1目录,在这个目录下面,你可以看到这样一个目录:webapps.该目录下面有多个*.war,我们copy struts-blank.war 文件到d:\tomcat\webapps下,restart tomcat,在tomcat 的webapps下就会生成一个struts-blank空白struts开发环境。另外,在你解压缩的目录下的webapps中 struts-example.war 是一个很好的struts学习教程,如果你想深入学习请访问http://jakarta.apache.org/struts 或者 下载 《struts in action》 e 文版。
5. 一个简单的例子
5.1 logon.jsp
<%@ taglib uri="/web-inf/struts-html.tld" prefix="html" %>
<%@ page contenttype="text/html; charset=gb2312" %>
<%
/**
* this page shows logon interface.
* title: logon system
* description: logon page
* copyright: copyright (c) 2004
* company: www.ewe.com.cn
* @author bluesunny <hyjun2001@163.com>
* @version 1.0
*/
response.setheader("pragma","no-cache");
response.setheader("cache-control","no-cache");
response.setdateheader("expires", 0);
%>
<html>
<head>
<title>logon</title>
</head>
<body>
<html:errors/>
<html:form action="/logon" focus="username">
username:<html:text property="username" size="25"/>
password:<html:password property="password" size="25"/>
<html:submit property=”submit”/>
</html:form>
</body>
</html>
页面为用户登陆页面,应用到struts的html标签。
5.2 logonform.java
package com.logon.app;
import javax.servlet.http.*;
import org.apache.struts.action.*;
/**
* this page shows logonform.java
* title: logon system
* description: logonform page
* copyright: copyright (c) 2004
* company: www.ewe.com.cn
* @author bluesunny
* @version 1.0
*/
public class logonform extends actionform{
private string username;
private string password;
public loginform() {
username = null;
password = null;
}
public void setusername(string username){
this.username = username;
}
public string getusername() {
return this.username;
}
public void setpassword(string password){
this.password = password;
}
public string getpassword(){
return this.password;
}
public void reset(actionmapping mapping, httpservletrequest request)
{
username = null;
password = null;
}
}
这个页面为actionform bean ,主要是用来封装客户端的用户名与密码。
5.3 logonaction.java
package com.logon.app;
import java.io.*;
import java.sql.*;
import org.apache.struts.action.action;
import org.apache.struts.action.actionforward;
import org.apache.struts.action.actionmapping;
import org.apache.struts.action.actionform;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.struts.action.*;
/**
* this page shows logonaction.java
* title: logon system
* description: logonaction page
* copyright: copyright (c) 2004
* company: www.ewe.com.cn
* @author bluesunny
* @version 1.0
*/
public class logonaction extends action{
public actionforward execute(actionmapping actionmapping, actionform actionform, httpservletrequest request, httpservletresponse response)throws exception{
logonform form = (logonform)actionform;
actionerrors errors = new actionerrors();
string username = form.getusername();
string password = form.getpassword();
if(username.equals(“bluesunny”) && password.equals(“bluesunny”)){
return actionmapping.findforward("success");
}else{
errors.add("login",new actionerror("logon.failed"));
saveerrors(request,errors);
return actionmapping.findforward("failed");
}
}
}
取得actionform中的数据,进行处理,处理结果返回到jsp页面。
5.4 web.xml
<?xml version="1.0" encoding="iso-8859-1"?>
<!doctype web-app
public "-//sun microsystems, inc.//dtd web application 2.3//en"
"http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
<web-app>
<display-name>struts logon application</display-name>
<!-- standard action servlet configuration (with debugging) -->
<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>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- standard action servlet mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- the welcome file list -->
<welcome-file-list>
<welcome-file>logon.jsp</welcome-file>
</welcome-file-list>
<!-- struts tag library descriptors -->
<taglib>
<taglib-uri>/tags/struts-bean</taglib-uri>
<taglib-location>/web-inf/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-html</taglib-uri>
<taglib-location>/web-inf/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-logic</taglib-uri>
<taglib-location>/web-inf/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-nested</taglib-uri>
<taglib-location>/web-inf/struts-nested.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-tiles</taglib-uri>
<taglib-location>/web-inf/struts-tiles.tld</taglib-location>
</taglib>
</web-app>
5.5 struts-config.xml
<?xml version="1.0" encoding="iso-8859-1" ?>
<!doctype struts-config public
"-//apache software foundation//dtd struts configuration 1.1//en"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<form-beans>
<form-bean name="logonform" type=" com.logon.app.loginform"/>
</form-beans>
<action-mappings>
<action
path="/logon" type="com.logon.app.logonaction" name="logonform" scope="request" input="logon.jsp">
<forward name="success" path="/success.jsp"/>
<forward name="failure" path="/logon.jsp"/>
</action>
<message-resources parameter="resources.application"/>
</struts-config>
5.6 application.properties
logon.failed = logon failed!please logon in again!
5.7 deploy logon application
创建一个success.jsp,输入:"successflly!".
编译源文件,并且把该应用程序部署在tomcat里,假设部署在app目录下面。我们可以启动浏览器访问:http://localhost:8080/app/.
5.8 目录结构
/web-inf :
/ web-inf/lib : struts.jar
/ web-inf/classes :
/ web-inf/classes/com/logon/app : *.class
/ web-inf/classes/resources : *.properties
6. 总结
本文详细讲解了struts的工作原理以及安装方法,并且举了一个登陆例子作为struts框架应用。另外,本文对struts的目录结构也有说明,这大大减轻了初学者学习负担,可以作为struts入门之用。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器