Struts是应用于web应用程序的开源软件。它是一个基于MVC设计模式的web应用框架,它可以帮助我们减少在运用mvc设计模型来开发web应用的时间。
它使用Jsp和Servlet API建立,可以用来构建复杂的web应用。它允许我们分解一个应用程序的商业逻辑,控制逻辑和表示逻辑,使它的重用性和维护性更好。
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);
%>
模型二:
示例代码:
此时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部分本身就体现了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,用户可以最终将大部分的关注点放在自己的业务逻辑(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;
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>