一、struts中的API

   1)完全解耦合的方式

     1.1首先创建一个示例工程,在WEB-INF下创建lib文件夹,把struts2核心jar包导入。在工程下创建resource文件夹,并将其设为资源文件夹,把struts.xml放入。在web.xml中配置核心控制器。

     1.2创建一个表单jsp,提交到form.action,在struts.xml中配置form.action

        

     1.3在action类中接收参数并向域中写入

        

  1. import com.opensymphony.xwork2.ActionContext;
  2. import com.opensymphony.xwork2.ActionSupport;
  3. import org.apache.struts2.dispatcher.HttpParameters;
  4.  
  5. import java.util.Arrays;
  6.  
  7. public class formAction extends ActionSupport {
  8. public String execute(){
  9. //接收表单中的参数
  10. ActionContext context = ActionContext.getContext();
  11. HttpParameters parameters = context.getParameters();
  12. //获取参数
  13. String username = parameters.get("username").getValue();
  14. System.out.println(username);
  15. String password = parameters.get("password").getValue();
  16. System.out.println(password);
  17. String[] hobbies = parameters.get("hobby").getMultipleValues();//获取多个值
  18. System.out.println(Arrays.toString(hobbies));
  19. System.out.println("接收到表单");
  20. //往域中写入数据
  21. //往request域中:
  22. context.put("reqName","reqValue");
  23. //往session:
  24. context.getSession().put("sessionName","sessionValue");
  25. //往application域
  26. context.getApplication().put("name","Applicationvalue");
  27.  
  28. return SUCCESS;
  29. }
  30. }

    接收表单数据:通过ActionContext.getContext获取ActionContext对象,通过该对象获取HttpParameters对象。

   

    获取参数:

  

    往域中存参

  

  在jsp中获取参数

    

  2)使用Servlet的原声API

    

  1. public String form2(){
  2. System.out.println("form2");
  3. //获取原生api
  4. HttpServletRequest request = ServletActionContext.getRequest();
  5. //获取参数
  6. String username = request.getParameter("username");
  7. String pasword = request.getParameter("password");
  8. String[] hobbies = request.getParameterValues("hobby");
  9. System.out.println(username);
  10. System.out.println(pasword);
  11. System.out.println(Arrays.toString(hobbies));
  12. //往域中存数据
  13. request.setAttribute("reqNmae2","reqValue2");
  14. request.getSession().setAttribute("sessionName2","sessionValue2");
  15. ServletActionContext.getServletContext().setAttribute("contextName","contextValue");
  16.  
  17. return SUCCESS;
  18. }

    

   3)接口注入的方式 

二、结果页配置

   1)局部配置

      局部结果页面:在action中的result标签中配置

  2)全局配置

       全局结果页指的是,在包中配置一次,其他的在这个包中的action只要返回这个结果,都可以跳转这个页面。

      先在局部找,局部没有找到就到全局找

     

