Struts框架<一>
来源:互联网 发布:北理莫斯科大学知乎 编辑:程序博客网 时间:2024/05/21 12:39
Struts框架<一>
Struts框架,是基于MVC框架【(Model-View-Controller)把一个Java应用的输入、输出、处理流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层—-模型层、视图层、控制层。】
现在主要使用的是Struts2框架,
Struts2是
Struts的第二代产品,以WebWork为核心,采用拦截器的机制处理用户请求,使业务逻辑控制器能与Servlet API完全脱离。Struts1采用Servlet的机制处理用户请求。
Struts 2框架的所有类都基于接口,核心接口独立于HTTP。Struts 2配置文件中的大多数配置元素都会有默认值,有助于减少在XML文件中需要进行的配置。
Struts2框架主要由三部分组成:
核心控制器(StrutsPrepareAndExecuteFilter)、业务控制器和用户定义的业务逻辑组件。
1、核心控制器
FilterDispatcher是早期struts2的过滤器,可以对客户端URL请求进行过滤,负责处理用户所有以.action结尾的请求。2.1.3版后,官方推荐使用StrutsPrepareAndExecuteFilter
2、业务控制器
是用户实现的Action类实例。Action类通常包含一个execute方法,返回一个字符串作为逻辑视图名。创建了Action类之后,还需要在struts.xml文件中配置此Action的相关信息
3、业务逻辑组件
通常是指用户自己针对系统功能开发的功能模块组件。被业务控制器组件所调用来处理业务逻辑的。
Struts2框架的处理流程
第1步:客户端浏览器发送一个请求。
第2步: web服务器如Tomcat收到该请求,读取配置文件,将请求 导向Struts2的StrutsPrepareAndExecuteFilter(核心控制器), 后者根据请求决定调用合适Action。
第3步:StrutsPrepareAndExecuteFilter在调用Action之前被Struts2的拦截器拦截,拦截器自动对请求应用通用功能,如数据转换,校验等。
第4步:调用Action的execute方法,该方法根据请求的参数来执行一定的操作。
第5步:依据Action的execute方法处理结果,导向不同的URL。如在execute中验证用户,验证成功可以导向成功的页面。否则重新登录
Action:类似于EJB,在JavaBean中封装方法。
在Struts2中,Action不同于struts1.x中的Action。Struts2中Action并不需要继承任何控制器类型或实现相应接口。比如struts1.x中的Action需要继承Action或者DispatcherAction。
同时Struts2中的Action并不需要借助于象struts1中的ActionForm获取表单的数据。可以直接通过与表单元素相同名称的数据成员(setter-getter函数)获取页面表单数据。
虽然Struts2中的Action原则上不用继承任何类。但是一般需要实现Action接口或者继承ActionSupport类,重写execute方法。如果继承ActionSupport类,我们可以在的控制器中增加更多的功能。
定义Action类的两种形式:
1、基本形式:从ActionSupport类继承 public class LoginAction extends ActionSupport{ private String username; private String password; /*getter-setter代码略*/ public void validate(){…} public String execute()throws Exception {….} }2、普通JavaBean package com.bean; public class User { private String username; private String password; /*getter-setter代码略*/ public String execute()throws Exception {...} }
Action自己写:
//第一种是不继承ActionSupportpublic class LoginAction extends ActionSupport{ private String username; private String password; //必须写set,get方法 //根据默认业务方法,返回的字符串来指定结果页面 public String execute(){ //自己定义数据,放到指定容器中 ActionContext context = ActionContext.getContext(); Map<String,Object> appCtx=context.getApplication(); appCtx.put("user", this); context.getSession().put("user", this); //手动获取指定容器中数据 Object obj =context.getSession().get("user"); if(username.startsWith("hncu") && password.length()>3){ return "SUCCESS"; }else{ return "index"; } //其他方法 public void fun1(){ System.out.println("fun1:"+username+","+password); } }
//第二种是继承public class LoginAction extends ActionSupport{//其他的是一样的,主要是可以用到父类中的方法,例如数据校验@Override public void validate() { System.out.println("数据校验:"+username+"----"+password); //super.validate(); }}
必要的包:
然后写配置文件(我是直接拷的struts2-blank中的struts.xml)
//struts.xml是放到src目录下<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <!-- 动态方法调用,true --> <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> <package name="default" namespace="/" extends="struts-default"> <!-- name就是index表单里面的action --> <action name="Login" class="cn.hncu.login.action.LoginAction"> <!-- 导向结果页面 --> <result name="SUCCESS" >/jsps/show.jsp</result> <result name="index">/index.jsp</result> </action> </package></struts>
在index.jsp中表单的action:
<body> <h2>用户登录</h2> <!-- 用Strust框架后,表单提交给action处理,这里的action就是struts中配置的Action名字--> <form action="Login" method="post"> Name:<input type="text" name="username"><br/> Pwd:<input type="password" name="password"><br/> <input type="submit" value="登录"><br/><br/><br/> </form> </body>
也可以调用其他方法:
<form action="Login!fun1.action"> Name:<input type="text" name="username"><br/> Pwd:<input type="password" name="password"><br/> <input type="submit" value="登录"> </form>
在show.jsp页面中显示:
<body> <h2>登录成功</h2> 欢迎你:${username }!<br/> ${sessionScope.user.username }<!-- 从容器中拿--> </body>
在web.xml中要配置过滤器,可以在过滤器中写拦截器:
//写在第一个,拦所有 <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
一个官方给我们的空白框架:
里面包含xml配置文件,必要的包
http://pan.baidu.com/s/1pLuQKT9
- Struts框架(一)
- Struts框架学习一
- Struts框架<一>
- Struts学习总结(一)---搭建Struts框架
- struts校验框架(一)
- struts框架知识点总结<一>
- Struts 框架技术用户指南(一) (1)
- Struts 框架技术用户指南(一) (2)
- 开发框架 Struts应用[一] (MyEclipse)
- Struts:validator验证框架详解(一)
- 分步学习Struts(一)框架
- ssh学习笔记一:struts框架学习
- Hibernate及Struts框架基础学习(一)
- Struts框架(一)——简介
- Struts框架学习笔记(一)
- [Struts2 框架学习] 一、Hello,Struts
- 自学SSH框架之---struts(一):struts的配置
- 学习Struts框架系列(一):模拟Struts工作流程
- uva 1329 Corporative Network
- javascript:;与javascript:void(0)使用介绍
- ansj5.1自动摘要提取
- java String对象总结
- net-tools与iproute2大比较
- Struts框架<一>
- WaterView 自定义圆形水波进度
- scrapy下载图片时,图片链接报错Missing scheme in request url: %s' % self._url
- python实现电子邮件编程
- 面试准备
- 关于input[type=file] change事件只能触发一次的问题
- 单例模式——静态内部类实现(推荐使用)
- mysql字符集不乱码的思想
- input输入框用js正则函数自由限制符号内容