Struts2基础学习2

项目结构,测试页面与实体类

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
request: ${requestScope.name}<br>
session:${sessionScope.name}<br>
application:${applicationScope.name}<br>
</body>
</html>

api

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/Demo3Action">
用户名:<input type="text" name="name" /><br>
年龄:<input type="text" name="age" /><br>
生日:<input type="text" name="birthday" /><br>
<input type="submit" value="提交" />
</form>
</body>
</html>

form1

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/Demo4Action">
用户名:<input type="text" name="user.name" /><br>
年龄:<input type="text" name="user.age" /><br>
生日:<input type="text" name="user.birthday" /><br>
<input type="submit" value="提交" />
</form>
</body>
</html>

form2

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/Demo5Action">
用户名:<input type="text" name="name" /><br>
年龄:<input type="text" name="age" /><br>
生日:<input type="text" name="birthday" /><br>
<input type="submit" value="提交" />
</form>
</body>
</html>

form3

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/Demo6Action" method="post" >
list:<input type="text" name="list" /><br>
list:<input type="text" name="list[3]" /><br>
map:<input type="text" name="map['key']" /><br>
<input type="submit" value="提交" />
</form>
</body>
</html>

form4

package com.struts2.pojo;

import java.util.Date;

/**
* @author: 肖德子裕
* @date: 2018/11/20 18:39
* @description:
*/
public class User {
private String name;
private Integer age;
private Date birthday; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", birthday=" + birthday + "]";
}
}

User

测试Struts2的重定向与转发

package com.struts2.action;

import com.opensymphony.xwork2.ActionSupport;

/**
* @author: 肖德子裕
* @date: 2018/11/20 10:25
* @description: 测试重定向与转发
* 之所以继承ActionSupport类,是因为该类实现了很多接口,我们可以直接使用
*/
public class Demo1Action extends ActionSupport { public String index() throws Exception{
System.out.println("hello1");
return SUCCESS;
} public String index2() throws Exception{
System.out.println("hello2");
return SUCCESS;
} public String index3() throws Exception{
System.out.println("hello3");
return SUCCESS;
} public String index4() throws Exception{
System.out.println("hello4");
return SUCCESS;
}
}

Demo1Action

测试Struts2获取servlet api

package com.struts2.action;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext; import java.util.Map; /**
* @author: 肖德子裕
* @date: 2018/11/20 14:05
* @description: 测试struts2获取原生servlet api
* 每次请求都会创建一个ActionContext对象(数据中心),请求结束时销毁
* 可以通过该对象获取servlet api
* 也可以通过ServletActionContext对象获取api(不推荐)
* 也可以通过实现相应的接口获取(不推荐)
* 3种方式都是从ActionContext中获取相应api
*/
public class Demo2Action extends ActionSupport {
/**
* 在本地线程ThreadLocal上绑定了创建的ActionContext对象
*/
public String test() throws Exception{
//获取request(不推荐使用)
Map<String, Object> requestScope = (Map<String, Object>) ActionContext.getContext().get("request"); //可以直接保存值到request(推荐)
ActionContext.getContext().put("name","request"); //获取session
Map<String, Object> sessionScope = ActionContext.getContext().getSession();
sessionScope.put("name","session"); //获取application
Map<String, Object> applicationScope = ActionContext.getContext().getApplication();
applicationScope.put("name","application"); return SUCCESS;
} }

Demo2Action

测试Struts2获取参数的方式

package com.struts2.action;

import com.opensymphony.xwork2.ActionSupport;

import java.util.Date;

/**
* @author: 肖德子裕
* @date: 2018/11/20 14:39
* @description: 测试struts2属性获取参数
* 每次请求都会创建一个新的action实例对象
* servlet是线程不安全的;action是线程安全的,可以使用成员变量接收参数
* 参数支持自动转换,如字符串转日期,字符串转int
*/
public class Demo3Action extends ActionSupport {
private String name;
private Integer age;
private Date birthday; public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public Date getBirthday() {
return birthday;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getParam(){
System.out.println(name+" "+age+" "+birthday);
return SUCCESS;
}
}

Demo3Action

package com.struts2.action;

import com.opensymphony.xwork2.ActionSupport;
import com.struts2.pojo.User; /**
* @author: 肖德子裕
* @date: 2018/11/20 18:40
* @description: 测试struts2对象获取参数
*/
public class Demo4Action extends ActionSupport {
private User user; public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} public String getParam(){
System.out.println(user);
return SUCCESS;
}
}

