初始Struts1

1.WHAT

Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。如果我们想混合使用Servlets和JSP的优点来建立可扩展的应用,struts是一个不错的选择。它通过采用JavaScript/JSP技术,实现了基于Java_EE Web应用的MVC设计模式的应用框架,是MVC典设计模式中的一个经典产品。

2.WHY

为什么会有Struts呢?

大家看上述图片,我们平常用Servelt的时候,是不是也是这样做的呢?客户端发送请求,然后在Servelt端接受,通过条件来判断到底用那个Servelt来接受信息处理。如果客户端多了的话,会在Servelt端出现大量的条件判断语句。那么如何来解决这个问题呢?

3.去除条件判断

1.配置文件上场

为了除去Servelt端大量的条件判断,我们可以把客户端与Servlet端封装到配置文件中,详细的信息如下:

<span style="font-family:SimSun;font-size:18px;"><?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="loginForm" type="com.bjpowernode.struts.LoginActionForm"/>
</form-beans>

	<action-mappings>
		<action path="/login"
				type="com.bjpowernode.struts.LoginAction"
				name="loginForm"
				scope="request"
				>
			<forward name="success" path="/login_success.jsp" />
			<forward name="error" path="/login_error.jsp"/>
		</action>
	</action-mappings>
</struts-config>

</span>

上面的path路径就代表,客户端表单提交的路径配置,Type代表的是具体那个Servlet来处理客户端的请求,name中的信息正好与上面的表单对应,这样的话,我们就可以直接把客户端提交过来的表单中的数据直接在Action中取到。

4.Struts1实战

客户端登陆界面

<span style="font-family:SimSun;font-size:18px;"><%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
  <form action="login.do" method="post">
  	用户:<input type="text" name="username"><br>
  	密码:<input type="password" name="password">
  	<input type="submit" value="登录">
  </form>
</body>
</html></span>

登录的ActionForm

<span style="font-family:SimSun;font-size:18px;">package com.bjpowernode.struts;

import org.apache.struts.action.ActionForm;
import org.apache.struts.upload.FormFile;

/*
 * 负责ActionForm 负责表单收集数据
 */
public class LoginActionForm extends ActionForm {

	private FormFile myfile;
	private String username;
	private String password;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
}
</span>

登录的控制器处理请求

<span style="font-family:SimSun;font-size:18px;">package com.bjpowernode.struts;

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

import org.apache.commons.validator.Form;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

/*
 * 登录Action
 * 负责取得表单数据,调用业务逻辑,返回转向信息
 */
public class LoginAction extends Action {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		/*LoginActionForm lafActionForm=(LoginActionForm)form	;
		String usernameString=lafActionForm.getUsername();
		String passwordString=lafActionForm.getPassword();
		if("admin".equals(usernameString)&&"admin".equals(passwordString)){
			//登录成功
			return mapping.findForward("success");
		}else {
			//登录失败
			return mapping.findForward("error");
		}*/

		LoginActionForm lafActionForm=(LoginActionForm)form	;
		String usernameString=lafActionForm.getUsername();
		String passwordString=lafActionForm.getPassword();
		UserManager userManager=new UserManager();

		try {
			userManager.login(usernameString, passwordString);

		} catch (UserNotFoundException e) {
			e.printStackTrace();
			request.setAttribute("msg", "用户不能找到,用户名称"+usernameString);
		}catch (PasswordErrorException e) {
			e.printStackTrace();
			request.setAttribute("msg", "密码错误");
		}

		//转到错误页面
		return mapping.findForward("error");
	}

}
</span>

5.小结

首先不管Struts内部的执行流程,我们如果单纯的用的话,需要做的就是首先建立子的ActionForm和控制器,然后按照Struts的格式,在配置文件中配置Form与控制器的对应关系即可。上面只是一个简单的应用,更多的内容请详见以后的博客。



时间: 2024-10-18 09:21:11

初始Struts1的相关文章

struts1,struts2,springMVC终极对比

最近做项目用到了struts2,之前一直是用struts1和springMVC.感觉到了struts2从很大程度上和这两个还是有很大区别的,所以今天搜集了些资料,给他们做一下对比. Struts1官方已经停止更新,现在用的也比较少,这里主要讲一下struts2和struts1比较都有哪些不同和进步.Struts2可以说不是完全从struts1改进来的,因为struts2原本就是举世闻名的Webwork2,在经历几年的发展之后,struts和WebWork社区决定合二为一,也就是今天的struts

Struts1和Struts2的区别和对比(完整版)

Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物. 简单来说二者的区别是: 一个是Stuts1 ,一个是Stuts2,这是最大的区别,技术方面,Stuts1有个核心控制器,但是只提供了一个接口,也就是execute,还要配置actionform之类的,很麻烦,所以依赖性比较强:而Stuts2是针对拦截器开发的,也就是所谓的AOP思想,可以配置多个act

struts1与struts2的区别

Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物. 简单来说二者的区别是: 技术方面,Stuts1有个核心控制器,但是只提供了一个接口,也就是execute,还要配置actionform之类的,很麻烦,所以依赖性比较强:而Stuts2是针对拦截器开发的,也就是所谓的AOP思想,可以配置多个action,用起来比较方便,但是因为请求之前的拦截器有一些注入

小学生之浅谈Struts2与struts1的运行机制

Struts1工作原理图: 1.初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts中不同的模块初始化相应的对象.(面向对象思想) 2.发送请求:用户提交表单或通过URL向WEB服务器提交请求,请求的数据用HTTP协议传给web服务器. 3.form填充:struts的总控制器ActionServlet在用户提交请求时将数

Struts1和Struts2的区别和对比

Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口. • Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能.Struts2提供一个ActionSupport基类去 实现 常用的接口.Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象. 线程模式: • Stru

Struts1之html标签

Struts1的html标签主要是为了绘制HTML页面标签元素,通过与Struts1框架的集成,增强功能 首先,在使用前,需要引入tld文件 <%@ taglib prefix="html" uri="http://struts.apache.org/tags-html" %> 标签详细讲解 html:link 对应<a>标签 首次打开,会自动生成jsessionid,如果浏览器支持cookie,会自动将jsessionid添加到cookie

Struts1与Struts2的那些事

一.概述 Struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截用户的全部请求.Struts1框架有3个重要组成部分:Action.ActionForm和ActionForward对象. ActionForm必须实现ActionForm的基类,设计上并非真正的POJO ActionForward就是一个逻辑视图,通过在配置文件里定义ActionFoward的映射,完毕逻辑视图名和实际视图资源之间的映射 Struts2核心控制器:FilterDispatch

Struts1和struts2的区别(总结)?

struts1和Struts2的区别和对比:(欢迎补充) Action类: ?Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口. ?Struts2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能.Struts2提供一个ActionSupport基类去实现常用的接口.Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象. 线程模式: ?Strut

web学习:Spring2.5+Hibernate3.3+Struts1.3整合小例子

写android有段时间了,感觉思维越写越狭窄,考虑问题越来越局限了,看不到一个项目整体的设计和构架,觉得很有必要多多写一些大型的框架性的东西来提高自己的视野. 从接触java到现在一年多了,在我的印象里,struts好像是用来接收请求然后处理,将处理结果在跳转到jsp上显示的:spring就是 一个大型的工厂,专门生产业务的类:hibernate就是负责和数据库勾结,然后提供数据的.惭愧啊,我居然从来都没有用过SSH三大框架,居然我也能 鬼使神差的工作了,而且工作了这么长时间了,趁现在空暇和还