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>
<tagli
闽公网安备 35060202000074号