Demo4Action

package com.struts2.action;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.struts2.pojo.User; /**
* @author: 肖德子裕
* @date: 2018/11/20 18:47
* @description: 测试struts2模型驱动获取参数
*/
public class Demo5Action extends ActionSupport implements ModelDriven<User> {
private User user=new User(); public String getParam(){
System.out.println(user);
return SUCCESS;
} @Override
public User getModel() {
return user;
}
}

Demo5Action

package com.struts2.action;

import com.opensymphony.xwork2.ActionSupport;

import java.util.List;
import java.util.Map; /**
* @author: 肖德子裕
* @date: 2018/11/20 19:05
* @description: 封装集合类型参数
*/
public class Demo6Action extends ActionSupport {
private List<String> list;
private Map<String,String> map; public List<String> getList() {
return list;
} public void setList(List<String> list) {
this.list = list;
} public Map<String, String> getMap() {
return map;
} public void setMap(Map<String, String> map) {
this.map = map;
} public String getParams(){
System.out.println(list);
System.out.println(map);
return SUCCESS;
}
}

Demo6Action

核心配置文件(注意web.xml中要配置过滤器)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts> <package name="demo1" namespace="/" extends="struts-default" >
<!-- 测试转发(默认) -->
<action name="Demo1Action" class="com.struts2.action.Demo1Action" method="index" >
<result name="success" type="dispatcher" >/index.jsp</result>
</action>
<!-- 测试重定向 -->
<action name="Demo1Action2" class="com.struts2.action.Demo1Action" method="index2" >
<result name="success" type="redirect" >/index.jsp</result>
</action>
<!-- 测试链式转发跳转 -->
<action name="Demo1Action3" class="com.struts2.action.Demo1Action" method="index3" >
<result name="success" type="chain" >
<param name="namspace">/</param>
<param name="actionName">Demo1Action</param>
</result>
</action>
<!-- 测试链式重定向 -->
<action name="Demo1Action4" class="com.struts2.action.Demo1Action" method="index4" >
<result name="success" type="redirectAction" >
<param name="namspace">/</param>
<param name="actionName">Demo1Action</param>
</result>
</action>
</package> <package name="demo2" namespace="/" extends="struts-default" >
<!-- 测试获取servlet api -->
<action name="Demo2Action" class="com.struts2.action.Demo2Action" method="test" >
<result name="success" type="dispatcher" >/api.jsp</result>
</action>
</package> <package name="demo3" namespace="/" extends="struts-default" >
<!-- 测试属性获取参数 -->
<action name="Demo3Action" class="com.struts2.action.Demo3Action" method="getParam" >
<result name="success" type="dispatcher" >/form1.jsp</result>
</action>
</package> <package name="demo4" namespace="/" extends="struts-default" >
<!-- 测试对象获取参数 -->
<action name="Demo4Action" class="com.struts2.action.Demo4Action" method="getParam" >
<result name="success" type="dispatcher" >/form2.jsp</result>
</action>
</package> <package name="demo5" namespace="/" extends="struts-default" >
<!-- 测试模型驱动获取参数 -->
<action name="Demo5Action" class="com.struts2.action.Demo5Action" method="getParam" >
<result name="success" type="dispatcher" >/form3.jsp</result>
</action>
</package> <package name="demo6" namespace="/" extends="struts-default" >
<!-- 测试集合获取参数 -->
<action name="Demo6Action" class="com.struts2.action.Demo6Action" method="getParams" >
<result name="success" type="dispatcher" >/form4.jsp</result>
</action>
</package> </struts>

struts2.xml

