Struts2学习–第二天
1、result标签
- 作用及属性:
1)作用:用于配置结果视图(结果视图可以是jsp/HTML,也可以是一个action)
2)属性:
Name: 指定逻辑结果视图,作用是和动作方法返回值进行比较
Type: 指定前往结果视图的方式;其取值来源于struts-default.xml文件中package名称是struts-default包中的定义类型。
3)常用的结果类型:
dispatcher:请求转发(默认值)
Redirect:重定向
redirectAction:重定向到另外一个动作
- 重定向和请求转发的区别:
- 结果视图分类(全局结果视图、局部结果视图)
全局结果视图:- 定义是放在action标签外面,在global-result标签内部的结果视图;
- 可以在多个视图中使用。
- 优先级:先找局部,在找全局。
2、访问ServletAPI的两种方式
ServletAPI:HTTPServletRequest、HttpServletResponse、HTTPSession、ServletContext
- 1) 第一种:使用struts框架提供的一个工具类–ServletActionContext,该类包含了相应的动态方法,可以直接获取 ,此种方式是开发中用的最多的一种方式
public class Demo1Action {
private HttpServletRequest request;
private HttpServletResponse response;
private HttpSession session;
private ServletContext application;
/**
* 动作方法
* */
public String demo1() {
request = ServletActionContext.getRequest();
response = ServletActionContext.getResponse();
application = ServletActionContext.getServletContext();
session = request.getSession();
System.out.println(request);
System.out.println(response);
System.out.println(session);
System.out.println(application);
System.out.println("Demo1Action执行成功!!!!!!!!");
return "success";
}
}
- 2)第二种:通过实现不同的接口,获取不同的对象
使用request,需要实现ServletRequestAware
使用response,需要实现ServletResponseAware
使用servletContext,需要实现ServletContextAware
public class Demo2Action implements ServletRequestAware,ServletResponseAware,ServletContextAware{
private HttpServletRequest request;
private HttpServletResponse response;
// private HttpSession session;
private ServletContext application;
/**
* 动作方法
* */
public String demo2() {
request = ServletActionContext.getRequest();
response = ServletActionContext.getResponse();
application = ServletActionContext.getServletContext();
// session = request.getSession();
System.out.println(request);
System.out.println(response);
// System.out.println(session);
System.out.println(application);
System.out.println("Demo1Action执行成功!!!!!!!!");
return "success";
}
@Override
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
@Override
public void setServletContext(ServletContext appliaction) {
this.application = appliaction;
}
}
3、Struts2中的请求参数封装
- 三种封装方式
- 1)属性驱动-没有实体类
- 2) 属性驱动-有实体类
- 3) 模型驱动
- 1)属性驱动-没有实体类
- 请求参数封装的一些实现细节
- 细节:
1)Struts2框架会为我们解决post中的请求乱码问题,但是get请求不解决
2)Struts2框架会自动为我们转换数据类型:
基本类型自动转换
字符串会按照逗号加空格的方式拼接成字符串
日期格式会按照本地各式转化成日期对象(本地格式:yyyy-MM-dd)
3)执行参数封装,是一个名为params的拦截器实现的。
封装的规则只有一个,它会去指定的位置找属性,找到之后调用set方法赋值
4)特别:模型驱动的实现,除了params拦截器之外,还需要一个叫modelDriven的拦截器配合
4、案例—使用struts2实现客户保存
5、请求参数封装失败后的处理办法
1)<input> 配置input结果视图,视图路径:从哪来回哪去
2)提示错误信息
3)把提交的数据回显回来(HTML标签和struts标签都可以实现)
6、关于中文提示的问题
- I18N:国际化(现在不常用)