三、接收参数

  一般在开发中不会使用一中提到的方式

  当发送一个请求时,除了使用requestAPI来接收参数之外,struts内部提供了三种接收参数方式

  1)接收参数方式

      1.提供属性set方法的方式

          在Action中提供对应属性的set方法,会自动接收参数,并且会自动做类型转换

          缺点:接收大量数据时,还需要自己手动封装成对象。

  

  1. package com.ual.web;
  2.  
  3. import com.opensymphony.xwork2.ActionSupport;
  4.  
  5. import java.util.List;
  6.  
  7. public class formAction3 extends ActionSupport {
  8. //这里的属性值要与表单中提交的name值相同
  9. private String username;
  10. private Integer age;
  11. private List hobby;
  12. //提供set方法
  13. public void setUsername(String username) {
  14. this.username = username;
  15. }
  16.  
  17. public void setAge(Integer age) {
  18. this.age = age;
  19. }
  20.  
  21. public void setHobby(List hobby) {
  22. this.hobby = hobby;
  23. }
  24.  
  25. public String form3(){
  26. System.out.println(username);
  27. System.out.println(age);
  28. System.out.println(hobby);
  29. return null;
  30. }
  31. }

      2.页面中提供表达式

          2.1创建一个接收参数的domain模型,模型中的字段与提交表单对应。并提供对应get,set方法。

      

  1. package com.ual.domain;
  2.  
  3. import java.util.List;
  4.  
  5. public class User {
  6. private String username;
  7. private Integer age;
  8. private List hobby;
  9.  
  10. public String getUsername() {
  11. return username;
  12. }
  13.  
  14. public void setUsername(String username) {
  15. this.username = username;
  16. }
  17.  
  18. public Integer getAge() {
  19. return age;
  20. }
  21.  
  22. public void setAge(Integer age) {
  23. this.age = age;
  24. }
  25.  
  26. public List getHobby() {
  27. return hobby;
  28. }
  29.  
  30. public void setHobby(List hobby) {
  31. this.hobby = hobby;
  32. }
  33.  
  34. @Override
  35. public String toString() {
  36. return "User{" +
  37. "username='" + username + '\'' +
  38. ", age=" + age +
  39. ", hobby=" + hobby +
  40. '}';
  41. }
  42. }

        2.2在Action提供对应domain的对象属性,并提供该对象的get,set方法。

  1. package com.ual.web;
  2.  
  3. import com.opensymphony.xwork2.ActionSupport;
  4. import com.ual.domain.User;
  5.  
  6. import java.util.List;
  7.  
  8. public class formAction4 extends ActionSupport {
  9. //页面中提供表达式
  10. private User user;
  11.  
  12. public User getUser() {
  13. return user;
  14. }
  15. public void setUser(User user) {
  16. this.user = user;
  17. }
  18.  
  19. public String form4(){
  20. System.out.println(user);
  21. return null;
  22. }
  23. }

      2.3在jsp中页面当中,发送参数时,要带上Action当中的对象属性名

      

      3.采用模型驱动方式

          3.1创建一个接收参数的domain模型

         3.2在Action中实现ModelDriven<T>接口,其中T为domain模型类

        3.3实现接口方法getModel()

        3.4创建一个domain模型对象,在接口方法中返回。

  

  1. package com.ual.web;
  2.  
  3. import com.opensymphony.xwork2.ActionSupport;
  4. import com.opensymphony.xwork2.ModelDriven;
  5. import com.ual.domain.User;
  6.  
  7. public class formAction5 extends ActionSupport implements ModelDriven<User> {
  8. //采用模型驱动方式
  9. private User user=new User();
  10. @Override
  11. public User getModel() {
  12. return user;
  13. }
  14. public String form5(){
  15. System.out.println("user===="+user);
  16. return null;
  17. }
  18.  
  19. }

    4)接收参数错误

      只要任何一个拦截器在执行过程中,出现错误都会向错误信息中添加错误信息。最后workfllow会检查错误信息当中是否有错误,如果没有,就会到目标action,如果有,就会跳转input逻辑视图。

      

在开发时,可以配置一个input逻辑视图,错误时,可以跳转到自己指定界面,在页面中可以显示错误信息。

5)通过List集合接收多组相同参数

  1.定义domain类

    

  1. package com.ual.domain;
  2.  
  3. public class goods {
  4. private String name;
  5. private double price;
  6.  
  7. public String getName() {
  8. return name;
  9. }
  10.  
  11. public void setName(String name) {
  12. this.name = name;
  13. }
  14.  
  15. public double getPrice() {
  16. return price;
  17. }
  18.  
  19. public void setPrice(double price) {
  20. this.price = price;
  21. }
  22.  
  23. @Override
  24. public String toString() {
  25. return "goods{" +
  26. "name='" + name + '\'' +
  27. ", price=" + price +
  28. '}';
  29. }
  30. }

  2.在Action中,采用页面中提供表达式方法

  

  1. package com.ual.web;
  2.  
  3. import com.opensymphony.xwork2.ActionSupport;
  4. import com.opensymphony.xwork2.ModelDriven;
  5. import com.ual.domain.goods;
  6.  
  7. import java.util.List;
  8.  
  9. public class formAction6 extends ActionSupport {
  10. private List<goods> goodsList;//定义一个List集合,其中装入domain类,提供getset方法。
  11. public List<goods> getGoodsList() {
  12. return goodsList;
  13. }
  14.  
  15. public void setGoodsList(List<goods> goodsList) {
  16. this.goodsList = goodsList;
  17. }
  18.  
  19. public String form6(){
  20. System.out.println(goodsList);
  21. return null;
  22. }
  23. }

  3.jsp中,参数名前写入Action中定义的List集合加下标

    

6)使用map接收参数

  1.定义domain类

  2.在Action中,采用页面中提供表达式方法

  

  1. package com.ual.web;
  2.  
  3. import com.opensymphony.xwork2.ActionSupport;
  4. import com.ual.domain.goods;
  5.  
  6. import java.util.Map;
  7.  
  8. public class formAction7 extends ActionSupport {
  9. private Map<String , goods> goodsMap;//定义存domain类对象的map,键是string类型,值是domain对象
  10.  
  11. public Map<String, goods> getGoodsMap() {//提供getset方法。
  12. return goodsMap;
  13. }
  14.  
  15. public void setGoodsMap(Map<String, goods> goodsMap) {
  16. this.goodsMap = goodsMap;
  17. }
  18. public String form7(){
  19. System.out.println(goodsMap);
  20. return null;
  21. }
  22. }

  3.jsp中参数值设置

    