Struts2基础学习2的更多相关文章

  1. Struts2基础学习总结

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

  2. struts2 基础学习

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

  3. struts2基础学习--环境配置(*原创)

    1) -->下载开发包,网址:http://struts.apache.org/download.cgi 本文使用的是struts-2.5.2-all开发包 2) -->导入jar包,具体 ...

  4. Struts2基础学习(八)—Struts2防止表单重复提交

    一.原因      用户重复提交表单在某些场合将会造成非常严重的后果.例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太 慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消 ...

  5. Struts2基础学习(七)—值栈和OGNL

    目录: 一.值栈 二.OGNL表达式 一.值栈(ValueStack) 1.定义      ValueStack贯穿整个Acton的生命周期,每个Action类的对象实例都拥有一个ValueStack ...

  6. Struts2基础学习(六)—文件的上传和下载

    一.文件的上传 1.单个文件上传      Struts2使用拦截器完成了文件的上传,而且底层使用的也是FileUpload开源组件. 客户端注意事项: (1)method="post&qu ...

  7. Struts2基础学习(五)—拦截器

    一.概述 1.初识拦截器      Interceptor 拦截器类似前面学过的过滤器,是可以在action执行前后执行的代码,是我们做Web开发经常用到的技术.比如:权限控制.日志等.我们也可以将多 ...

  8. Struts2基础学习(四)—类型转换器和数据校验

    一.自定义类型转换器 1.概述      Struts2提供了常规类型转换器,可以用于常用数据类型的转换,但如果目标类型是一个特殊类型,则需要自定义转换器.Struts2 类型转换器实际上都是基于OG ...

  9. Struts2基础学习(三)—Result和数据封装

    一.Result      Action处理完用户请求后,将返回一个普通的字符串,整个普通字符串就是一个逻辑视图名,Struts2根据逻辑视图名,决定响应哪个结果,处理结果使用<result&g ...

随机推荐

  1. 利用Serv-U搭建FTP服务器

    以前在学校的时候,学校的整个宿舍楼都是在一个局域网中,经常有人用个人电脑搭个网站或者FTP啊什么的,主要是进行一些影视资源的传播活动.不乏 有些资源充沛的有志青年利用业余时间翻译某岛国影视资源,利用局 ...

  2. jquery截取、判断字符串的长度,中英文都可

    计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) String.prototype.len=function(){return this.replace([^\x00-\xff]/g,& ...

  3. MongoDB之mongodb.cnf配置

    # mongodb3.2.1 的主配置文件,将此文件放置于 mongodb3.2.1/bin 目录下 # hapday 2016-01-27-16:55 start # 数据文件存放目录 dbpath ...

  4. Linux 两组信号对比

    博客逐步迁移到,独立博客,原文地址 http://www.woniubi.cn/two_groups_signal_difference/ 之前看信号的时候,没有太注意不同信号的对比.今天再次看到的时 ...

  5. 厌烦了写findViewById 试试ButterKnife吧

    先上官网 http://jakewharton.github.io/butterknife/  和 https://github.com/JakeWharton/butterknife 配置开发环境 ...

  6. [SVN]TortoiseSVN工具培训4─客户端常用操作命令

    1.权限认证 当进行SVN任何操作时,如果是首次操作,SVN会弹出权限认证. 输入用户名和密码点击确认即可完成认证. 勾选保存用户数据信息,可以避免将来重复输入用户名和密码认证. 2.删除权限认证信息 ...

  7. TeamViewer 软件完全卸载

    TeamViewer 软件似乎用于商业环境中 - 彻底卸载 Windows 1. 检测为商业用途该软件似乎用于商业环境中.请注意:免费版仅供个人使用.您的会话将在 5 分钟后终止. 2.1 Close ...

  8. Homestead 安装 phpMyAdmin 作为数据库管理客户端 — Laravel 实战 iBrand API 教程

    简介 phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库.借由此Web接口可以成为一个简易方式输 ...

  9. nginx配置vhost配置文件详解

    //千锋PHP-PHP培训的实力派server { listen 80; server_name www.sina.com; root /data/www/sina; index index.php; ...

  10. class类重定义

    C++项目中如果一个头文件被多个文件包含,#include"xxx.h",将可能导致头文件里面定义的类被多次编译,解决方法是加编译指示: #pragma once //告诉编译器只 ...