Struts的核心业务

Struts核心业务有很多,这里主要介绍了比较简单一些的:
请求数据的处理,和数据自动封装,类型自动转换

1.Struts中数据处理

1.1.方式1:直接过去servletapi

核心类:ServletActionContext提供的静态方法

/**** 数据处理方式1:*/
public class dataAction extends ActionSupport{public String execute() throws Exception {//1.请求数据处理//2.调用Service处理业务逻辑,拿到结果数据//3.保存数据到域中//Struts中对数据操作,方式1:直接拿到ServletApi,执行操作HttpServletRequest request = ServletActionContext.getRequest();HttpSession session = request.getSession();ServletContext application = ServletActionContext.getServletContext();//操作request.setAttribute("request_data","request_data_value");session.setAttribute("session_data","session_data_value");application.setAttribute("application_data","application_data_value");return SUCCESS;}
}

1.2.方式2:通过ActionContext获取

可以通过ActionContext获取不同(代表request/session/application)的map


/**** 数据处理方式2:*/
public class dataAction extends ActionSupport{public String execute() throws Exception {//1.请求数据处理//2.调用Service处理业务逻辑,拿到结果数据//3.保存数据到域中//下面的方法不用导入servlet的包,推荐使用,但是这种方式只能保存,如果设计其他操作还是需要用上面的方法//Struts中对数据的操作,方式2:通过ActionContext类ActionContext ac = ActionContext.getContext();//得到Struts对HttpServletRequest对象进行了封装,封装为一个map//拿到表示request对象的mapMap request = ac.getContextMap();//拿到表示Session对象的mapMap session = ac.getSession();//拿到表示servlectContext对象的mapMap application = ac.getApplication();//数据request.put("request_data","request_data_value");session.put("session_data","session_data_value");application.put("application_data","application_data_value");return SUCCESS;}
}

1.3.方式3:实现接口的方式(RequestAware/SessionAware/ApplicationAware)**


/*** 数据处理方式3:*/
public class dataAction2 extends ActionSupport implements RequestAware,SessionAware,ApplicationAware {private Map<String,Object> request;private Map<String,Object> session;private Map<String,Object> application;//struts运行时候,会把代表request的map对象注入public void setRequest(Map<String, Object> request) {this.request=request;}public void setSession(Map<String, Object> session) {this.session=session;}public void setApplication(Map<String, Object> application) {this.application = application;}@Overridepublic String execute() throws Exception {//数据request.put("request_data","request_data_value");session.put("session_data","session_data_value");application.put("application_data","application_data_value");return SUCCESS;}}

三种方式的区别:
第一种方式需要再导入servlet,依赖性较大,只有还会使用到request等类型其他方式的时候才会用
第二种比较常用,推荐使用这种
第三种是需要写很多的方法,只有在方法比较多的时候,才会使用,即大型的项目中才会考虑使用。但是一般都是使用第二种

2.请求数据自动封装

2.1.基本思想和简介

在Struts框架之前,表单内的数据参数会被Servlet接收,然后存入实体bean类里面。那么有了Struts框架之后,这个操作就由框架来自动完成了。
表单提交的参数保存分为基本类型的和对象属性的:
如果是基本类型和Date类型的,只需要对该类型再写一个set××()方法就可以,可以不写get××()方法。
如果是对象类型,然后把数据保存到对象的属性中,就需要在bean中写set**()和get××()方法,然后在action中也需要写set××()和get××(),但是不用new方法来创建对象,直接定义一个对象就可以了(private User user;)

实现原理是通过参数拦截器来实现的:
<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

2.2.基本数据类型和Date

jsp表单页面


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>index</title></head><body><form action="${pageContext.request.contextPath}/login1" method="post">用户名:<input type="text" name="name"> <br/>密码:<input type="text" name="pwd"> <br/>年龄:<input type="text" name="age"> <br/>生日:<input type="text" name="birth"> <br/><input type="submit" value="注册"></form></body>
</html>

action处理页面

package d_action;import com.opensymphony.xwork2.ActionSupport;import java.util.Date;/***Struts核心业务,请求数据自动封装,以及类型转换*/
public class UserAction extends ActionSupport{//封装请求数据private String name; //必须给set,get可以不用给private String pwd;private int age;private Date birth;public void setName(String name) {this.name = name;}public void setPwd(String pwd) {this.pwd = pwd;}public void setAge(int age) {this.age = age;}public void setBirth(Date birth) {this.birth = birth;}//处理注册请求public String register(){System.out.println(name);System.out.println(pwd);System.out.println(age);System.out.println(birth);return "success";}
}

2.3.自动转换对象属性

jsp页面


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>index</title></head><body><form action="${pageContext.request.contextPath}/login1" method="post">用户名:<input type="text" name="user.name"> <br/>密码:<input type="text" name="user.pwd"> <br/>年龄:<input type="text" name="user.age"> <br/>生日:<input type="text" name="user.birth"> <br/><input type="submit" value="注册"></form></body>
</html>

action类:

package d_action;import com.opensymphony.xwork2.ActionSupport;/***Struts核心业务,请求数据自动封装,对象的属性*/
public class UserAction extends ActionSupport{//封装请求数据private User user;  //对象类型一定要给get方法public User getUser() {return user;}public void setUser(User user) {this.user = user;}//处理注册请求public String register(){System.out.println(user.getName());System.out.println(user.getPwd());System.out.println(user.getAge());System.out.println(user.getBirth());return "success";}
}

调用的User实体:

package d_action;import java.util.Date;public class User {private String name; //必须给set,get可以不用给private String pwd;private int age;private Date birth;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Date getBirth() {return birth;}public void setBirth(Date birth) {this.birth = birth;}
}

3.类型转换

3.1.为什么需要类型转换

Struts中jsp提交的数据是String,代码中使用或再显示,就需要转换为对应的格式,Struts会自动转换为action中属性的类型,对于基本数据类型以及日期类型会自动转换。
日期类型只支持yyyy-MM-dd格式。
如果需要指定格式,需要自定义类型转换器,自定义转换器分为两种:

