当前位置:文档之家› Struts2详细实例教程

Struts2详细实例教程

Struts2详细实例教程
Struts2详细实例教程

Struts2(上)

一、经典的MVC模式

二、Struts1.x对MVC的实现

三、Struts1.x的主要组件和作用

组件作用

ActionServlet 中央控制器

Action 分控制器,调用JavaBean实现业务逻辑,

Action可以分为Action、DispatchAction等不

同类型

ActionForm 封装参数,实现服务器验证,文件上传等Forward 转发到目的地,可以是JSP,也可以是另一个

Action

Struts-config.xml 配置文件,配置有ActionForm,Action,Forward

等,通过XML解析,然后使用反射技术使用

该文件

Struts标签库和JSTL类似,和Struts-config.xml、

ActionForm、Action等对象可以紧密集成

四、Struts1.x 开发实例-登录程序

见案例。

五、Struts2(WebWork)的MVC

Struts2的MVC架构

六、Struts2的主要组件

组件作用

FilterDispatcher 起中央控制器作用的过滤器

Action 处于Model层的Action,调用JavaBean实现

业务逻辑

struts.xml 核心配置文件,配置有Action、Result等result 和forward类似,转发的目的地,支持多种视

图技术。

七、Struts2的实例-登录

在MyEclipse环境中建立一个新的web工程,名称“Struts2Login”,存放路径“f:\Struts2Login”。

在Struts2.0.11版本中找到war包struts2-blank-2.0.11.war,解开该war包,在WEB-INF/lib 目录下复制出所有的jar包,这些jar包就是一个Struts2程序所需要的基础jar包,把它们复制到新建的web工程的WEB-INF/lib目录中。

在src目录下建立一个类,包名mypack,类名UserAction,其代码如下:

package mypack;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {

private String username;

private String userpass;

public String getUsername() {

return username;

}

public void setUsername(String username) {

https://www.doczj.com/doc/6615357123.html,ername = username;

}

public String getUserpass() {

return userpass;

}

public void setUserpass(String userpass) {

https://www.doczj.com/doc/6615357123.html,erpass = userpass;

}

@Override

public String execute() throws Exception {

if ("Mike".equals(username) && "123".equals(userpass)

|| "张三".equals(username) && "abc".equals(userpass))

return "success";

else

return "error";

}

}

在src目录下建立Struts2的配置文件struts.xml,内容如下:

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"https://www.doczj.com/doc/6615357123.html,/dtds/struts-2.0.dtd">

/Success.jsp

/Error.jsp

