Struts体系结构剖析

时间:2021-04-10 09:00:06


Struts是应用于web应用程序的开源软件。它是一个基于MVC设计模式的web应用框架,它可以帮助我们减少在运用mvc设计模型来开发web应用的时间。

它使用Jsp和Servlet API建立,可以用来构建复杂的web应用。它允许我们分解一个应用程序的商业逻辑,控制逻辑和表示逻辑,使它的重用性和维护性更好。

 

Struts来源:

Struts体系结构剖析

模型一:

Struts体系结构剖析

 示例:界面层中含有的java代码

<%@ page import="com.tgb.drp.sysmgr.domain.*" %>
<%@ page import="com.tgb.drp.sysmgr.manager.*" %>
<%
request.setCharacterEncoding("GB18030");
String command=request.getParameter("command");
if("modify".equals(command)){
User user=new User();
user.setUserId(request.getParameter("userId"));
user.setUserName(request.getParameter("userName"));
user.setPassword(request.getParameter("password"));
user.setContactTel(request.getParameter("contactTel"));
user.setEmail(request.getParameter("email"));

UserManager.getInstance().modifyUser(user);
out.println("修改成功!");
}

String userId=request.getParameter("userId");
User user=UserManager.getInstance().findUserById(userId);
%>


模型二:

Struts体系结构剖析

 

示例代码:

此时jsp中不再有大量的java代码,相关的java代码都转移到了servlet中。

package com.tgb.drp.basedata.web;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.tgb.drp.basedata.domain.Item;
import com.tgb.drp.basedata.manager.ItemService;
import com.tgb.drp.util.BeanFactory;
import com.tgb.drp.util.datadict.ItemCategory;
import com.tgb.drp.util.datadict.ItemUnit;

public class ModifyItemServlet extends AbstractItemServlet {

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获得物料信息
String itemNo=request.getParameter("itemNo");
String itemName=request.getParameter("itemName");
String spec=request.getParameter("spec");
String pattern=request.getParameter("pattern");
String category=request.getParameter("category");
String unit=request.getParameter("unit");

Item item=new Item();

item.setItemNo(itemNo);
item.setItemName(itemName);
item.setSpec(spec);
item.setPattern(pattern);
//获得物料类别列表
ItemCategory ic=new ItemCategory();
ic.setId(category);
item.setItemCategory(ic);
//获得物料单位列表
ItemUnit iu=new ItemUnit();
iu.setId(unit);
item.setItemUnit(iu);

//设置request
request.setAttribute("item", item);

itemService.modifyItem(item);
//转发
request.getRequestDispatcher("/servlet/basedata/SearchItemServlet").forward(request, response);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}

}

 

struts可以更好的体现MVC架构,下面为其uml图:

Struts体系结构剖析
 

Struts框架介绍:

Struts体系结构剖析

描述:

Struts部分本身就体现了MVC结构,它的出现使得web应用框架的编写节省了大量的时间,使得各个层次各司其职,各尽其责,其扩展性和维护性大大增强。

View层:

Web窗体和jsp页面,在view端,除了使用标准的Jsp外,还提供了大量的标签库的使用,同时也可以与其他表现层组件技术产品进行整合,如XSLT等。

Controller层:

         Servlet:*控制器,负责截取URL或转发。view,controller,Model对应的关系struts-config.xml的配置文件,转发view的请求,组装响应数据模型。

Model层:

         分为两个部分,ActionForm和Action。ActionForm为系统的内部数据状态,主要收集表单数据,这样表单数据会自动转换成相应的数据类型。Action则处理与业务逻辑层相关的联系。

而struts与spring,Hibernate又组成了整个系统的MVC层。

Struts主要处理表现层,为web应用框架;而spring为业务逻辑层的框架,Hibernate为持久层框架。具体可看下图:

Struts体系结构剖析

通过struts,用户可以最终将大部分的关注点放在自己的业务逻辑(Action)和映射关系的配置文件struts-config.xml中。

struts部分示例代码展示:

ActionForm部分代码:

package com.drp.web.forms;

import java.util.Date;

import org.apache.struts.action.ActionForm;

/**
* 用户管理ActionForm
*
*/
public class UserActionForm extends ActionForm {

//用户代码
private String userId;

//用户名称
private String userName;

//密码
private String password;

//联系电话
private String contactTel;

//email
private String email;

//创建日期
private Date createDate;

public String getContactTel() {
return contactTel;
}

public void setContactTel(String contactTel) {
this.contactTel = contactTel;
}

public Date getCreateDate() {
return createDate;
}

public void setCreateDate(Date createDate) {
this.createDate = createDate;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getUserId() {
return userId;
}

public void setUserId(String userId) {
this.userId = userId;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

}


 

Action部分代码:

/**
* 用户添加
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {

//获取从页面表单中提交过来的值
UserActionForm uaf = (UserActionForm)form;
User user = new User();
BeanUtils.copyProperties(user, uaf);
user.setCreateDate(new Date());

//调用业务逻辑操作
UserManager.getInstance().addUser(user);
return mapping.findForward("add_success");

}


配置文件:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>

<form-beans>
<form-bean name="userForm" type="com.drp.web.forms.UserActionForm"/>
</form-beans>

<action-mappings>
<action path="/user/user_maint"
type="com.drp.web.actions.UserAction"
name="userForm"
scope="request"
parameter="command"
>
<forward name="add_success" path="/user/user_maint.do" redirect="true"/>
</action>
</action-mappings>
<message-resources parameter="MessageResources" />

</struts-config>