  • 局域类型转换器
  • 全局类型转换器

Struts转换器API
|- TypeConverter :转换器接口

|- DefaultTypeConverter :默认类型转换器类

|- StrutsTypeConverter :用户编写的转换器类,继承此类即可

3.2.局部转换器开发步骤

1.自定义转换器继承StrutsTypeConverter
2.重写converFormString和converToString方法
3.注册转换器:

  • 3.1.在Action所在包中建立Action名-conversion.properties
  • 3.2.在3.1文件中添加以下数据:
  • 需要转的字段名=转换器类的项目内路径名,如:`user.birth=utils.MyConverter‘

总结:局部转换器不能其他人的Action使用

3.3.全局类型转换器开发步骤

1.自定义转换器继承StrutsTypeConverter
2.重写converFormString和converToString方法
3.注册转换器:

  • 3.1.下项目src目录下建立以下固定文件:xwork-conversion.properties
  • 3.2.在3.1文件中添加以下数据:
  • 需要转的类的类型=转换器类的项目内路径名,如:`java.util.Date=utils.MyConverter‘

总结:
该拦截器负责对错误信息进行拦截器:<interceptor name="conversionError“ class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/>

以上两种方法的自定义类型转换的转换器代码为:

package utils;import org.apache.struts2.util.StrutsTypeConverter;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;/*** 自定义类型转换器类*/
public class MyConverter extends StrutsTypeConverter {/*** 把String转换为指定的类型【String to Date】* @param context : 当前上下文环境* @param values : jsp表单提交的字符串的值* @param toClass : 要转换为的目标类型* @return 返回转换好的目标类型数值*/public Object convertFromString(Map context, String[] values, Class toClass) {try {//判断:内容不能为空if (values==null || values.length==0){return null;}//判断:类型必须为Dateif (Date.class != toClass){return null;}//转换SimpleDateFormat sdf = new SimpleDateFormat("yyyMMdd");return sdf.parse(values[0]);} catch (ParseException e) {e.printStackTrace();throw new RuntimeException(e);}}public String convertToString(Map context, Object o) {return null;}
}

此代码中仍有不足,没有写convertToString的方法。写好这个类就可以按照上面的配置步骤进行配置,就可以使用了。

转载于:https://www.cnblogs.com/cenyu/p/6219944.html

Struts框架的核心业务相关推荐

  1. struts(三)——struts框架实现登录示例