修改web.xml,在其中加入一个过滤器,过滤/*路径。

struts2

org.apache.struts2.dispatcher.FilterDispatcher

struts2

/*

在webroot目录下编写3个jsp页面,index.jsp、Success.jsp和Error.jsp,注意这里把page 指令中的pageEncoding设置为“utf-8”,就没有中文问题了。

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme() + "://"

+ request.getServerName() + ":" + request.getServerPort()

+ path + "/";

%>

My JSP 'index.jsp' starting page

用户名:


密  码:


●Success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%

String path = request.getContextPath();

String basePath = request.getScheme() + "://"

+ request.getServerName() + ":" + request.getServerPort()

+ path + "/";

%>

My JSP 'Success.jsp' starting page

欢迎

<%=request.getParameter("username")%>

,登录

●Error.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%

String path = request.getContextPath();

String basePath = request.getScheme() + "://"

+ request.getServerName() + ":" + request.getServerPort()

+ path + "/";

%>

My JSP 'Error.jsp' starting page

用户名或密码错误!

把程序部署在tomcat5.5以上的版本中运行。

图1-2 index.jsp

图1-3 Success.jsp

八、Struts2的中文乱码解决

中文乱码问题一般是指当请求参数有中文时,无法在Action中得到正确的中文。Struts2中有2种办法可以解决这个问题:

●设置JSP页面的pageEncoding=”utf-8”,就不会出现中文乱码;

●如果JSP页面的pageEncoding=”GBK”,那么需要修改struts.i18n.encoding=GBK,在

struts.xml中加入如下语句进行修改。

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"https://www.doczj.com/doc/6615357123.html,/dtds/struts-2.0.dtd">

……

上面2种方法可以解决POST请求中的中文参数,但是GET请求中的中文参数不能解决,GET请求中的中文参数的乱码需要通过修改Tomcat的server.xml文件来解决,修改如下内容,加入URIEncoding=”GBK”:

九、Struts2的Action中访问web对象

Struts2的Action就是一个普通的POJO对象,它和Web对象request、response、session

和application没有耦合在一起,这样便于单独测试Action,那么我们在Action中如何访问这些web对象呢?

访问这些web内部对象有2种方式:

●直接访问Web对象

Struts2框架提供org.apache.struts2.ServletActionContext辅助类来获得web对象。HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response = ServletActionContext.getResponse();

HttpSession session = request.getSession();

ServletContext application = ServletActionContext.getServletContext();

●Action访问ActionContext

com.opensymphony.xwork2.ActionContext是一个Action执行的上下文,Action执行期间所用到的对象都保存在ActionContext中,例如session、参数等,并且ActionContext是一个局部线程变量,不用担心Action的线程安全。

ActionContext context = ActionContext.getContext();

该类的常用方法见表1-3所示:

表1-3 ActionContext中的常用方法

Object get(Object key) 使用key来查找当前ActionContext中的值

Map getApplication() 返回一个Application范围的Map

static ActionContext getContext() 获得当前线程的ActionContext实例

Map getParameters() Map类型的所有HttpServletRequest的参数

Map getSession() Map类型的HttpSession值

ValueStack getValueStack() 返回一个ValueStack类型OGNL值栈

void put(Object key,Object value) 向当前ActionContext存入值,等于在

HttpServletRequest中加入值

void setApplication(Map application) 设置application上下文

void setSession(Map session) 设置session值,参数为Map实例这种方法使用的所有对象和Web对象没有直接联系,所以在测试的时候也是很方便的,我们推荐在程序中使用此方法来访问web对象。

十、操作实例Struts2实现按类别查询图书

本案例的工程文件结构如图1-7所示,文件说明见表1-4所示:

图1-7 案例的工程文件结构

表1-4 案例的文件说明

文件名说明

BookAction.java Strut2的Action

DbConn.java 数据库连接类

BookOper.java 数据库查询类

Book.java 数据对象类

struts.xml Struts2的action配置文件

web.xml Web应用配置文件,Struts2框架在其中配置了Filter

booklist.jsp 显示查询结果页面

Index.jsp 输入书籍类别的页面

1.生成一个web project,名称为“Struts2按类别查询图书”,指定存放路径为f:\ Struts2

按类别查询图书;

2.生成Model层的JavaBean;

数据库连接类DbConn.java

package db;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class DbConn {

public static Connection getConn() {

Connection conn = null;

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

conn = DriverManager.getConnection(

"jdbc:sqlserver://localhost:1433;databasename=pubs", "sa",

"");

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return conn;

}

}

数据库查询类BookOper.java

package oper;

import java.sql.Connection;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import po.Book;

public class BookOper {

public List selectByType(String type) {

Connection conn = db.DbConn.getConn();

java.sql.PreparedStatement pstmt = null;

java.sql.ResultSet rs = null;

List data = new ArrayList();

try {

pstmt = conn

.prepareStatement("select title_id,title,type,price from titles where type=?");

pstmt.setString(1, type);

rs = pstmt.executeQuery();

while (rs.next()) {

Book book = new Book();

book.setTitleid(rs.getString(1));

book.setTitle(rs.getString(2));

book.setType(rs.getString(3));

book.setPrice(rs.getFloat(4));

data.add(book);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally {

if (rs != null)

try {

rs.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

if (pstmt != null)

try {

pstmt.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

if (conn != null)

try {

conn.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return data;

}

}

数据持久化类Book.java

package po;

//图书的数据类

public class Book {

private String titleid;

private String title;

private String type;

private float price;

public float getPrice() {

return price;

}

public void setPrice(float price) {

this.price = price;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public String getTitleid() {

return titleid;

}

public void setTitleid(String titleid) {

this.titleid = titleid;

}

public String getType() {

return type;

}

public void setType(String type) {

this.type = type;

}

}

3.生成Struts2的Action对象,在src目录中编写action的配置文件struts.xml;

BookAction.java

package action;

import oper.BookOper;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class BookAction extends ActionSupport {

private String type; //书类型

private BookOper bo = new BookOper(); //查询类

public String getType() {

return type;

}

public void setType(String type) {

this.type = type;

}

@Override

public String execute() throws Exception {

// TODO Auto-generated method stub

//查询结果放在request中

ActionContext.getContext().put("booklist", bo.selectByType(type));

//返回success指定的页面

return SUCCESS; //"success"

}

}

●struts.xml

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"https://www.doczj.com/doc/6615357123.html,/dtds/struts-2.0.dtd">

/booklist.jsp

4.生成JSP页面index.jsp和booklist.jsp;

●index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme() + "://"

+ request.getServerName() + ":" + request.getServerPort()

+ path + "/";

%>

My JSP 'index.jsp' starting page

按类别查询图书

书籍类别:

●booklist.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%@ taglib uri="https://www.doczj.com/doc/6615357123.html,/jsp/jstl/core" prefix="c" %>

<%

String path = request.getContextPath();

String basePath = request.getScheme() + "://"

+ request.getServerName() + ":" + request.getServerPort()

+ path + "/";

%>

My JSP 'booklist.jsp' starting page

查询结果

编号名称类型单价
${book.titleid }${book.title }${book.type }${book.price }

5.修改web.xml,在其中配置Struts2的过滤器;

xmlns:xsi="https://www.doczj.com/doc/6615357123.html,/2001/XMLSchema-instance"

xsi:schemaLocation="https://www.doczj.com/doc/6615357123.html,/xml/ns/j2ee

https://www.doczj.com/doc/6615357123.html,/xml/ns/j2ee/web-app_2_4.xsd">

struts2

org.apache.struts2.dispatcher.FilterDispatcher

struts2

/*

6.在tomcat5.5以上版本中部署web程序为“type”,运行效果如图1-8和1-9。

图1-8 index.jsp

图1-9 booklist.jsp

Struts2(下)

一、Action的分类

1.继承ActionSupport实现Action

通过继承ActionSupport来实现Action是我们的推荐做法,因为ActionSupport中提供了输入验证、国际化、execute等常用方法,使得编写Action时代码很简单。

package mypack;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorld extends ActionSupport {

private String message;

public String getMessage() {

return message;

}

public void setMessage(String message) {

this.message = message;

}

@Override

public String execute() throws Exception {

// TODO Auto-generated method stub

message = "大家好!";

return SUCCESS;

}

}

ActionSupport实现了Action接口,这个接口中定义了一些常量和execute方法。

public abstract interface com.opensymphony.xwork2.Action{

// 定义常量

public static final https://www.doczj.com/doc/6615357123.html,ng.String SUCCESS = "success";

public static final https://www.doczj.com/doc/6615357123.html,ng.String NONE = "none";

public static final https://www.doczj.com/doc/6615357123.html,ng.String ERROR = "error";

public static final https://www.doczj.com/doc/6615357123.html,ng.String INPUT = "input";

public static final https://www.doczj.com/doc/6615357123.html,ng.String LOGIN = "login";

// 定义抽象方法

public abstract https://www.doczj.com/doc/6615357123.html,ng.String execute() throws Exception;

}

ActionSupport类的代码部分内容如下:

public class com.opensymphony.xwork2.ActionSupport implements

com.opensymphony.xwork2.Action,com.opensymphony.xwork2.Validateable,

com.opensymphony.xwork2.ValidationAware,com.opensymphony.xwork2.TextProvider ,

com.opensymphony.xwork2.LocaleProvider,java.io.Serializable{

......

//添加字段异常

public void addFieldError(https://www.doczj.com/doc/6615357123.html,ng.String fieldName,https://www.doczj.com/doc/6615357123.html,ng.String errorMessage){}

//execute

public String execute() throws Exception{}

//输入验证

public void validate(){}

......

}

struts.xml的配置如下:

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"https://www.doczj.com/doc/6615357123.html,/dtds/struts-2.0.dtd">

/Success.jsp

2.模型驱动(ModelDriven)的Action

Struts2的Action属于MVC模型层,Action中的方法代表业务逻辑,Action中的属性代表请求中的参数,当页面请求参数较多的时候,把过多的参数对象的属性定义在Action中不太符合Struts所倡导的松耦合原则,所以我们推荐单独用JavaBean来封装参数,在Action 中为JavaBean赋值,这就是ModelDriven的Action。模型驱动的Action要求Action实现ModelDriven接口,假如登录页面需要传输参数username和userpass,我们把这2个参数封装在一个数据的JavaBean中,然后在Action中定义该JavaBean为Model即可,代码如下: Userinfo.java

package po;

//用户名和密码的封装对象

public class Userinfo {

private String username;

private String userpass;

public String getUsername() {

return username;

}

public void setUsername(String username) {

https://www.doczj.com/doc/6615357123.html,ername = username;

}

public String getUserpass() {

return userpass;

}

public void setUserpass(String userpass) {

https://www.doczj.com/doc/6615357123.html,erpass = userpass;

}

}

●UserAction.java

package action;

import https://www.doczj.com/doc/6615357123.html,erinfo;

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.ModelDriven;

public class UserAction extends ActionSupport implements ModelDriven {

private Userinfo model = new Userinfo();

@Override

public String execute() throws Exception {

// TODO Auto-generated method stub

return SUCCESS;

}

//返回模型对象的实例

public Userinfo getModel() {

// TODO Auto-generated method stub

return model;

}

}

当请求该Action的时候,请求中的参数会自动填充到模型Userinfo的属性中,当然需要参数名和属性名一样,到跳转的页面上利用Struts2标签可以取出模型Userinfo中的属性username。在ModelDriven接口中的方法getModel()必须实现,通过它告诉系统模型的具体对象是什么。

●struts.xml

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"https://www.doczj.com/doc/6615357123.html,/dtds/struts-2.0.dtd">

/new.jsp

●new.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%@ taglib uri="/struts-tags" prefix="s"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme() + "://"

+ request.getServerName() + ":" + request.getServerPort()

+ path + "/";

%>

My JSP 'new.jsp' starting page

username:

3.多方法的Action

Action中的方法代表业务逻辑,那么一个模块中的多个业务逻辑如何用Action来处理呢?我们有2种办法来处理这个问题:

1.一个Action对应一个业务逻辑,实现方便,但是Action数量多,struts.xml中需要配置

的内容也多,这种方法不推荐;

2.一个Action对应多个业务逻辑,例如表的CRUD操作,含有多个业务逻辑,我们只写

一个Action来实现,Action的数量没有增加,struts.xml的配置也简单,所以这种方法是我们推荐的做法。

Action中自定义方法的声明和execute方法一样,方法的调用路径为“Action名称!方法名称.action”。

public String 方法名() throws Exception{}

以用户表Userinfo的CRUD操作为例,看一下多方法Action的代码:

package action;

import https://www.doczj.com/doc/6615357123.html,erinfo;

import https://www.doczj.com/doc/6615357123.html,erService;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.ModelDriven;

public class CrudUserAction extends ActionSupport implements ModelDriven {

// crud业务方法

private UserService userservice = new UserService();

private Userinfo userinfo=new Userinfo();

// 模型对象userinfo

public Userinfo getModel() {

// TODO Auto-generated method stub

return userinfo;

}

// 增加

public String create() throws Exception {

userservice.createUser(userinfo);

return SUCCESS;

}

// 查询

public String retrive() throws Exception {

// 查询结果放在request中

ActionContext.getContext().put("userlist", userservice.selectUsers());

return "list";

}

// 修改

public String update() throws Exception {

userservice.updateUser(userinfo);

return SUCCESS;

}

// 删除

public String delete() throws Exception {

userservice.deleteUser(userinfo.getUsername());

return SUCCESS;

}

// 默认的execute

public String execute() throws Exception {

return SUCCESS;

}

}

在struts.xml中配置如下:

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"https://www.doczj.com/doc/6615357123.html,/dtds/struts-2.0.dtd">

/Success.jsp

/UserList.jsp

调用CRUD业务逻辑的请求路径见表2-1。

表2-1 多方法Action中每个方法的请求路径

业务逻辑方法请求路径

create() CrudUser!create.action

retrive() CrudUser!retrive.action

update() CrudUser!update.action

delete() CrudUser!delete.action

execute() CrudUser.action

二、Result类型

Action中表示跳转的目的地使用了在struts.xml配置的字符串,格式为:,type可以有多种选择,Struts2支持各种视图技术,例如JSP、JSF、XML 等,默认的是JSP。常见的type类型配置如下:

●dispatcher

转发到JSP页面,和的效果一样,是默认类型。

/Success.jsp

/Success.jsp

/Success.jsp

●redirect

重定向到JSP页面,和response.sendRedirect(“”)的效果一样。

/Success.jsp

●redirect-action

重定向到action,目的地为Action,配置时可以指定如下两个参数:actionName-重定向的Action名;namespace-重定向的Action所在的命名空间。

myaction

/test

●chain

转发到action,形成action-chain,可以指定两个参数:actionName-重定向的Action名;namespace-重定向的Action所在的命名空间。

myaction

/test

●stream

用于向页面返回一个InputStream,原始数据直接传递给HttpServletResponse,这种结果类型在用户下载文件(例如PDF文件等)等情况下非常有意义。

image/jpg

imageStream

filename=”document.pdf”

1024

Struts2框架工作原理及应用体会

2012年第11卷第6期 产业与科技论坛2012.(11).6 Industrial &Science Tribune Struts2框架工作原理及应用体会 □宋 君 张家爱 【摘要】通过针对特定用户的分析,搭建以Struts2为技术核心的旅行社管理系统。本文简单的介绍了MVC 、 Struts2的工作原理,同时总结了在项目制作过程中所得到的心得。 【关键词】 Struts2;MVC ;FilterDispatcher ;Action 【基金项目】本文为大学生科技创新院级基金项目(编号:2011070)成果 【作者单位】宋君,吉林农业科技学院信息工程学院;张家爱,吉林农业科技学院信息工程学院教师 本着锻炼自我与积极参与到实用性技术的目标,以发掘自身创新意识为前提。利用空闲时间,在老师的指导下,进行了一次大学生创新项目的实践性活动。本着实用原则,以某中小旅行社为客户(根据用户需求,匿名),以Struts2框架为基点,进行了一次旅行社管理系统的开发。在项目结束之余, 特将在项目过程中经历的种种认识进行了简单的总结,希望让阅读本文的朋友们,更多的参与到此类活动中。 一、基础思想— ——MVC 简述作为时下经典框架之一, MVC 具有其独特的价值。MVC 框架简单的说,就是将数据模型与用户视图进行分离。通过控制器进行协调处理的一种结构是框架。同时,也是本文中要讨论的Sturts2框架的基础思想。 M 是指模型层(Model ),V 是指用户视图(View ),C 则是指控制器 (Controller )。这种划分方式是以将模型层与视图层进行代码分离,从而降低两者之间的耦合性,使同一程序可以使用不同形式进行表现。不同层之间的修改不会或尽量少的印象到其他层功能的史前为前提。有效的提高的代码的维护性和设计难度。 图1 二、 Struts2工作原理(一)Struts2框架组成。Struts2框架由三个主要部分组成:核心控制器、业务控制器,以及由用户实现的业务逻辑组件。这里我们将侧重于核心控制器与业务控制器的理解与说明。 (二)核心控制器:FilterDispatcher 。FilterDispatcher 是Struts2框架的核心控制器,在此,我们可以将FilterDispatcher 看作一个类似于过滤网的过滤器。当用户发出请求,并到达Web 硬哟那种时,该过滤器会过滤用户请求。如果用户请求的结尾为action ,则将该请求转入Struts2框架进行处理。当Struts2框架获得了*.actio 请求后,会根据请求前面“*”的那部分内容,决定调用哪个业务逻辑组件作为响应单位。这里需要说明的是Struts2用来处理用户请求的Action 实例并不是业务控制器,而是作为Action 的代理———正因为Struts2的一大特点,与Servlet API 的非耦合性,使得用户实现的业务控制器无法直接处理用户请求。有效的提高了后期调试维护的效率。而Struts2框架再次提供了了一系列的拦截器。这些拦截器负责将HttpServletRequest 请求的参数解析出来,传入Action 中,并毁掉Action 的Execute 方法来处理用户请求。用户实现的Action 类仅作为Struts2的Action 代理的代理目标。用户实现的业务控制器则包含了对用户请求的处理。用户的请求数据包含在HttpServletRequest 对象中,而用户的Action 类无需访问HttpServletRequest 对象。拦截器负责将HttpServletRequest 里的请求数据解析出来,并传给业务逻辑组件Action 实例。 (三)业务控制器。业务控制器就是前文提到的用来实现用户Action 的实力,这里的每个Action 类通常包含有一个execute 方法,当业务控制器处理完用户的请求后,该方法将会针对此次处理返回一个字符串— ——该字符串就是一个逻辑树图名。当程序开发人员开发出系统所需要的业务控制器后,还需要针对性的配置Struts2的Action ,即需要配置Ac- tion 的以下三个部分:(1)Action 所处理的URl 。(2)Action 组件所对应的实现类。(3)Action 里包含的逻辑试图和物理资源之间的对应关系。每个Action 都要处理一个用户请求,而用户请求则总是包含有指定的URL 。当核心控制器过滤用户请求,并调用后,根据请求的URL 和Action 处理URL 之间的对应关系来处理转发。 · 342·

Strurts2

阐述struts2的执行流程。 Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action 和用户实现的企业业务逻辑组件。 核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理 机制。业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2 是WebWork的升级版本。 基本简要流程如下: 1、客户端浏览器发出HTTP请求。 2、根据web.xml配置,该请求被FilterDispatcher接收。 3、根据struts.xml配置,找到需要调用的Action类和方法,并通过IoC方式,将值注入给Aciton。 4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。 5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到 相应页面。 6、返回HTTP响应到客户端浏览器。 工作原理 在Struts2框架中的处理大概分为以下几个步骤 1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否 需要调用某个Action 4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action 类 6 ActionProxy创建一个ActionInvocation的实例。 7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP

Struts2练习题说课讲解

Struts 2作业 1.简述什么是MVC? 答:MVC 的全称为model-view-controller(模型-视图-控制器)。MVC 是一种开发应用程序的模式,这个模式已经具有了很好的框架架构,并且十分容易维护。使用MVC 开发出来的应用程序一般包括以下几块内容:·控制器(Controller):控制器类处理客户端向Web 应用程序发出的请求,获取数据,并指定返回给客户端,用来显示处理结果的视图。·模型(Model):模型类代表了应用程序的数据,这些数据通常具有一个数据验证逻辑,用来使得这些数据必须符合业务逻辑。·视图(View):视图类是Web 应用程序中用来生成并显示HTML 格式的服务器端对客户端请求的响应结果的模板文件 2.Struts 2以(WebWork)为核心,采用(拦截器)的机制来处理用户的 请求。 3.简述一个请求在Struts 2框架中的处理流程,请按自己对框架的理解叙述。答:1-用户提交自己的请求;2-由web.xml拦截,转发到action进行处理;3- Struts.xml根据相应的action配置,调用相应的方法来处理,并根据结果转发到不同的页面。 4.不属于Action接口中定义的字符串常量是( B )? A)SUCCESS B)FAILURE C)ERROR D)INPUT 5.资源文件的后缀名为(D)? A)txt B)doc C)property D)properties 6.在JSP页面中可以通过Struts 2提供的(D)标签来输出国际化信息。 A) B) C) D) 7.以文字过滤拦截器为例,简述拦截器的使用步骤。 答:1-用户提交自己的请求; 2-由web.xml拦截,转发到action进行处理; 3- Struts.xml根据相应的action配置,调用相应的方法来处理,并根据结果转发到不同的页面; 8.在同一个系统中配置多个拦截器,试说明它们的执行顺序。 答:一般来说:先配置的拦截器,会先获得执行的机会,但是实际情况不是这样。execute()方法执行之前,配置在前面的拦截器,会先对用户的请求起作用。execute()方法执行之后,配置在后面的拦截器,会先对用户的请求起作用。(两头向中间靠拢的执行)。 9.请简述struts2中输入校验的几种方式。

strusts2课堂总结

一、 1、struts2 struts2是mvc设计思想的一个实现,可以将项目低耦合,提高扩展性 2、struts2和struts1的区别 struts2不是struts1的升级,而是继承的下xwork的血统,它吸收了struts1和webwork 的优势。 struts2的action是原型,安全的,struts2的action是单例,非安全 3、步骤: 1、导入包 2、在web.xml文件中,加入struts2的核心拦截器 3、在src下放入struts2的xml struts.xml 4、url http://localhost:8080/Struts2_01_HelloWorld/demo/hello.action 二、 1、默认值 2、转发和重定向的区别 转发:url显示的依然是上一个的url,共享上一次的请求 重定向:url显示的是下一个的url,不共享 3、url http://localhost:8080/Struts2_02_Default/demo/hello.action 4、路径 http://localhost:8080/Struts2_02_Default/demo/a/b/c/hello.action 1、原路径找不到,http://localhost:8080/Struts2_02_Default/demo/a/b/hello.action 2、如果1找不到,http://localhost:8080/Struts2_02_Default/demo/a/hello.action 3、如果2找不到,http://localhost:8080/Struts2_02_Default/demo/hello.action 3、如果3找不到,http://localhost:8080/Struts2_02_Default/hello.action 三、 11、自定义action

struts2 实验报告

1.系统分析与设计 1.1 系统功能描述 本系统是个非常简单的注册、登录系统。本系统的实现是基于Struts2、Spring、Hibernate 三个框架,系统功能单一,业务逻辑简单。 当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。 当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。 系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。 系统还提供了一种Ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。 当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。 除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。 1.2 系统功能流程

1.3 数据库设计 相关的映射文件: 一旦提供了上面的映射文件,Hibernate 就可以理解User 和user_table 之间的对应关系。 2.系统实现与测试 2.1 系统采用的关键技术 MVC 框架采用了Struts2框架,Struts2框架的易用性,极好的简化了系统的MVC 层的实现;本系统使用了Struts2的JSON 插件来完成Ajax 功能,除此之外本系统为了避免进行底层的Ajax 交互,还是用了一个简单Prototype.js 函数库,用以简化Ajax 编程。Struts2框架的稳定性,为系统的稳定运行提供了保证。

struts2标签使用实例

Struts2中数据标签使用示例 S truts2提供了大量丰富的标签供使用,它不再像S truts1中一样,将种类标签进行分门列别,但可以根据其使用的用途用以区别。本文通过对S truts2中数据标签的学习,来对S truts2中标签的学习起到一个抛砖引玉的作用。 文中将介绍Action标签、Bean标签、Data标签、Include标签、P aram标签、Set标签、T ext标签、P roperty 标签等标签。 代码下载:https://www.doczj.com/doc/6615357123.html,/y1ps2Mjpc3NiLKuetMOpCsZOOypD6KSdo8-46Zy2wpoMcABeo4vOC NJXtWDEO93-TXgZogwAF YxSOni5BEG2EoN65OFwHdG71v-/St ruts2DataTags.rar?download 一、标签 Action标签,顾名思义,是用来调用Action的标签,在JSP中页面中,可以指向具体指定某一命名空间中的某一Action。而标签的主体用于显示及渲染Actionr的处理结果。 1.WebRoot\pages\dataTagssuccess.jsp处理页面 <%@ page contentType="text/htm l; charset=GBK" %> <%@ taglib prefix="s" uri="/struts-tags" %> Action Tag 示例

Action Tag 示例

s:action标签用于在页面显示结果.
这里使用标签进行页面跳转,并用于显示处理的结果。 2.先来看st ruts.xml中的配置: /pages/dataTags/success.jsp

Struts2的介绍及总结

Struts2在WebWork基础上发展起来的,可扩展的JAVA EE web框架。框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整个过程。 Action类:Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。Action接口不是必须的,任何有execute标识的POJO 对象都可以用作Struts2的Action对象。 线程模式:Struts2Action对象为每一个请求产生一个实例,因此没有线程安全问题。 Servlet依赖:Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。 可测试性:Struts2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。 捕获输入:Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。Action属性能够通过web页面上的taglibs访问。 表达式语言:Struts 2 使用"ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。Struts2不仅支持JSTL, Struts2 还可使用OGNL进行类型转换。提供基本和常用对象的转换器。 校验:Struts2支持通过validate方法和XWork校验框架来进行校验。XWork 校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性。

Struts2的工作机制原理分析及实例

Struts2的工作机制分析及实例 一、概述 本章讲述Struts2的工作原理。 读者如果曾经学习过Struts1.x或者有过Struts1.x的开发经验,那么千万不要想当然地以为这一章可以跳过。实际上Struts1.x 与Struts2并无我们想象的血缘关系。虽然Struts2的开发小组极力保留Struts1.x的习惯,但因为Struts2的核心设计完全改变,从思想到设计到工作流程,都有了很大的不同。 Struts2是Struts社区和WebWork社区的共同成果,我们甚至可以说,Struts2是WebWork的升级版,他采用的正是WebWork 的核心,所以,Struts2并不是一个不成熟的产品,相反,构建在WebWork基础之上的Struts2是一个运行稳定、性能优异、设计成熟的WEB框架。 本章主要对Struts的源代码进行分析,因为Struts2与WebWork的关系如此密不可分,因此,读者需要下载xwork的源代码,访问https://www.doczj.com/doc/6615357123.html,/xwork/download.action即可自行下载。 下载的Struts2源代码文件是一个名叫struts-2.1.0-src.zip的压缩包,里面的目录和文件非常多,读者可以定位到 struts-2.1.0-src\struts-2.0.10\src\core\src\main\java目录下查看Struts2的源文件,如图14所示。 (图14) 二、主要的包和类 Struts2框架的正常运行,除了占核心地位的xwork的支持以外,Struts2本身也提供了许多类,这些类被分门别类组织到不同的包中。从源代码中发现,基本上每一个Struts2类都访问了WebWork提供的功能,从而也可以看出Struts2与WebWork千丝万缕的联系。但无论如何,Struts2的核心功能比如将请求委托给哪个Action处理都是由xwork完成的,Struts2只是在WebWork 的基础上做了适当的简化、加强和封装,并少量保留Struts1.x中的习惯。

java 问题汇总(总结,重点)

在用到spring框架中时,场景如下 post 请求过去,对象接收不到参数的值(解决办法:考虑到在参数上加个@RequestBody 注解即可,有些没加的是框架帮忙处理了后默认接收的是json串) http://localhost:8080/xxxxxxxxxxx-xxxxxxx-api/xxxxxx/xxxxx/xxxxxxxxx/sugges t/add.sgt ================================================== ==================================== mapper.xml->@Repository{存储数据层}->@Service{业务层}->@Controller{展示层} (spring注解可以理解为这样的线性,任其项目结构怎么变这样的线性结构是不会变的,万变不 离其宗) @Repository @Service @Controller均是注册在spring上下文中 @Autowired 在spring上下文中找bean @Qualifier 配合@Autowired使用当找到多个同一类型的bean,则会抛异常,此时可以使用@Qualifier("beanName"),明确指定bean的名称进行注入 @RequestMapping 配置连接 @Required 注册在sett方法上,检查有没有被调用 @RequestParam 绑定参数 @RequestBody读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上

Liferay Struts2 完整实例 修正

目录 一.Liferay,ext开发环境的搭建 (1) 二.集成struts2 (3) 1.依赖包: (3) 2.使用Struts2 (3) 三.使用Hibernate. Spring (4) 1.建立bean (4) 2.建立事务层: (5) 3 .建立持久层 (8) 4. Action 中调用事务层 (10) 三.将portlet注册到portal (11) 四.加入国际化 (13) 五.加入处理页面 (13) 2010年12月20日,修改在页面上的标签找不到国际化信息。 一.Liferay,ext开发环境的搭建 1.进入myeclipse,修改liferay-portal-src-5. 2.3文件名为portal。导入portal到eclipse. 2.展开portal工程目录,我们可看到一个release.properties文件, 新建一个它的扩展配置文件, 文件名为release.${username}.properties。 ${username}是计算机当前用户名 我文件名是release.Administrator.properties,文件内容只一行:lp.ext.dir=D:\myspace\ext 即扩展工程放置路径。 3.打开myeclipse里面ant视图(window--> show view --> ant) , 在ant视图中,点击添加, 选择:\portalspace\portal\目录下build.xml 顺序执行clean ,start ,build-ext

4.将liferay-portal-tomcat-6.0- 5.2.3.zip解压到D:\portalspace\目录下,并更名为servers。 在D:\portalspace\ext目录下我们可以看到app.server.properties文件, 同样我们也要建立一个扩展配置文件app.server.${username}.properties,文件内容两行:lp.ext.dir=D:/myspace/ext app.server.type=tomcat app.server.tomcat.dir=D:/ myspace /servers/tomcat-6.0.18 5.将myspace/ext 工程导入到eclipse中。 6.打开window --> preference --> myeclipse --> application servers 将其他应用服务器 disabble掉, 找到tomcat6,将tomcat home diretory 指向D:\myspace\servers\tomcat-6.0.18, 展开tomcat6,JDK选择我们配置好的JDK1.5+, JDK选项下面optional java vm argument输入如下内容: -Xms128m -Xmx256m -XX:MaxPermSize=128m 7.建立数据库lportal 。在D:\myspace\ext\ext-impl\src\portal-ext.properties文件中添加数据 库连接信息 # MySQL jdbc.default.driverClassName=com.mysql.jdbc.Driver jdbc.default.url=jdbc:mysql://localhost:3306/lportal https://www.doczj.com/doc/6615357123.html,ername=root jdbc.default.password=root hibernate.dialect=org.hibernate.dialect.MySQLDialect 若不添加以上内容liferay就会使用自带默认数据库. 8.选择 :\myspace\ext\目录下build.xml 顺序执行clean,deploy 将ext项目部署到 tomcat-6.0.18. 然后选择eclipse中的tomcat6.0启动即可 9.在浏览器里输入http://localhost:8080/可以看到portal系统了。输入emal: test@https://www.doczj.com/doc/6615357123.html, password: test登录

Struts2知识点总结

Struts2基础知识 Struts2概述 1.Struts2框架应用javaee三层结构中的web层框架。 2.Struts2框架在struts1和webwork基础之上发展的全新框架。 3.Struts2所解决的问题: 在以往实现一个功能时,都需要写很多的servlet,从而造成后期维护上的不方便。 图解: 4.现在比较稳定的Struts2版本 struts-2.3.24-all.zip 5.web层常见框架 1.struts 2.springMVC Struts2框架入门 1.导入jar包 1.在lib里面有jar包,但不能全部导入,因为里面含有一些spring 包,是不能使用的,导入会导致程序不能运行。 2.到app目录里面复制案例的jar包是最好的方法。 2.创建action 3.配置action类的访问路径

1.创建struts2核心配置文件,该核心配置文件位置和名称是固定的, 位置必须在src下面,名称为struts.xml 。 2.引入dtd约束,可以在案例文件中找到,复制在struts.xml文件中即 可。 3.action的配置 *注意访问路径: http://域名/端口号/项目名/action名.action 注意:.action可以省略,但建议不要省略,为了兼容一些老版本的浏览器。 4.配置Struts2的过滤器,可以在案例中的web.xml文件中找到,复制粘贴 即可。 Struts2执行过程 图解:

Struts2配置

1.是一种常量标签 2.修改Struts2的默认常量值 1.常用方式 在struts.xml中进行配置。 2.其它两种方式 1.在src下面创建struts.properties文件并修改。 2.在web.xml文件中进行修改。 3.Struts2最常用的常量 struts.il8n.encoding=UTF-8,解决表单在通过post方式提交中文时,中文乱码的问题。

struts2教程(完全版)

Yaio 4 一、准备工作及实例 4 1.解压struts- 2.1.6-all.zip 4 2.六个基本包 4 3.初识struts2配置文件 4 (1).web.xml文件 4 (2).struts.xml文件 4 (3).struts.properties(参default.properties) 4 (4)struts-default.xml 5 (5)其它配置文件 5 4.让MyEclipse提示xml信息 5 5.如何使用alt+/提示 5 6.实例 5 7.开启struts2自带的开发模式常量 7 8.vo传参模式 8 9.ModerDriven传参模式(不建议采用) 8 10.为什么要使用struts2代替struts1.x 9

二、struts.xml配置及例程 9 1.配置文件的优先级 9 2.配置形式 9 3.package配置相关 10 4.分工合作include:指定多个配置文件 12 5.tomcat认证访问 12 6.初识拦截器 13 7.Action中的method属性 15 8.使用ForwardAction实现页面屏蔽。 17 8.使用default-Action配置统一访问 17 小结Action 18 9.使用通配符 18 10.使用0配置:ZERO Annotation 19 11.Result配置详解 19 12.异常处理 24 三、在Action获取Scope对象 25 方式一、与Servlet解耦合的非IOC方式 25

方式二、与Servlet解耦合的IOC方式 27 方式三、与Servlet耦合的非IOC方式 27 方式四、与Servlet耦合的IOC方式 28 四、OGNL与ValueStack(VS) 29 1.值栈入门 29 2.OGNL入门 31 3.普通方法访问 31 4.静态方法访问 31 5.默认类Math的访问 32 6.调用普通类的构造方法 32 7.集合对象初步 32 8.集合对象进阶 33 9.N语法top语法 34 10.获取Stack Context中的信息 35 11.总结$ # %的区别 35 12.总结OGNL[重点] 35 五、拦截器 36

struts2面试题(自己总结)

Struts2面试题 1、struts2工作流程 Struts 2框架本身大致可以分为3个部分: 核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是Struts 2框架的基础,

包含了框架内部的控制流程和处理机制。 业务控制器Action和业务逻辑组件是需要用户来自己实现的。 用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件, 供核心控制器FilterDispatcher来使用。 Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同, 所以说Struts 2是WebWork的升级版本。基本简要流程如下: 1 、客户端初始化一个指向Servlet容器的请求; 2、这个请求经过一系列的过滤器(Filter) (这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器, 这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3 、接着FilterDispatcher被调用, FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 4、如果ActionMapper决定需要调用某个Action, FilterDispatcher把请求的处理交给ActionProxy 5、ActionProxy通过Configuration Manager询问框架的配置文件, 找到需要调用的Action类 6、ActionProxy创建一个ActionInvocation的实例。 7、ActionInvocation实例使用命名模式来调用, 在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP 或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 9、响应的返回是通过我们在web.xml中配置的过滤器 10、如果ActionContextCleanUp是当前使用的,则FilterDispatecher将不会清理sreadlocal ActionContext;如果ActionContextCleanUp不使用,则将会去清理sreadlocals。 2、说下Struts的设计模式 MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生 成动态的网页,返回给客户。

Struts2配置详解2 配置Action

配置Action Struts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实现该接口中的execute()方法。 该方法如下: public String execute() throws Exception Struts2并不是要求所有编写的action类都要实现Action接口,也可以直接编写一个普通的Java类作为action,只要实现一个返回类型为String的无参的public方法即可:public String xxx() 在实际开发中,action类很少直接实现Action接口,通常都是从 com.opensymphony.xwork2.ActionSupport类继承,ActionSupport实现了Action接口和其他一些可选的接口,提供了输入验证,错误信息存取,以及国际化的支持,选择从ActionSupport继承,可以简化action的定义。 开发好action之后,好需要对action进行配置,以告诉Struts2框架,针对某个URL的请求应该交由哪个action进行处理。 1.Action映射: action映射是Struts2框架中的基本”工作单元”,action映射就是将一个请求 URL(即action的名字)映射到一个action类,当一个请求匹配某个action的名字 时,框架就使用这个映射来确定如何处理请求。 action元素的完整属性表 例如: /user.jsp 2. 使用method属性 在配置action时,我们可以通过action元素的method属性来指定action调用的方法,所指定的方法,必须遵循与execute方法相同的格式。 在Struts2.xml文件中,我们可以为同一个action类配置不同的别名,并使用 method属性。 在Struts.xml文件中为同一个Action类配置不同的别名 /Methods/list.jsp

Struts2简单示例

Struts2增删改查例子 UserBean //要添加set,get public class UserBean{ private Long id; private String name; private String password; private int age; private Date birthday; private Long sex; private Set likes; private String des;//描述 } public class LikeBean{ private Long id; private String name; } FormAction public class FormAction{ //属性要生成get,set //标记(添加,修改) private String tip; private UserBean userBean; private List likeList; private List userList; //到列表页面 public String list(){ userList =new ArrayList(); userList.add(new UserBean("abc",19,new Date())); userList.add(new UserBean("def",70,new Date())); userList.add(new UserBean("ghi",40,new Date())); return"list"; } //到添加页面 public String toAdd(){ likeList =new ArrayList(); likeList.add(new LikeBean(new Long(1),"上网")); likeList.add(new LikeBean(new Long(2),"读书")); likeList.add(new LikeBean(new Long(3),"游戏")); tip ="add"; return"info";

Struts1学习笔记总结

Struts1 (1) Struts1和Servlet的关系 (1) 创建第一个Struts1项目 (1) 例子1: (3) 总结重点:struts1的工作流程(基于MVC模式的) (7) 一.普通的Servlet的工作流程 (7) 二.Structs1的工作流程(和上面的对比记忆) (8) Struts标签 (9) Bean标签 (9) html标签 (10) logic标签(逻辑标记) (12) i18n(国际化) (13) Struts1 Struts1和Servlet的关系 Jsp+Servlet+Javabean ActionForm和VO的区别: 一样的内容,不一样的作用 ActionForm只接收前台表单传来的数据 VO是conga后台提取的数据向前台传递 创建第一个Struts1项目 新建一个web项目,选择1.4即可 右键----MyEclipse----Add Struts Capacity

---------------Struts控制文件的路径 TLD(标签) 1) 2):显示信息 3):逻辑标签 struts-config.xml

Struts2+Hibernate架构技术教程课后参考答案

第1章Struts2框架技术入门 1.5 习题 1.5.1 选择题 1.D 2.A 3.C 4.B 5.B 1.5.2 填空题 1.MVC 2.Struts1和WebWork 3.IBM 4. FilterDispatcher 5.JSP、Struts2标签 1.5.3 简答题 1.简述MVC设计模式的工作流程。 答:MVC设计模式工作流程是: (1)用户的请求(V)提交给控制器(C); (2)控制器接受到用户请求后根据用户的具体需求,调用相应的JavaBean或者EJB(M部分)来进行处理用户的请求; (3)控制器调用M处理完数据后,根据处理结果进行下一步的调转,如跳转到另外一个页面或者其他Servlet。 2.简述Struts2的工作原理。 答:Struts2中使用拦截器来处理用户请求,从而允许用户的业务控制器Action与Servlet分离。用户请求提交后经过多个拦截器拦截后交给核心控制器FilterDispatcher处理,核心控制器读取配置文件struts.xml,根据配置文件的信息指定某一个业务控制器Action(POJO类)来处理用户数据,业务控制器调用某个业务组件进行处理,在处理的过程中可以调用其他模型组件共同完成数据的处理。Action处理完后会返回给核心控制器FilterDispatcher一个处理结果,核心控制器根据返回的处理结果读取配置文件struts.xml,根据配置文件中的配置,决定下一步跳转到哪一个页面。 一个客户请求在Struts2框架中处理的过程大概有以下几个步骤: (1)客户提交请求到服务器; (2)请求被提交到一系列的过滤器过滤后最后到FilterDispatcher; FilterDispatcher是核心控制器,是基于Struts2中MVC模式的控制器部分; (3)FilterDispatcher读取配置文件struts.xml,根据配置信息调用某个Action来处理客户请求; (4)Action执行完毕,返回执行结果,根据struts.xml的配置找到对应的返回结果。

相关主题
文本预览
相关文档 最新文档