博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2学习第2天--Struts2的Servlet的API的访问 Struts2的结果页面的配置 Struts2的数据的封装(包括复杂类型)...
阅读量:4954 次
发布时间:2019-06-12

本文共 9173 字,大约阅读时间需要 30 分钟。

启动后访问jsp 输入姓名密码:

提交后跳转打action 打印:

 

修改类:

 

配置同上 结果同上。

 

实现这俩接口 就得到了

 

 以上代码附上:

struts.xml:

struts_demo1.xml:

/demo1/demo2.jsp
/demo1/demo2.jsp
/demo1/demo2.jsp

class:

 

package com.itheima.struts2.demo1;import java.util.Arrays;import java.util.Map;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;/** * 访问Servlet的API方式一:完全解耦合的方式 * @author ZWT * */public class RequestDemo1 extends ActionSupport{		@Override	public String execute() throws Exception {		// 一、接收参数:		// 利用Struts2中的对象ActionContext对象.		ActionContext context = ActionContext.getContext();		// 调用ActionContext中的方法。		// 类似于Map
request.getParameterMap(); Map
map = context.getParameters(); for (String key : map.keySet()) { String[] values = (String[]) map.get(key); System.out.println(key+" "+Arrays.toString(values)); } // 二、向域对象中存入数据(操作的不是真正的session application 而是数据的集合) context.put("reqName", "reqValue");// 相当于request.setAttribute(); context.getSession().put("sessName", "sessValue"); // 相当于session.setAttribute(); context.getApplication().put("appName", "appValue"); // 相当于application.setAttribute(); return SUCCESS; }}

  

package com.itheima.struts2.demo1;import java.util.Arrays;import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;/** * 访问Servlet的API的方式二:原生的方式 * @author jt * */public class RequestDemo2 extends ActionSupport {	@Override	public String execute() throws Exception {		// 一、接收数据		// 直接获得request对象,通过ServletActionContext		HttpServletRequest request = ServletActionContext.getRequest();		Map
map = request.getParameterMap(); for (String key : map.keySet()) { String[] values = map.get(key); System.out.println(key+" "+Arrays.toString(values)); } // 二、向域对象中保存数据 // 向request中保存数据: request.setAttribute("reqName", "reqValue"); // 向session中保存数据 request.getSession().setAttribute("sessName", "sessValue"); // 向application中保存数据 ServletActionContext.getServletContext().setAttribute("appName", "appValue"); return SUCCESS; }}

  

package com.itheima.struts2.demo1;import java.util.Arrays;import java.util.Map;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.util.ServletContextAware;import com.opensymphony.xwork2.ActionSupport;/** * 访问Servlet的API的方式三:接口注入的方式 * @author ZWT * */public class RequestDemo3 extends ActionSupport implements ServletRequestAware,ServletContextAware{	private HttpServletRequest request;	private ServletContext context;	public RequestDemo3() {		super();		System.out.println("RequestDemo3被创建了...");	}	@Override	public String execute() throws Exception {		// 一、接收参数		// 通过接口注入的方式获得request对象。		Map
map = request.getParameterMap(); for (String key : map.keySet()) { String[] values = map.get(key); System.out.println(key+" "+Arrays.toString(values)); } // 二、向域对象中保存数据 // 向request域中保存数据 request.setAttribute("reqName", "reqValue"); // 向session中保存数据: request.getSession().setAttribute("sessName", "sessValue"); // 向application中保存数据: context.setAttribute("appName", "appValue"); return super.execute(); } @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } @Override public void setServletContext(ServletContext context) { this.context = context; }}

 jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
Insert title here

Struts2访问Servlet的API

方式一:完成解耦合的方式

姓名:
密码:

方式二:使用原生的方式访问

姓名:
密码:

方式三:接口注入的方式

姓名:
密码:

  

 

局部优先级大于全局的。

 

 

 

 

暂且忽略全局跳转。

 

struts给你把类型转换都做好了。但这种方法不常用。

 还需要自己网对象里面添加。

 

对象的方式打印。注意action一定要提供get set方法。 页面上也要直接封装到user中。

 

 

实现了ModelDriven 然后重写方法。实例化User。

在年龄一栏目填入aaa 类型无法转换 但是不打印错误 可以将log4j的俩包降级为1.X 。

只要出错 再回到当前页面。

 

 

以上:

Action:

package com.itheima.struts2.demo2;import java.util.Date;import com.itheima.struts2.domain.User;import com.opensymphony.xwork2.ActionSupport;/** * 数据封装方式一:提供属性的set方法的方式 * @author ZWT * */public class UserAction1 extends ActionSupport {	// 提供了对应的属性	private String username;	private String password;	private Integer age;	private Date birthday;	private Double salary;	// 提供属性对应的 set方法	public void setUsername(String username) {		this.username = username;	}	public void setPassword(String password) {		this.password = password;	}	public void setAge(Integer age) {		this.age = age;	}	public void setBirthday(Date birthday) {		this.birthday = birthday;	}	public void setSalary(Double salary) {		this.salary = salary;	}		@Override	public String execute() throws Exception {		// 接收数据:		System.out.println(username);		System.out.println(password);		System.out.println(age);		System.out.println(birthday);		System.out.println(salary);		// 封装数据:		User user = new User();		user.setUsername(username);		user.setPassword(password);		user.setAge(age);		user.setBirthday(birthday);		user.setSalary(salary);		return NONE;	}}

  

package com.itheima.struts2.demo2;import com.itheima.struts2.domain.User;import com.opensymphony.xwork2.ActionSupport;/** * 数据封装的方式二:属性驱动-在页面中提供表达式的方式 * @author ZWT * */public class UserAction2 extends ActionSupport {		// 提供一个User对象:	private User user;	// 提供user的set和get方法:一定要提供get方法。	// 因为拦截器完成数据封装,需要创建User对象。通过get方法可以获得同一个对象,将数据封装到同一个对象中。	public User getUser() {		return user;	}	public void setUser(User user) {		this.user = user;	}	@Override	public String execute() throws Exception {		System.out.println(user);		return NONE;	}}

  

package com.itheima.struts2.demo2;import com.itheima.struts2.domain.User;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;/** * 数据封装的方式三:模型驱动-采用模型驱动的方式 * @author jt * */public class UserAction3 extends ActionSupport implements ModelDriven
{ // 模型驱动使用的对象:前提必须手动提供对象的实例 private User user = new User(); // 手动实例化User. @Override // 模型驱动需要使用的方法: public User getModel() { return user; } @Override public String execute() throws Exception { System.out.println(user); return NONE; }}

 XML:

/demo2/demo1.jsp

 

 jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %>
Insert title here

Struts2的数据封装

方式一:属性驱动-提供set方法的方式

用户名:
密码:
年龄:
生日:
工资:

方式二:属性驱动-在页面中提供表达式方式

用户名:
密码:
年龄:
生日:
工资:

方式三:模型驱动-模型驱动方式

用户名:
密码:
年龄:
生日:
工资:

 

  

 

启动运行:

 

 yishang:

Action:

package com.itheima.struts2.demo3;import java.util.List;import com.itheima.struts2.domain.Product;import com.opensymphony.xwork2.ActionSupport;/** * 复杂类型的数据封装:封装到List集合 * @author ZWT * */public class ProductAction1 extends ActionSupport {		private List
products; // 提供集合的set方法: public void setProducts(List
products) { this.products = products; } public List
getProducts() { return products; } @Override public String execute() throws Exception { for (Product product : products) { System.out.println(product); } return NONE; } }

  

package com.itheima.struts2.demo3;import java.util.Map;import com.itheima.struts2.domain.Product;import com.opensymphony.xwork2.ActionSupport;/** * 复杂数据类型的封装:封装到Map集合 * @author ZWT * */public class ProductAction2 extends ActionSupport {	private Map
map; public Map
getMap() { return map; } public void setMap(Map
map) { this.map = map; } @Override public String execute() throws Exception { for (String key : map.keySet()) { Product product = map.get(key); System.out.println(key+" "+product); } return NONE; }}

 

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
Insert title here

Struts2的复杂类型的数据封装

封装到List集合中:批量插入商品

商品名称:
商品价格:
商品名称:
商品价格:
商品名称:
商品价格:

封装到Map集合中:批量插入商品

商品名称:
商品价格:
商品名称:
商品价格:
商品名称:
商品价格:

直接使用之前的crm项目即可。

type配置要注意:!!!

因为不能直接跳jsp 还要查一下 所以跳到action 从action跳到action 就用重定向。

因为 两个action在同一包 同一个namespace下 所以直接写 

如果不在要用params来写:

 

 保存一个 成功!!! 

 

 

  

 

转载于:https://www.cnblogs.com/ttty/p/10752769.html

你可能感兴趣的文章
Fireworks基本使用
查看>>
c#线程学习笔记一---基本概念
查看>>
2018-4-13
查看>>
两台电脑间的消息传输
查看>>
Linux 标准 I/O 库
查看>>
Spring Data JPA教程, 第八部分:Adding Functionality to a Repository (未翻译)
查看>>
教练技术的小应用
查看>>
.net Tuple特性
查看>>
Java基础常见英语词汇
查看>>
iOS并发编程笔记【转】
查看>>
泛型 T的定义<1>
查看>>
thinkphp dispaly和fetch的区别
查看>>
08号团队-团队任务5:项目总结会
查看>>
mybatis 插入数据 在没有commit时 获取主键id
查看>>
SQL2005 删除空白行null
查看>>
lightoj 1030 概率dp
查看>>
重新注册.NET
查看>>
Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
查看>>
Vagrant入门
查看>>
python and 我爱自然语言处理
查看>>