    前两篇讲解了struts框架的基本实现,自己感觉讲的也有些枯燥,今天拿登录的例子来做一个实现. 1.新建一个javaweb项目,并将struts的jar包拷贝到WebRoot/WEB-INF/lib下 ...

  2. Struts框架的入门使用

    1.struts框架的使用 导入jar包 1.commons-fileupload-1.2.jar 2. freemarker-2.3.15.jar 3.ognl-2.7.3.jar 4.struts ...

  3. java 详解 搭建 框架_在Eclipse中搭建Struts框架过程详解

    虽然用MyEclipse搭建Struts框架是更为便捷的方式,但是用Eclipse可以增强自己对Struts的理解.本文演示了使用Eclipse搭建Struts 1.2框架的过程.此项目实现了简单的功 ...

  4. c#Struts框架理念和自制Struts框架下 复杂版

    在上文中,我提到了一个"简单的zjy框架"的数据流程,但是那只是很少的一部分,用法和功能也比较简单,他能够完成的只是把一个数据库显示到页面(或者窗体)上.在这个第四章节中,我想将这 ...

  5. mysql国际化_Java的Struts框架中的主题模板和国际化设置

    主题模板 如果不指定一个主题,然后Struts2中会使用默认的XHTML主题.例如Struts 2中选择标签: 生成HTML标记: Name: 这里empinfo struts.xml文件中定义动作名 ...

  6. 深入浅出学习Struts框架(九):分析Struts框架实例4

    前两篇博客介绍了ActionServlet的初始化,讲述了它在初始化的时候做的事情.有了ActionServlet初始化,才能说当我们访问页面如何利用digester读取struts-config.x ...

  7. 【SSH进阶之路】一步步重构MVC实现Struts框架——封装业务逻辑和跳转路径(四)...

    目录: [SSH进阶之路]Struts基本原理 + 实现简单登录(二) [SSH进阶之路]一步步重构MVC实现Struts框架--从一个简单MVC开始(三) [SSH进阶之路]一步步重构MVC实现St ...

  8. Spring与Struts框架整合

    Spring,负责对象对象创建 Struts,用Action处理请求 Spring与Struts框架整合,关键点:让struts框架action对象的创建,交给spring完成! 1.步骤: 引入ja ...

  9. struts框架学习过程中的问题。

    1,错误: java.lang.NullPointerException: Module 'null' not found. 错误原因,struts运行需要的.jar文件拷贝不足,应该把它们加入到cl ...

最新文章

  1. redis持久化的几种方式
  2. proe5.0安装教程
  3. C++设计模式--代理模式(Proxy)
  4. JQuery 源码解析资料
  5. 如何更优雅的写出你的SQL语句
  6. linux apache 跨域,解决nginx/apache静态资源跨域访问问题详解
  7. idea 2018.1 for mac JRebel破解
  8. 苹果手机关于推送的查看LOG的一种解决办法
  9. Centos下安装Scrapy
  10. win11任务栏(注册表修改/软件)完全透明-全网最详细教程
  11. ecshop 添加手机号码验证唯一性(手机版)
  12. android平板投影到电视,平板投屏到电视机如何操作可以互投
  13. 为什么很多人家里不准备尺子了?手机怎么测量长度?
  14. php限制一个函数在几分钟内不被调用_PHP - 无法在双引号内调用函数
  15. JAVA中的进制以及转换
  16. 金融学-风险中性测度
  17. Linux 0.00简单多任务内核head.s超详注释
  18. 孤尽T31项目Day3
  19. 电脑史话-计算机先驱巴贝奇
  20. cross-site tracing XST攻击

热门文章

  1. 年总结(七):这半年的生活(2017.1—2017.7)
  2. 智能一代云平台(三十三):log4j日志研究
  3. 全国首家百度大脑创新体验中心启动,中关村创业大街AI产业创新生态再升级...
  4. 英伟达发布迁移学习工具包,现在可以申请早期试用
  5. 绿幕通通扔掉 ੧ᐛ੭ | 谷歌AI实时「抠」背景
  6. 报告:中国人对AI的乐观程度远超其他国家
  7. 注意!腾讯语音助手也已抵达战场(内部不止这一个)
  8. 面对数据缺失,如何选择合适的机器学习模型?
  9. 排序算法与常见数据结构
  10. rtems源码树结构