Struts1 框架简介
Struts1框架是apache公司的开源子项目,是基于mvc逻辑分层的web层框架实现。是出现最早的web层框架,应用最广发。Struts1框架重点关注的是控制层,对于视图层只是提供了大量的标签;对于model层的影响微乎其微。
Strut1框架的流程详细解释:
1. 客户端发出*.do请求,ActionServlet获取请求,从配置文件中查找path属性与请求名相匹配的Action元素。通过type属性找到用户要请求的Action。总控制器需要检查name属性,如果没有,则将请求直接分发到具体控制器中。
2. 如果name属性存在,根据name属性查找formBean的类型。在查看scope属性,attribute属性。调用 request(session).getAttribute(“attrName”) ,如果返回null,说明在请求域中formBean实例不存在。有总控制创建Formbean ,调用formBean的reset()方法,在将formBean实例绑定到作用域对象中。
再调用formBean的setter()方法,完成参数的封装;在检查validate属性,如果true,则调用formBean的validate()方法进行表单校验。校验通过,则将请求分发到具体action中,将封装了表单参数的formBean实例通过形参传递给action。
Struts1中控制器组件:ActionServlet、Action
其中ActionForm组件用来封装传值,其作用范围局限于视图层和控制层之间使用,不应将ActionForm传递个Model层。ActionForm从本质而言属与model层,ActionForward组件:转发或者重定向对象
ActionMapping组件:辅助组件用来帮助action读取相关的信息。
框架搭建:选择web项目,右键->MyEclipse->Add Struts
Web.xml中内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<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>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
Struts-Config.xml配置文件配置单动作控制器与动作控制器:
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<data-sources />
<form-beans >
<!-- formbean 元素表示FormBean组件的注册;name属性表示注册名;type属性表示formBean组件的全名 -->
<form-bean name="loginForm" type="com.bsb.struts.form.LoginForm" />
<!-- 动态formBean的设置,采取模型驱动封装表单数据 -->
<form-bean name="studForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="stud" type="com.bsb.pojo.StudBean" />
</form-bean>
</form-beans>
<global-exceptions />
<global-forwards >
<forward name="loginok" path="/form/main.jsp" redirect="true"></forward>
<forward name="cscheck" path="/cs.do"></forward>
</global-forwards>
<action-mappings >
<!-- action元素表示控制器的注册;path属性表示控制器的映射名;type属性表示控制器的全名
name属性表示帮助action封装表单参数的formBean的注册名
scope属性表示formBean的作用域,默认为session
attribute属性表示formBean在作用域中的属性名
validate属性表示formBean封装完表单参数后是否需要进行表单校验,默认为true
input属性定义用来展示异常信息的页面 -->
<action attribute="loginForm" input="/form/login.jsp" name="loginForm"
path="/login" scope="request" validate="true"
type="com.bsb.struts.action.LoginAction" >
<forward name="loginfail" path="/form/login.jsp"></forward>
</action>
<!-- 查询班级的控制器 -->
<action path="/cs" type="com.bsb.struts.action.CsAction" >
<forward name="checkcs" path="/form/stud.jsp"></forward>
</action>
<!-- 多动作控制器 parameter属性指定参数名method;此参数method的值就是用户请求的控制器的方法名
示例: action="/stud.do?method=save" Struts1中多动作控制器不能拥有默认的execute方法 -->
<action attribute="studForm" input="/form/stud.jsp" name="studForm"
parameter="method" path="/stud" scope="request"
type="com.bsb.struts.action.StudAction">
<forward name="saveok" path="/form/main.jsp" redirect="true"></forward>
<forward name="checkstuds" path="/form/show.jsp"></forward>
<forward name="checkbyid" path="/form/update.jsp"></forward>
<forward name="updateok" path="/stud.do?method=checkAll"></forward>
</action>
</action-mappings>
<!-- 注册struts框架需要使用的资源包ApplicationResources.properties-->
<message-resources parameter="com.bsb.struts.ApplicationResources" />
</struts-config>
FormBean验证:
public class LoginForm extends ActionForm {
private String lname;
private String lpass;
private String lid;
public String getLname() {return lname; }
public void setLname(String lname) { this.lname = lname; }
public String getLpass() {return lpass; }
public void setLpass(String lpass) {this.lpass = lpass; }
public String getLid() { return lid; }
public void setLid(String lid) {this.lid = lid; }
/* validate方法用来验证表单参数的合法性
* 此方法如果返回null ,或者返回空的ActionErrors
* 表示验证通过。如果验证失败,总控制器会将流程转发到
* action元素中input属性指定的页面,展示异常提示信息*/
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errs =new ActionErrors();
if(this.lname.equals("")){
//创建包含异常提示信息的异常对象
ActionError err = new ActionError("error.jsp.name");
//将异常对象绑定到异常集合中(map)
errs.add("lname", err);
}
if(this.lpass.length()<6){
ActionError err = new ActionError("error.jsp.pass");
errs.add("lpass", err);
}
return errs; //errs通过request传递到input属性指定的页面
}
public void reset(ActionMapping mapping, HttpServletRequest request) {
this.lname="";
this.lpass=""; }
}
LoginAction.action: 单动作控制器:
public class LoginAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;//获取封装了表单参数的formBean
// 创建javaBean
LoginBean lb = new LoginBean();
//通过BeanUtils辅助类,将formBean的属性值赋值给javaBean
try {
BeanUtils.copyProperties(lb, loginForm);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//进行登录验证
boolean flag =new LoginService().loginValidate(lb);
if(flag){
return mapping.findForward("loginok");//重定向
}else{
ActionErrors errs = new ActionErrors();
ActionError err = new ActionError("error.user");
errs.add("usererror", err);
this.saveErrors(request, errs); //手工将errs绑定到request对象中
//return mapping.findForward("loginfail");
return new ActionForward(mapping.getInput());
}
}
}
StudAction.action:多动作控制器
public class StudAction extends DispatchAction {
public ActionForward save(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DynaActionForm studForm = (DynaActionForm) form;
//获取formBean中封装了表单参数的studBean
StudBean stud = (StudBean) studForm.get("stud");
boolean flag = new StudService().saveStud(stud);
if(flag){
return mapping.findForward("saveok");
}else{
return new ActionForward(mapping.getInput());
}
}
public ActionForward update(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DynaActionForm studForm = (DynaActionForm) form;
// 从动态formBean中获取封装了表单参数的javaBean
StudBean stud = (StudBean) studForm.get("stud");
boolean flag = new StudService().updateStud(stud);
return mapping.findForward("updateok");
}
public ActionForward checkAll(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
List studs = new StudService().checkAll();
request.setAttribute("studs", studs);
return mapping.findForward("checkstuds");
}
public ActionForward checkByID(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DynaActionForm studForm = (DynaActionForm) form;
StudBean stud = (StudBean) studForm.get("stud");
stud = new StudService().checkByID(stud.getSid());
//将封装了学生信息的studBean,绑定到动态formBean中
studForm.set("stud", stud);
List cs = new ClassesService().checkAll();//查班级
request.setAttribute("cs", cs);
return mapping.findForward("checkbyid");
}
}
Struts1标签:
Login.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-template" prefix="template" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-nested" prefix="nested" %><html>
<head><title>JSP for LoginForm form</title></head>
<body>
<html:errors property="usererror" />
<html:form action="/login">
lname : <html:text property="lname"/><html:errors property="lname"/><br/>
lpass : <html:password property="lpass"/><html:errors property="lpass"/><br/>
<html:submit/><html:cancel/>
</html:form>
</body>
</html>
超链接
<a href="/struts1Test/cs.do">保存学生a</a><br>
<html:link page="/cs.do">保存学生page</html:link><br>
<html:link href="/ struts1Test /cs.do">保存学生href</html:link><br>
<html:link action="/cs">保存学生action</html:link><br>
<html:link forward="cscheck">保存学生forward</html:link><br>
<html:link action="/stud?method=checkAll">查询</html:link>
迭代标签:
<logic:present name="studs">
<logic:iterate id="stud" name="studs">
${stud.sname }${stud.sage }${stud.sexname }${stud.sbirthday }${stud.cname }
<html:link action="/stud?method=checkByID&stud.sid=${stud.sid}">修改</html:link><br>
</logic:iterate>
</logic:present>
添加学生表单:
<html:form action="/stud?method=save">
姓名:<html:text property="stud.sname"></html:text><br>
年龄:<html:text property="stud.sage"></html:text><br>
性别:<html:radio property="stud.ssex" value="0">男</html:radio>
<html:radio property="stud.ssex" value="1">女</html:radio><br>
生日:<html:text property="stud.sbirthday"></html:text><br>
班级:<html:select property="stud.cid">
<logic:iterate id="c" name="cs">
<html:option value="${c.cid}">${c.cname}</html:option>
</logic:iterate>
</html:select><br>
<html:submit/><html:cancel/>
</html:form>
修改也学生信息表单
<html:form action="/stud?method=update">
<html:hidden property="stud.sid" />
姓名:<html:text property="stud.sname"></html:text><br>
年龄:<html:text property="stud.sage"></html:text><br>
性别:<html:radio property="stud.ssex" value="0">男</html:radio>
<html:radio property="stud.ssex" value="1">女</html:radio><br>
生日:<html:text property="stud.sbirthday"></html:text><br>
班级:<html:select property="stud.cid">
<logic:iterate id="c" name="cs">
<html:option value="${c.cid}">${c.cname}</html:option>
</logic:iterate>
</html:select><br>
<html:submit/><html:cancel/>
</html:form>
发表评论
-
struts1上传(暂记)
2012-02-07 20:18 982异常:ClientAbortException: java. ... -
html:message(记录)
2011-06-12 22:58 879struts中<html:messages>标签的使用 htt ... -
struts-Action属性详解(转)
2011-05-04 11:08 786转载地址:http://sobaid.blog ... -
框架中常用的jar包作用 (转)
2011-02-28 15:41 4116框架中常用的jar包作用 http://hepu.iteye. ... -
struts1基础及原理(转)
2011-02-22 14:36 815http://hi.baidu.com/zhujiawei/b ... -
logic:iterator struts1 功能小例 (转)
2011-01-24 08:48 3896http://ajava.org/course/open/13 ... -
struts1 bean:define 转
2010-11-30 21:24 19591.<bean:define id="foo& ...
相关推荐
Struts2框架简介。课件 ppt 初学者可以下载
在Struts框架中,Model代表业务逻辑,通常由JavaBeans或EJB实现;View是用户界面,通常使用JSP或HTML;Controller是控制器,它负责接收HTTP请求,调用相应的业务逻辑,然后更新视图。Struts通过Action类作为控制器的...
Struts1是一个经典的Java Web开发框架,由Apache软件基金会维护,它主要负责处理MVC(Model-View-Controller)架构中的Controller部分。本教程通过一个简单的登录实例,将引导你了解如何搭建Struts1框架环境并进行...
struts1框架教案
**1.1 Struts1简介及存在的问题** Struts1是由Craig McClanahan在2001年推出的第一个MVC框架。自问世以来,Struts1迅速赢得了全球Java Web开发者的青睐,经过多年的实践和完善,Struts1已经成为了一个成熟稳定的...
1. **Struts2框架概述**:Struts2是基于Model-View-Controller(MVC)设计模式的开源框架,它简化了Java Web应用程序的开发,提供了一种组织应用结构和控制业务逻辑的方式。Struts2继承了Struts1的优点,并吸取了...
1. **Action类**:在Struts2中,业务逻辑通常由Action类执行。Action类是用户请求与模型交互的桥梁,它接收HTTP请求,处理业务逻辑,然后返回一个结果。 2. **配置文件**:Struts2的配置文件通常为struts.xml,它...
#### 一、Struts 2框架与Struts 1框架的主要差异 在探讨Struts 2框架之前,我们先来理解一下它与Struts 1框架之间的主要区别。这两代框架尽管名字相似,但在设计理念和技术实现上却存在显著的不同。 1. **设计理念...
Struts框架是一个基于Java Servlet和JavaBean的MVC(Model-View-Controller)框架,它在JSP Model2架构的基础上发展而来,旨在提供更高效、更易于管理的Web应用程序开发。Struts通过分离应用程序的业务逻辑、用户...
Struts2框架是一款基于MVC(Model-View-Controller)设计模式的开源Java Web应用程序框架,它极大地简化了Java Servlet API的使用,提高了开发效率。这个压缩包包含了两个不同版本的Struts2框架:struts2.0.11和...
Struts2.0框架是Java Web开发中的一款经典MVC(Model-View-Controller)框架,它极大地简化了Web应用的构建,提高了开发效率。本书《Struts2.0框架书籍》显然是一本深入探讨这一框架的专业教程,旨在帮助开发者理解...
首先,Struts2框架的出现是为了弥补Struts1的一些不足,提供了更强大的动作(Action)处理和更灵活的视图(View)渲染。它的核心组件包括Action、Result、Interceptor(拦截器)等,这些组件共同协作以实现业务逻辑...
Struts1是一个经典的Java Web开发框架,由Apache软件基金会维护,它基于Model-View-Controller(MVC)设计模式,极大地简化了企业级Web应用的开发。在Java Web开发领域,Struts1曾广泛应用于构建复杂的业务逻辑和...
本项目为基于Java语言的Struts1框架设计的struts1Demo项目源码,包含55个文件,涵盖23个JAR包、10个Java源文件、6个JSP文件、4个XML配置文件及其他类型文件。
首先,Struts2框架是Apache软件基金会的开源项目,它继承了Struts1的优点,并吸取了其他框架如WebWork的精华。Struts2的核心在于Action类,它是处理用户请求并执行业务逻辑的主要组件。每个Action类都对应一个URL,...
struts2框架所需要的jar包,包括commons-logging-1.0.4.jar,struts2-core-2.0.11.jar,freemarker-2.3.8.jar,ognl-2.6.11.jar,xwork-2.0.4.j等,希望对大家有用!
【标题】:Ibatis+Spring+Struts1框架搭建 在Web开发中,Ibatis、Spring和Struts1是三个非常重要的组件,它们分别负责不同的职责。Ibatis是一个优秀的持久层框架,Spring是一个全面的后端应用框架,而Struts1则是一...
Struts2是Java Web开发中的一款广泛应用的开源MVC框架,它构建在Apache Struts 1的基础上,提供了更为强大的功能和更好的灵活性。Struts2旨在简化Web应用开发,通过将表现层与业务逻辑层解耦,提高了代码的可维护性...
1. Validator Framework:Validator Framework 是 Struts2 验证框架的核心组件,负责对用户输入的数据进行验证。Validator Framework 提供了一个通用的验证机制,可以对用户输入的数据进行验证。 2. Validators:...