一、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类中接收参数并向域中写入

        

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.dispatcher.HttpParameters; import java.util.Arrays; public class formAction extends ActionSupport {
public String execute(){
//接收表单中的参数
ActionContext context = ActionContext.getContext();
HttpParameters parameters = context.getParameters();
//获取参数
String username = parameters.get("username").getValue();
System.out.println(username);
String password = parameters.get("password").getValue();
System.out.println(password);
String[] hobbies = parameters.get("hobby").getMultipleValues();//获取多个值
System.out.println(Arrays.toString(hobbies));
System.out.println("接收到表单");
//往域中写入数据
//往request域中:
context.put("reqName","reqValue");
//往session:
context.getSession().put("sessionName","sessionValue");
//往application域
context.getApplication().put("name","Applicationvalue"); return SUCCESS;
}
}

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

   

    获取参数:

  

    往域中存参

  

  在jsp中获取参数

    

  2)使用Servlet的原声API

    

    public String form2(){
System.out.println("form2");
//获取原生api
HttpServletRequest request = ServletActionContext.getRequest();
//获取参数
String username = request.getParameter("username");
String pasword = request.getParameter("password");
String[] hobbies = request.getParameterValues("hobby");
System.out.println(username);
System.out.println(pasword);
System.out.println(Arrays.toString(hobbies));
//往域中存数据
request.setAttribute("reqNmae2","reqValue2");
request.getSession().setAttribute("sessionName2","sessionValue2");
ServletActionContext.getServletContext().setAttribute("contextName","contextValue"); return SUCCESS;
}

    

   3)接口注入的方式 

二、结果页配置

   1)局部配置

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

  2)全局配置

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

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

     

三、接收参数

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

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

  1)接收参数方式

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

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

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

  

package com.ual.web;

import com.opensymphony.xwork2.ActionSupport;

import java.util.List;

public class formAction3  extends ActionSupport {
//这里的属性值要与表单中提交的name值相同
private String username;
private Integer age;
private List hobby;
//提供set方法
public void setUsername(String username) {
this.username = username;
} public void setAge(Integer age) {
this.age = age;
} public void setHobby(List hobby) {
this.hobby = hobby;
} public String form3(){
System.out.println(username);
System.out.println(age);
System.out.println(hobby);
return null;
}
}

      2.页面中提供表达式

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

      

package com.ual.domain;

import java.util.List;

public class User {
private String username;
private Integer age;
private List hobby; public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public List getHobby() {
return hobby;
} public void setHobby(List hobby) {
this.hobby = hobby;
} @Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", age=" + age +
", hobby=" + hobby +
'}';
}
}

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

package com.ual.web;

import com.opensymphony.xwork2.ActionSupport;
import com.ual.domain.User; import java.util.List; public class formAction4 extends ActionSupport {
//页面中提供表达式
private User user; public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
} public String form4(){
System.out.println(user);
return null;
}
}

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

      

      3.采用模型驱动方式

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

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

        3.3实现接口方法getModel()

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

  

package com.ual.web;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.ual.domain.User; public class formAction5 extends ActionSupport implements ModelDriven<User> {
//采用模型驱动方式
private User user=new User();
@Override
public User getModel() {
return user;
}
public String form5(){
System.out.println("user===="+user);
return null;
} }

    4)接收参数错误

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

      

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

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

  1.定义domain类

    

package com.ual.domain;

public class goods {
private String name;
private double price; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public double getPrice() {
return price;
} public void setPrice(double price) {
this.price = price;
} @Override
public String toString() {
return "goods{" +
"name='" + name + '\'' +
", price=" + price +
'}';
}
}

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

  

package com.ual.web;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.ual.domain.goods; import java.util.List; public class formAction6 extends ActionSupport {
private List<goods> goodsList;//定义一个List集合,其中装入domain类,提供getset方法。
public List<goods> getGoodsList() {
return goodsList;
} public void setGoodsList(List<goods> goodsList) {
this.goodsList = goodsList;
} public String form6(){
System.out.println(goodsList);
return null;
}
}

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

    

6)使用map接收参数

  1.定义domain类

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

  

package com.ual.web;

import com.opensymphony.xwork2.ActionSupport;
import com.ual.domain.goods; import java.util.Map; public class formAction7 extends ActionSupport {
private Map<String , goods> goodsMap;//定义存domain类对象的map,键是string类型,值是domain对象 public Map<String, goods> getGoodsMap() {//提供getset方法。
return goodsMap;
} public void setGoodsMap(Map<String, goods> goodsMap) {
this.goodsMap = goodsMap;
}
public String form7(){
System.out.println(goodsMap);
return null;
}
}

  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. 腾讯云centos7安装MySQL

    centos就centos呗,为什么要加个腾讯云呢?有这种疑问的兄dei,一定是没被不同云的系统坑过啊,阿里云的Ubuntu和腾讯云的Ubuntu不一样,centos好像也有差别,各个云平台,同样的系 ...

  2. TestNg 5.类分组

    类分组是可以给类去分组,几个类分成不同的组. 比如,建立3个类GroupsOnClass1,GroupsOnClass2,GroupsOnClass3.   GroupsOnClass1和Groups ...

  3. hystrix实战总结;

    HystrixCircuitBreaker 有三种状态 : 断路器默认是20个请求失败才打开短路器,可以进行配置: CLOSED :关闭 OPEN :打开 HALF_OPEN :半开 1.接口正确,接 ...

  4. Luogu P2580 于是他错误的点名开始了 Trie树 字典树

    字典树裸题.每次插入询问串,查询的时候拿出来直接查,信息保留在节点上. #include <bits/stdc++.h> using namespace std; char s[51]; ...

  5. numpy知识点

    1.nonzero 对于一维数据来说,将返回符合条件的 下标 >>> b1 = np.array([True, False, True, False]) >>> n ...

  6. 1053. Path of Equal Weight (30)

    Given a non-empty tree with root R, and with weight Wi assigned to each tree node Ti. The weight of ...

  7. 【.net】未能加载文件或程序集“System.Web.Mvc, Version=5.2.2.0

    #车祸现场 未能加载文件或程序集“System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或 ...

  8. Java Bean的规范

    什么是Java Bean? Java Bean就是遵循了某种规范的类,所以Java Bean就是一个类,只不过遵循了某种规范而已. Java Bean的规范 就是这么简单,下面就是一个标准的Java ...

  9. .aspx、MasterPage、.ascx加载顺序

    1.    Master page中的用户控件的 page_init2.    Aspx页面中的用户控件的 page_init3.    Master page的page_init4.    Aspx ...

  10. Debugger for chrome

    Debugger In VScode Getting Started Install the extension Debugger for chrome Config the launch.json ...