JAVAWEB开发之Struts2详解二.docx
- 文档编号:17098287
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:72
- 大小:1.03MB
JAVAWEB开发之Struts2详解二.docx
《JAVAWEB开发之Struts2详解二.docx》由会员分享,可在线阅读,更多相关《JAVAWEB开发之Struts2详解二.docx(72页珍藏版)》请在冰点文库上搜索。
JAVAWEB开发之Struts2详解二
JAVAWEB开发之Struts2详解
(二)——Action接受请求参数、类型转换器、使用Struts2的输入校验、以及遵守约定规则实现Struts2的零配置
Action接受请求参数
作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中
Struts2提供了非常强大的类型转换机制用于请求数据到model对象的封装
Struts2和MVC定义关系
StrutsPrepareAndExecuteFilter:
控制器
在Struts2中action是什么?
(Struts2是一个MVC框架)
V:
jsp
M:
action
C:
actionStrutsPrepareAndExecuteFilter
Struts2提供了三种数据封装方式:
Action本身作为model对象,通过成员setter封装。
(属于属性驱动)
创建独立model对象,页面通过ognl表达式封装。
(属于属性驱动)
使用ModelDrivern接口,对请求数据进行封装。
(属于模型驱动)
具体使用如下:
1.属性驱动
属性驱动方式
(一):
直接将action作为一个model,就可以得到请求参数
action类成员变量setter接收参数如下图所示:
问题1:
action封装请求参数,会不会存在线程安全问题?
是不会的,因为每一次请求,都是一个新的action
优点:
使用简单
缺点:
需要单独定义JavaBean,将action中属性copy到JavaBean中(不能将Action作为model传给service层)
这种方式,底层是通过反射进行实现的。
属性驱动方式
(二):
创建一个单独的Model类,在action类中引用model作为成员变量。
(页面使用ognl)
具体操作:
在action类中声明一个mdoel,privateUseruser;
提供对应的setter和getter方法。
在页面上使用ognl来进行描述
这种方式的优点:
简单易使用,解决了第一种封装的问题。
缺点:
在页面上使用了ognl表达式,页面不通用了。
问题:
这种方式,数据是怎样封装的?
是通过Struts2中name为params的interceptor拦截器进行的数据封装(Struts的核心core包下struts-default.xml中定义)
2.模型驱动(在开发中应用比较多)
模型驱动的步骤:
1.让action类实现ModelDrivern接口。
2.重写getModel方法
3.在action中实例化一个model对象,让getModel方法返回这个对象。
publicclassLogin3ActionextendsActionSupportimplementsModelDriven
privateUseruser=newUser();
publicUsergetModel(){
returnuser;
}
}
如下图所示:
页面:
username1:
password1:
username2:
password2:
action类:
privateMap
提供get/set
示例:
1.将action作为model(属性驱动方式一)
Login1Action
[java]viewplaincopy在CODE上查看代码片派生到我的代码片
18px;">packagecn.itcast.action; importjavax.servlet.http.HttpServletRequest; importorg.apache.struts2.ServletActionContext; importcom.opensymphony.xwork2.ActionSupport; //获取请求参数属性驱动第一种,直接将action作为model publicclassLogin1ActionextendsActionSupport{ privateStringusername; privateStringpassword; publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } @Override publicStringexecute()throwsException{ HttpServletRequestrequest=ServletActionContext.getRequest(); //2.判断用户名与密码是否正确 if("tom".equals(username)&&"123".equals(password)){ request.getSession().setAttribute("username",username); returnSUCCESS; }else{ request.setAttribute("login.message","用户名或密码错误"); return"failer"; } } } login1.jsp [html]viewplaincopy在CODE上查看代码片派生到我的代码片 18px;"><%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http: //www.w3.org/TR/html4/loose.dtd">
${requestScope["login.message"]}
username:
password:
2.将model对象作为Action类成员(属性驱动模式二)
封装Model类
User
[java]viewplaincopy在CODE上查看代码片派生到我的代码片
18px;">packagecn.itcast.domain; publicclassUser{ privateStringusername; privateStringpassword; publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } @Override publicStringtoString(){ return"User[username="+username+",password="+password+"]"; } } Login2Action [java]viewplaincopy在CODE上查看代码片派生到我的代码片 18px;">packagecn.itcast.action; importjavax.servlet.http.HttpServletRequest; importorg.apache.struts2.ServletActionContext; importcn.itcast.domain.User; importcom.opensymphony.xwork2.ActionSupport; //获取请求参数属性驱动第二种,直接在action上声明一个model publicclassLogin2ActionextendsActionSupport{ privateUseruser; publicUsergetUser(){ returnuser; } publicvoidsetUser(Useruser){ this.user=user; } @Override publicStringexecute()throwsException{ HttpServletRequestrequest=ServletActionContext.getRequest(); //2.判断用户名与密码是否正确 if("tom".equals(user.getUsername()) &&"123".equals(user.getPassword())){ request.getSession().setAttribute("username",user.getUsername()); returnSUCCESS; }else{ request.setAttribute("login.message","用户名或密码错误"); return"failer"; } } } login2.jsp [html]viewplaincopy在CODE上查看代码片派生到我的代码片 18px;"><%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http: //www.w3.org/TR/html4/loose.dtd">
${requestScope["login.message"]}
username:
password:
3.模型驱动(action类实现ModelDrivern接口)
Login3Action
[java]viewplaincopy在CODE上查看代码片派生到我的代码片
18px;">packagecn.itcast.action; importjavax.servlet.http.HttpServletRequest; importorg.apache.struts2.ServletActionContext; importcn.itcast.domain.User; importcom.opensymphony.xwork2.ActionSupport; importcom.opensymphony.xwork2.ModelDriven; //获取请求参数模型驱动 publicclassLogin3ActionextendsActionSupportimplementsModelDriven privateUseruser=newUser(); @Override publicUsergetModel(){ returnuser; } @Override publicStringexecute()throwsException{ HttpServletRequestrequest=ServletActionContext.getRequest(); //2.判断用户名与密码是否正确 if("tom".equals(user.getUsername()) &&"123".equals(user.getPassword())){ request.getSession().setAttribute("username",user.getUsername()); returnSUCCESS; }else{ request.setAttribute("login.message","用户名或密码错误"); return"failer"; } } } login3.jsp [html]viewplaincopy在CODE上查看代码片派生到我的代码片 18px;"><%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http: //www.w3.org/TR/html4/loose.dtd">
${requestScope["login.message"]}
username:
password:
success.jsp
[html]viewplaincopy在CODE上查看代码片派生到我的代码片
18px;"><%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http: //www.w3.org/TR/html4/loose.dtd">
${username}
4.将数据封装到List集合
list.jsp
[html]viewplaincopy在CODE上查看代码片派生到我的代码片
18px;"><%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http: //www.w3.org/TR/html4/loose.dtd">
username:
password:
username:
password:
ListAction
[html]viewplaincopy在CODE上查看代码片派生到我的代码片
18px;">packagecn.itcast.action; importjava.util.List; importcn.itcast.domain.User; importcom.opensymphony.xwork2.ActionSupport; publicclassListActionextendsActionSupport{ privateList publicList returnusers; } publicvoidsetUsers(List this.users=users; } @Override publicStringexecute()throwsException{ System.out.println(users); returnnull; } } 5.将数据封装到Map集合 map.jsp [html]viewplaincopy在CODE上查看代码片派生到我的代码片 18px;"><%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http: //www.w3.org/TR/html4/loose.dtd">
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVAWEB 开发 Struts2 详解