day30sturs拦截器国际化标签.docx
- 文档编号:27491449
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:19
- 大小:44.19KB
day30sturs拦截器国际化标签.docx
《day30sturs拦截器国际化标签.docx》由会员分享,可在线阅读,更多相关《day30sturs拦截器国际化标签.docx(19页珍藏版)》请在冰豆网上搜索。
day30sturs拦截器国际化标签
x回顾:
Struts第二天:
Struts配置
#通配符、动态方法调用
#全局跳转配置、配置的默认值、常量配置
Struts核心业务
#请求数据的自动封装(param拦截器)
#类型转换
自动类型转换(struts提供)
类型转换器
$自定义局部
---》ActionClassName-conversion.properties
$自定义全局
---》xwork-conversion.properties
#数据处理
|--ActionContext
|--ServletActionContext
#文件上传与下载
Jsp:
Action:
(上传,拦截器完成的)
PrivatFilefile1;//拿到上传的文件对象
PrivateStringfile1FileName;//文件名
PrivateStringfile1ContentType;//类型
目标:
拦截器
(国际化)
Ognl表达式语言与Struts标签
1.拦截器
1.1概述
✓基本概念
Intercetor,即为拦截器。
1)在Struts2中,把每一个功能都用一个个的拦截器实现;用户想用struts的哪个功能的时候,可以自由组装使用。
2)Struts2中,为了方法用户对拦截器的引用,提供了拦截器栈的定义,里面可以包含多个拦截器。
文件夹(文件,文件2)拦截器栈(拦截器,拦截器2)
3)Struts2中,如果用户没有指定执行哪些拦截器,struts2有一个默认执行的栈,defaultStack;
一旦如果用户有指定执行哪些拦截器,默认的拦截器栈就不会被执行
拦截器的设计,就是基于组件设计的应用!
✓拦截器配置举例
struts-default.xml文件中,定义了struts提供的所有拦截器!
//1.定义拦截器以及拦截器栈
1.1拦截器定义
1.2拦截器栈的定义
引用了上面拦截器(1.1)
2.默认执行的拦截器(栈)
✓API
|--Interceptor拦截器接口
|--AbstractInterceptor拦截器默认实现的抽象类;一般用户只需要继承此类即可继续拦截器开发
|--ActionInvocation拦截器的执行状态,调用下一个拦截器或Action
拦截器与过滤器区别:
….
1.2自定义一个拦截器案例
步骤:
1.写拦截器类(看生命周期)
2.配置
/**
*自定义拦截器
*@authorJie.Yuan
*
*/
publicclassHelloInterceptorimplementsInterceptor{
//启动时候执行
publicHelloInterceptor(){
System.out.println("创建了拦截器对象");
}
//启动时候执行
@Override
publicvoidinit(){
System.out.println("执行了拦截器的初始化方法");
}
//拦截器业务处理方法(在访问action时候执行?
在execute之前执行?
)
@Override
publicStringintercept(ActionInvocationinvocation)throwsException{
System.out.println("2.拦截器,业务处理-开始");
//调用下一个拦截器或执行Action(相当于chain.doFilter(..)
//获取的是:
execute方法的返回值
StringresultFlag=invocation.invoke();
System.out.println("4.拦截器,业务处理-结束");
returnresultFlag;
}
@Override
publicvoiddestroy(){
System.out.println("销毁....");
}
}
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEstrutsPUBLIC
"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.3//EN"
"http:
//struts.apache.org/dtds/struts-2.3.dtd">
--【拦截器配置】-->
--配置用户自定义的拦截器-->
--自定义一个栈:
要引用默认栈、自定义的拦截器-->
--引用默认栈(一定要放到第一行)-->
--引用自定义拦截器-->
--【执行拦截器】-->
--Action配置-->
1.2拦截器执行流程
UML(时序图)
启动:
创建所有拦截器、执行init()
访问:
先创建Action,
再执行拦截器,
最后:
拦截器放行,执行execute();
1.3拦截器案例
需求:
登陆后,显示列表!
案例准备:
Strutsjar文件
DbUtils组件
数据库连接池/驱动包
-->login.jsp
用户名:
密码:
UserAction.java
publicclassUserActionextendsActionSupport{
//---------1.封装请求数据-----------
privateAdminadmin;
publicAdmingetAdmin(){
returnadmin;
}
publicvoidsetAdmin(Adminadmin){
this.admin=admin;
}
//---------2.调用的Service-----------
privateAdminServiceadminService=newAdminService();
//登陆
publicStringlogin(){
try{
AdminuserInfo=adminService.login(admin);
//判断
if(userInfo==null){
//登陆失败
return"input";
}
//登陆成功:
数据保存在session中
ActionContext.getContext().getSession().put("userInfo",userInfo);
//登陆成功
return"loginSuccess";
}catch(Exceptione){
returnERROR;
}
}
//列表
publicStringlist(){
try{
//查询全部
List
//保存到request
ActionContext.getContext().getContextMap().put("listAdmin",list);
return"list";
}catch(Exceptione){
returnERROR;
}
}
publicStringadd(){
returnnull;
}
}
list.jsp
欢迎你,${userInfo.userName}
<%--@tagliburi="prefix="c"--%>
--用struts标签迭代数据-->
<%@tagliburi="/struts-tags"prefix="s"%>
iteratorvar="admin"value="#request.listAdmin"status="st"> propertyvalue="#st.count"/> propertyvalue="#admin.id"/> propertyvalue="#admin.userName"/> propertyvalue="#admin.pwd"/>
iterator>
自定义拦截器
publicclassUserCheckInterceptorextendsAbstractInterceptor{
/**
*拦截器业务处理方法
*/
publicStringintercept(ActionInvocationinvocation)throwsException{
//拿到当前执行的方法名:
判断,只有当前方法名不是login,就进行验证
//获取ActionContext对象
ActionContextac=invocation.getInvocationContext();
//获取action的代理对象
ActionProxyproxy=invocation.getProxy();
//获取当前执行的方法名
StringmethodName=proxy.getMethod();
//判断
if(!
"login".equals(methodName)){
//先获取当前登陆的用户
Objectobj=ac.getSession().get("userInfo");
if(obj==null){
//没有登陆
return"input";
}else{
//当前用户有登陆
returninvocation.invoke();
}
}else{
//说明当前用户正在登陆
returninvocation.invoke();
}
}
}
配置拦截器
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEstrutsPUBLIC
"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.3//EN"
"http:
//struts.apache.org/dtds/struts-2.3.dtd">
--【拦截器配置】-->
--【执行拦截器:
第一种写法:
当前包下所有的acntion都执行myStack栈】
-->
--全局配置-->
--第二种写法:
只是在这一个Action中执行myStack栈
-->
--第三种写法:
执行用户栈(与第二种写法一样,只在当前aciton中执行自定义栈)-->
--1.登陆失败-->
--2.登陆成功-->
--3.列表展示-->
2.Struts2中的国际化
回顾:
Servlet中国际化:
1.写资源文件
基础名.properties【默认的语言环境的配置】
基础名_语言简称_国家简称.properties
2.读取资源文件,再使用
程序:
ResourceBundle
Jsp:
jstl提供的格式化与国际化标签库。
Struts2中国际化:
1.写资源文件(同servlet)
2.读资源文件
程序:
ResourceBundle(同servlet)
JSP:
1)jstl表亲啊(同servlet)
2)struts标签获取资源文件内容
区别:
Struts2加载资源文件更加简单!
通过常量加载即可!
再在jsp页面直接使用!
1.写资源文件
Msg.properties默认的语言环境;找不到配置就找它
Msg_en_US.properties美国
-2.加载
3.使用:
标签name值直接写配置文件中的key
textname="title">
text>
另外一点,
(推荐)加载资源文件通过常量加载
还可以在页面加载,这样用:
i18nname="cn.itcast.config.msg"> text>标签必须放到标签体中。 i18n> 3.Ognl表达式语言 概述 ●OGNL表达式 OGNL是ObjectGraphicNavigationLanguage(对象图导航语言)的缩写,它是一个开源项目。 Struts2框架使用OGNL作为默认的表达式语言。 ●OGNL优势 1、支持对象方法调用,如xxx.doSomeSpecial(); 2、支持类静态的方法调用和值访问,表达式的格式: @[类全名(包括包路径)]@[方法名| 值名],例如: @java.lang.String@format('foo%s','bar') 或@tutorial.MyConstant@APP_NAME; 3、支持赋值操作和表达式串联,如price=100,discount=0.8, calculatePrice(),这个表达式会返回80; 4、访问OGNL上下文(OGNLcontext)和ActionContext; 5、操作集合对象。 ●总结 OGNL有一个上下文(Context)概念,说白了上下文就是一个MAP结构,它实现了java.utils.Map的接口。 OgnlContext对象 分析: ✓Struts框架默认就支持Ognl表达式语言。 (struts必须引用的包: ognl.jar) ✓作用 页面取值用。 El表达式语言,用于页面取值,jsp页面取值的标准。 (默认直接可以使用) (应用范围更广。 ) Ognl表达式语言,struts标签默认支持的表达式语言。 必须配置struts标签用,不能离开struts标签直接用。 OgnlContext对象(了解) OgnlContext对象是ognl表达式语言的核心。 源码类: publicclassOgnlContextextendsObjectimplementsMap{..} 硬编码方式,了解OgnlContext对象: //OgnlContext用法 publicclassOgnlDemo1{ /** *1.Ognl表达式语言语言取值,取非根元素的值,必须用#号 *@throwsException */ @Test publicvoidtestOgnl()throwsException{ //创建一个Ognl上下文对象 OgnlContextcontext=newOgnlContext(); //放入数据 Useruser=newUser(); user.setId(100); user.setName("Jack"); //【往非根元素放入数据,取值的时候表达式要用"#"】 context.put("user",user); //获取数据(map) //先构建一个Ognl表达式,再解析表达式 Objectognl=Ognl.parseExpression("#user.name"); Objectvalue=Ognl.getValue(ognl,context,context.getRoot()); System.out.println(value); } /** *2.Ognl表达式语言语言取值,取根元素的值,不用带#号 *@throwsException */ @Test publicvoidtestOgn2()throwsException{ //创建一个Ognl上下文对象 OgnlContextcontext=newOgnlContext(); //放入数据 Useruser=newUser(); user.setId(100); user.setName("J
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- day30sturs 拦截 国际化 标签
![提示](https://static.bdocx.com/images/bang_tan.gif)