Struts2综述

1、MVC

     1.1  Model1 和Model2 

     Model 1 :整个web应用几乎全部在jsp页面上处理,页面身兼view和controller的角色。代码重用度低,扩展和维护难度较大,适用于小型的web站点。

       Model2:是基于MVC的设计模式。Servlet作为前端控制器,负责接收客户端发送的请求。Servlet包含控制逻辑和简单的前端处理,然后调用后端的javaBean来完成实际的逻辑处理,最后转发到相应的jsp页面。

   1.2  MVC是三个单词的缩写,分别为: 模型(Model),视图(View)和控制Controller)。 MVC模式的目的就是实现Web系统的职能分工。Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。View层用于与用户的交互,通常用JSP来实现。Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。

MVC特点:

 (1)多个视图可以对应一个模型。

 (2)模型返回的数据与现实逻辑分离。

2、在Eclipse中使用Struts2

(1)代码结构

 

LoginAtion.java

package org.crazyit.app.action;

import com.opensymphony.xwork2.*;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.*;

import javax.servlet.http.*;

import java.util.Map;

public class LoginAction implements Action
              // ,ServletResponseAware
{
	private String username;
	private String password;
//	private HttpServletResponse response;

	
	
	// username的setter和getter方法
	public void setUsername(String username)
	{
		this.username = username;
	}
	public String getUsername()
	{
		return this.username;
	}

	// password的setter和getter方法
	public void setPassword(String password)
	{
		this.password = password;
	}
	public String getPassword()
	{
		return this.password;
	}

	public String execute() throws Exception
	{
		ActionContext ctx = ActionContext.getContext();
		// 通过ActionContext访问application范围的属性值
		Integer counter = (Integer)ctx.getApplication()
			.get("counter");
		if (counter == null)
		{
			counter = 1;
		}
		else
		{
			counter = counter + 1;
		}
		// 通过ActionContext设置application范围的属性
		ctx.getApplication().put("counter" , counter);
		// 通过ActionContext设置session范围的属性
		ctx.getSession().put("user" , getUsername());
		if (getUsername().equals("hhp")
			&& getPassword().equals("hhp") )
		{
			// 通过ActionContext设置request范围的属性
			ctx.put("tip" , "服务器提示:您已经成功的登录");
			Cookie  c = new Cookie("user", getUsername());
			c.setMaxAge(60*60);
//			response.addCookie(c);
			ServletActionContext.getResponse().addCookie(c);
			return SUCCESS;
		}
		// 通过ActionContext设置request范围的属性
		ctx.put("tip" , "服务器提示:登录失败");
		return ERROR;
	}


}

LoginForm.jsp

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>登录页面</title>
</head>
<body>
<form action="login.action" method="post">
<table align="center">
	<caption><h3>用户登录</h3></caption>
	<tr>
		<td>用户名:<input type="text" name="username"/></td>
	</tr>
	<tr>
		<td>密  码:<input type="text" name="password"/></td>
	</tr>
	<tr align="center">
		<td><input type="submit" value="登录"/><input type="reset" value="重填" /></td>
	</tr>
</table>
</form>
</body>
</html>

Struts.xml

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<constant name="conststruts.devMode" value="true"/>
	<!-- Struts2的所有Action都需位于package下 -->
	<package name="lee" extends="struts-default">
		<!-- 定义名为login的Action,其实现类为LoginAction类 -->
		<action name="login" class="org.crazyit.app.action.LoginAction">
			<!-- 处理结果返回error,对应/WEB-INF/content/error.jsp视图资源 -->
			<result name="error">/WEB-INF/content/error.jsp</result>
			<!-- 处理结果返回success,对应/WEB-INF/content/welcome.jsp视图资源 -->
			<result>/WEB-INF/content/welcome.jsp</result>
		</action>
		<action name="*">
			<!--  -->
			<result>/WEB-INF/content/{1}.jsp </result>
		</action>
	</package>
</struts>

3、Struts2工作流程

1. 客户端发送请求的tomcat服务器。服务器接受,将HttpServletRequest传进来。

2. 请求经过一系列过滤器(如:ActionContextCleanUp、SimeMesh等)

3. FilterDispatcher被调用。FilterDispatcher调用ActionMapper来决定这个请求是否要调用某个Action

4. ActionMapper决定调用某个ActionFilterDispatcher把请求交给ActionProxy

5. ActionProxy通过ConfigurationManager查看struts.xml,从而找到相应的Action类

6. ActionProxy创建一个ActionInvocation对象

7. ActionInvocation对象回调Action的execute方法

8. Action执行完毕后,ActionInvocation根据返回的字符串,找到对应的result。然后将Result内容通过HttpServletResponse返回给服务器。


                                                                               



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值