Struts2进阶版
前面我们讲到了,Struts2框架的配置和基本使用方法,接下来一起继续学习吧。
1、协同开发与3种Action实现方式
协同开发
目录结构
HelloAction.java
package com.test.hello;import com.opensymphony.xwork2.ActionSupport;public class HelloAction extends ActionSupport {/*** */private static final long serialVersionUID = 1L;@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubSystem.out.println("hello页面");return "hello";}
}
struts_hello.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="/H" extends="struts-default"><action name="hel" class="com.test.hello.HelloAction"><result name="hello">/index.jsp</result></action></package><!-- localhost:8080/txkt/H/hel.action --><!-- include用于包含配置 --><include file="example.xml" /><!-- Add packages here --></struts>
PaymentAction.java
package com.test.pay;public class PaymentAction {public String execute(){// TODO Auto-generated method stubSystem.out.println("pay页面");return "pay";}
}
struts_pay.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="demo2" namespace="/P" extends="struts-default"><action name="pa" class="com.test.pay.PaymentAction"><result name="pay">/index.jsp</result></action></package><!-- localhost:8080/txkt/P/pa.action --><!-- include用于包含配置 --><include file="example.xml" /><!-- Add packages here --></struts>
LoginAction.java
package com.test.user;import com.opensymphony.xwork2.Action;public class LoginAction implements Action{@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubSystem.out.println("login页面");return "login";}}
struts_login.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="demo3" namespace="/L" extends="struts-default"><action name="log" class="com.test.user.LoginAction"><result name="login">/index.jsp</result></action></package><!-- localhost:8080/txkt/L/log.action --><!-- include用于包含配置 --><include file="example.xml" /><!-- Add packages here --></struts>
开发者共同开发,各自调度资源,由struts.xm
l统一管理 (include功能)
<?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><!-- constant元素用于常量的配置,可用于编辑struts.properties的常量 --><!-- 设置默认编码集为UTF-8 --><constant name="struts.i18n.enconding" value="UTF-8" /><!-- 关闭动态方法调用功能 --><constant name="struts.enable.DynamicMethodInvocation" value="false" /><!-- localhost:8080/txkt/test_login.action --><!-- localhost:8080/txkt/test_register.action --><!-- include用于包含配置 --><include file="com/test/hello/struts_hello.xml"></include><include file="com/test/pay/struts_pay.xml"></include><include file="com/test/user/struts_login.xml"></include><include file="example.xml" /><!-- Add packages here --></struts>
新建index.jsp空白页面
启动tomcat服务器
浏览器分别输入:
localhost:8080/txkt/H/hel.action
localhost:8080/txkt/P/pa.action
localhost:8080/txkt/L/log.action
查看控制台
3种实现方式
附:具体实现方法看xml文件action的method属性,默认为execute()方法
(1)继承ActionSupport和execute()方法
(2)实现Action接口
(3)自己定义实现方法
2、动态调用方法
参考链接,点击进入
3、Action访问ServletAPI
方法1
实现ServletRequestAware,ServletResponseAware,SessionAware等感知接口
ApiAction.java
package com.test.api;import java.util.Arrays;
import java.util.Map;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;import com.opensymphony.xwork2.ActionSupport;public class ApiAction extends ActionSupport implements ServletRequestAware,ServletResponseAware,SessionAware{private static final long serialVersionUID = 1L;private HttpServletRequest request;private HttpServletResponse response;private Map<String, Object> session;@Overridepublic String execute() throws Exception {// TODO Auto-generated method stub// requestString sid=request.getParameter("sid");System.out.println(sid);//responseresponse.getWriter().print("sid:"+sid);//sessionHttpSession session1 = request.getSession();session1.setAttribute("sname", "lisi");String s1=session1.getAttribute("sname").toString();System.out.println(s1);session.put("sex", "male");System.out.println(Arrays.asList(session.get("sex")));return "ok";}@Overridepublic void setServletRequest(HttpServletRequest request) {// TODO Auto-generated method stubthis.request=request;}@Overridepublic void setServletResponse(HttpServletResponse response) {// TODO Auto-generated method stubthis.response=response;}@Overridepublic void setSession(Map<String, Object> session) {// TODO Auto-generated method stubthis.session=session;}
}
配置xml
struts.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="apikg" namespace="/Api" extends="struts-default"><action name="api" class="com.test.api.ApiAction"><result name="ok"><!-- 默认是转发 -->/index.jsp</result></action></package><!-- localhost:8080/txkt/Api/api.action --><!-- include用于包含配置 --><include file="example.xml" /><!-- Add packages here --></struts>
浏览器输入http://localhost:8080/txkt/Api/api.action?sid=001
启动服务器
方法2
通过ServletActionContext工具类获取
ApiAction2.java
package com.test.api;import java.util.Arrays;
import java.util.Map;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class ApiAction2 extends ActionSupport {private static final long serialVersionUID = 1L;@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubHttpServletRequest request= ServletActionContext.getRequest();HttpServletResponse response= ServletActionContext.getResponse(); // requestString sid=request.getParameter("sid");System.out.println(sid);//responseresponse.getWriter().print("sid:"+sid);//sessionHttpSession session1 = request.getSession();session1.setAttribute("sname", "lisi");String s1=session1.getAttribute("sname").toString();System.out.println(s1);return "ok";}}
<action name="api2" class="com.test.api.ApiAction2"><result name="ok"><!-- 默认是转发 -->/index.jsp</result></action>
浏览器输入http://localhost:8080/txkt/Api/api2.action?sid=001
启动服务器
方式3(少用)
通过ActionContext工具类获取
参考博客:点击进入
【获取Map类型的request/session/application属性】
通过ActionContext获取
public class HelloWorldAction { public String execute() { ActionContext ctx = ActionContext.getContext(); Map<String, Object> application = ctx.getApplication(); Map<String, Object> session = ctx.getSession(); Map<String, Object> request = ctx.get("request"); application.put("application","应用范围"); session.put("session","session范围"); request.put("request","request范围"); return "message"; }
}
在JSP页面就可以通过EL表达式获取相应作用域中的属性
${applicationScope.application}
${sessionScope.session}
${requestScope.request}
或通过
<s:property value="#application.application" />
<s:property value="#session.session" />
<s:property value="#request.request" />
4、Action的3种接受方式
方式一
将属性直接写在action中,就能直接取到值,action自动完成,需要提供set方法。
ParamAction.java
package com.test.param;import com.opensymphony.xwork2.ActionSupport;public class ParamAction extends ActionSupport{/*** */private static final long serialVersionUID = 1L;private Integer sid;private String sname;public Integer getSid() {return sid;}public void setSid(Integer sid) {this.sid = sid;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubSystem.out.println(sid+":"+sname);return "ok";}
}
struts.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="par" namespace="/P" extends="struts-default"><action name="param" class="com.test.param.ParamAction"><result name="ok">/index.jsp</result></action></package><!-- localhost:8080/txkt/P/param.action?sid=001&sname="zhangsan" --><!-- include用于包含配置 --><include file="example.xml" /><!-- Add packages here --></struts>
浏览器访问地址:
http://localhost:8080/txkt/P/param.action?sid=001&sname=“zhangsan”
控制台上输出:
方式二
通过Model层思想,也就是JavaBean或者说是Domain,
属性·需要指明set,get方法。
User类(属性封装类)
package com.test.param;public class User {private Integer sid;private String sname;private Integer age;public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Integer getSid() {return sid;}public void setSid(Integer sid) {this.sid = sid;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "学号:"+sid+" 姓名:"+sname+" 年龄:"+age;}
}
ParamAction2.java
package com.test.param;import com.opensymphony.xwork2.ActionSupport;public class ParamAction2 extends ActionSupport {/*** */private static final long serialVersionUID = 1L;// 对象1private User u;public void setU(User u) {this.u = u;}public User getU() {return u;}// 对象2private User u2;public void setU2(User u2) {this.u2 = u2;}public User getU2() {return u2;}@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubSystem.out.println(u);System.out.println(u2);return "ok";}
}
<action name="param2" class="com.test.param.ParamAction2"><result name="ok">/index.jsp</result>
</action>
可用于多对象
浏览器url需要指明对象
http://localhost:8080/txkt/P/param2.action?u2.sid=001&u2.sname=“zhangsan”&u2.age=18
方法三
实现 ModelDriven<>方法,用的比较少,局限性比较大。
ParamAction3.java
package com.test.param;import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;public class ParamAction3 extends ActionSupport implements ModelDriven<User>{/*** */private User user=new User();private static final long serialVersionUID = 1L;@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubreturn "ok";}@Overridepublic User getModel() {// TODO Auto-generated method stubreturn user;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}
}
5、Action接收集合数组Map的情况
(1)简单数组
ParamAction4.java
package com.test.param;import java.util.Arrays;import com.opensymphony.xwork2.ActionSupport;public class ParamAction4 extends ActionSupport{/*** */private static final long serialVersionUID = 1L;private String[] hobby;public String[] getHobby() {return hobby;}public void setHobby(String[] hobby) {this.hobby = hobby;}@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubSystem.out.println(Arrays.asList(hobby));return NONE;}
}
<action name="param4" class="com.test.param.ParamAction4"><result>/index.jsp</result>
</action>
浏览器输入:http://localhost:8080/txkt/P/param4.action?hobby=“001”&hobby=“002”&hobby=“003”
(2)对象数组
User类(属性封装类)
package com.test.param;public class User {private Integer sid;private String sname;private Integer age;public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Integer getSid() {return sid;}public void setSid(Integer sid) {this.sid = sid;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "学号:"+sid+" 姓名:"+sname+" 年龄:"+age;}
}
ParamAction5.java
package com.test.param;import java.util.List;import com.opensymphony.xwork2.ActionSupport;public class ParamAction5 extends ActionSupport{private static final long serialVersionUID = 1L;private List<User> list;public List<User> getList() {return list;}public void setList(List<User> list) {this.list = list;}@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubSystem.out.println(list);return NONE;}
}
<action name="param5" class="com.test.param.ParamAction5"><result>/index.jsp</result>
</action>
test.jsp负责调用
test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>对象数组</title>
</head>
<body><h2>复杂类型表单接收测试</h2><form action="<%=request.getContextPath()%>/P/param5.action" method="post"><input type="text" name="list[0].sname" value="张三"><br><input type="text" name="list[1].sname" value="李四"><br><input type="text" name="list[0].sid" value="001"><br><input type="text" name="list[1].sid" value="002"><br><input type="text" name="list[0].age" value="22"><br><input type="text" name="list[1].age" value="21"><br><input type="submit"></form>
</body>
</html>
(3)Map数组
User类(属性封装类)
package com.test.param;public class User {private Integer sid;private String sname;private Integer age;public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Integer getSid() {return sid;}public void setSid(Integer sid) {this.sid = sid;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "学号:"+sid+" 姓名:"+sname+" 年龄:"+age;}
}
ParamAction6.java
package com.test.param;import java.util.List;
import java.util.Map;import com.opensymphony.xwork2.ActionSupport;public class ParamAction6 extends ActionSupport{private static final long serialVersionUID = 1L;private Map<String, User> map;public Map<String, User> getMap() {return map;}public void setMap(Map<String, User> map) {this.map = map;}@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubSystem.out.println(map);return NONE;}
}
<action name="param6" class="com.test.param.ParamAction6"><result>/index.jsp</result></action>
由test2.jsp调用
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>对象数组</title>
</head>
<body><h2>复杂类型表单接收测试</h2><form action="<%=request.getContextPath()%>/P/param6.action" method="post"><input type="text" name="map['a'].sname" value="张三"><br><input type="text" name="map['b'].sname" value="李四"><br><input type="submit"></form>
</body>
</html>
Struts2进阶版相关推荐
- 特朗普“模仿”奥巴马?进阶版换脸技术DeepFakes来了
整理 | 费棋 出品 | AI科技大本营 DeepFakes,这种能够移花接木的技术,它能将图像或视频中把一张脸替换成另一张脸. 去年 12 月,一个名 Reddit 用户用 DeepFakes 技术 ...
- 移动端页面自适应解决方案—rem布局(进阶版)
之前的一篇<手机端页面自适应解决方案-rem布局>随着时间的推移,该方案已然过时,故为大家介绍一个目前我极力推荐使用的,更加完美的方案--rem布局(进阶版) 该方案使用相当简单,把下面这 ...
- 36篇博文带你学完opencv :python+opencv进阶版学习笔记目录
基础版学习笔记传送门 36篇博文带你学完opencv :python3+opencv学习笔记汇总目录(基础版) 进阶版笔记 项目 opencv进阶学习笔记1: 调用摄像头用法大全(打开摄像头,打开摄像 ...
- Tensorflow详解保存模型(进阶版一):如何有选择的保存变量
当然掌握了基础版还不够,我们来看一下进阶版一:如何有选择的保存变量: 这里还要另外涉及两个函数: tf.variable_scope("xxx") 和 tf.get_variabl ...
- kaggle (02) - 房价预测案例(进阶版)
房价预测案例(进阶版) 这是进阶版的notebook.主要是为了比较几种模型框架.所以前面的特征工程部分内容,我也并没有做任何改动,重点都在后面的模型建造section Step 1: 检视源数据集 ...
- c++ 三次多项式拟合_线性回归进阶版,多项式线性回归讲解与实现(附完整代码)...
每天给小编五分钟,小编用自己的代码,带你轻松学习深度学习!本文将会带你做完一个深度学习进阶版的线性回归---多项式线性回归,带你进一步掌握线性回归这一深度学习经典模型,然后在此基础上,小编将在下篇文章 ...
- 蓝桥杯 入门训练 A+B问题进阶版(两个3000位数的加法)
自古码农出少年,年年都有"A+B" 自古码农出少年,年年都有"A+B" 自古码农出少年,年年都有"A+B" 问题描述 输入A.B,输出A+B ...
- python学习-- django 2.1.7 ajax 请求 进阶版
#原来版本 $.get("/add/",{'a':a,'b':b}, function(ret){ $('#result').html(ret)}) #进阶版 $.get(&qu ...
- 手机端页面自适应解决方案—rem布局进阶版
旧版rem布局 <手机端页面自适应解决方案-rem布局>, 此方案仅适用于移动端web 文章底部常见问题说明第四条,笔者已给出一个相当便捷的解决方案,欢迎留言交流.(2017/9/9) 该 ...
最新文章
- insert语句让我学会的两个MySQL函数
- linux avahi-daemon进程 网络服务 简介
- 详解JavaScript中的this
- IC/RFID/NFC 关系与区别
- oracle网络公开课《存储技术》课件和视频共享下载
- 如何用深度学习进行CT影像肺结节探测(附有基于Intel Extended Caffe的3D Faster RCNN代码开源)
- RUNOOB python练习题9 如何在代码中加入砸瓦鲁多
- PHP--去除字符串首尾空格
- 电信级的RSA加密后的密码的破解方法
- 百度分享自定义内容和图片
- IOS socket编程--Asyncsocket
- ubuntu下opencv和qt的安装配置
- sql查询非ascii字符_SQL替换:如何在SQL Server中替换ASCII特殊字符
- java des 加密 字符串_Java使用DES加密字符串
- C++实现数组类模板
- java反编译 编译_5个最佳Java反编译器
- leaflet接入百度影像地图(leaflet篇.34)
- 虚拟机安装centos7
- CF1375G Tree Modification
- 传统的人事管理与人力资源管理有什么区别,后者有了什么新突破?