Struts2基础2的更多相关文章

  1. Struts2入门1 Struts2基础知识

    Struts2入门1 Struts2基础知识 20131130 代码下载: 链接: http://pan.baidu.com/s/11mYG1 密码: aua5 前言: 之前学习了Spring和Hib ...

  2. Struts2基础学习2

    Struts2基础学习2 项目结构,测试页面与实体类 <%@ page language="java" contentType="text/html; charse ...

  3. Struts2基础入门

    Struts2基础入门 创建一个web工程 0)导包并且创建一个核心配置文件 <?xml version="1.0" encoding="UTF-8"?& ...

  4. Struts2基础学习总结

    引用自:http://www.cnblogs.com/jbelial/archive/2012/05/10/2486886.html Struts 2是在WebWork2基础发展而来的. 注意:str ...

  5. 经典MVC框架技术-struts2基础知识

    Struts2框架简介 struts2框架是在struts1和webwork技术的基础上,进行合并的全新框架,struts2以Webwork为核心,采用拦截器来处理用户的请求,这样的设计使得业务逻辑控 ...

  6. Struts2框架学习第三章——Struts2基础

    本章要点 —  Struts 1框架的基本知识 — 使用Struts 1框架开发Web应用 —  WebWork框架的基本知识 — 使用WebWork框架开发Web应用 — 在Eclipse中整合To ...

  7. (一)Struts2 基础

    一.Struts简介 1.1 历史 虽然Struts 2号称是一个全新的框架,但这仅仅是相对Struts 1而言.Struts 2与Struts 1相比,确实有很多革命性的改进,但它并不是新发布的新框 ...

  8. struts2 基础

    框架(frameWork):某一种应用的半成品 struts2: 表现层 处理与页面进行交互的相关功能  hibernate: 持久层 负责业务逻辑数据的持久化  spring: 业务层 负责复杂的业 ...

  9. struts2 基础学习

      Struts 2是在WebWork2基础发展而来的. 注意:struts 2和struts 1在代码风格上几乎不一样. Struts 2 相比Struts 1的优点: 1.在软件设计上Struts ...

  10. 2. Struts2 基础

    1. Struts2简介 Struts2是一个WEB端MVC框架.作为比较早的MVC 框架之一,Struts2在使用中还是比较多的.虽然个人感受没有SpringMVC还那么的好用 Struts2 官网 ...

随机推荐

  1. django 前端模板继承显示model中使用choices的字段

    比如model中的一个class Need class Need(models.Model): """ 任务 """ party_a=mod ...

  2. R语言修改标题、坐标轴刻度、坐标轴名称的大小(cex.axis、cex.lab、cex.main函数)

    修改标题.坐标轴刻度.坐标轴名称的大小,用到了cex.axis.cex.lab.cex.main函数,其中,cex.axis表示修改坐标轴刻度字体大小,cex.lab表示修改坐标轴名称字体大小,cex ...

  3. Solr7.1--- 单机Linux环境搭建

    应网友的要求,写个关于Linux单机的 首先,把MySQL驱动包和solr7.1安装包上传到服务器,我上传到了自定义的目录/mysoft 执行服务安装脚本 1. 先切换到root用户 2. 解压出脚本 ...

  4. halcon形态学运算

    腐蚀.膨胀.开运算(先腐蚀后膨胀).闭运算(先膨胀后腐蚀) 以halcon自带案例ball.hdev为例(开运算),注意代码有所缩减.关于sort_region函数,参考http://blog.sin ...

  5. 微信小程序:图片预览

    wxml页面: <image src='{{UPLOAD_IMAGES_URL}}{{vv.img_s}}' data-src="{{vv.img}}" bindtap=&q ...

  6. Java流程语句

    流程控制语句 if语句: if语句的执行流程 例子: public class IfDemo01 { public static void main(String[] args) { int x = ...

  7. Unity 如何检测鼠标双击事件

    代码如下: void OnGUI(){ Event e=Event.current; )) Debug.Log("用户双击了鼠标"); }

  8. 设计模式---行为变化模式之命令模式(Command)

    前提:行为变化模式 在组件的构建过程中,组建行为的变化经常导致组件本身剧烈的变化.“行为变化”模式将组件的行为和组件本身进行解耦,从而支持组件的变化,实现两者之间的松耦合. 类中非虚函数和静态函数方法 ...

  9. ssh框架里拦截器的权限验证基本思路【转】

    相关表 序号 表性质 表名 字段 字段 字段 字段 字段 1 基表 用户表 id 帐号 密码     2 基表 角色表 id 角色名       3 基表 权限表 id 权限名 请求路径     4 ...

  10. HDU 6400(括号组合 ~)

    题意是说在 h 行 w 列的矩阵中,通过设计使得尽可能多的行或列能满足题中的平衡条件. 如果行数(列数)是奇数,那么每一列(行)一定不能平衡,就要按照满足每一行(列)平衡,输出“ () “:若行数和列 ...