Struts2综述

来源:互联网 发布:淘宝能卖中药吗 编辑:程序博客网 时间:2024/06/03 19:15

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 0
原创粉丝点击