目录
备注 :完全解耦合的方式只能获得代表request、session、application的数据的Map集合,不能操作这些对象的本身的方法。
备注 :原生的方式可以操作域对象的数据,同时也可以获得对象的方法。
备注 :Servlet是单例的,多个程序访问同一个Servlet只会创建一个Servlet的实例。Action是多例的,一次请求,创建一个Action的实例(不会出现线程安全的问题)。
方式一:完全解耦合的方式
1 、编写 jsp 页面
demo1.jsp
<%@ 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>
<h1>Struts2访问Servlet的API方式</h1>
<h3>访问方式一:完全解耦合的方式</h3>
<form action="${pageContext.request.contextPath }/requestDemo1.action" method="post">
姓名:<input type="text" name="name"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
demo2.jsp
<%@ 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>
<h1>显示域对象数据</h1>
${requestName }
${sessionName }
${applicationName }
</body>
</html>
2 、编写 Action 类
package czm.struts2.demo1;
import java.util.Arrays;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* Struts2访问Servlet的API方式一:完全解耦合的方式
* @author ASUS
*
*/
public class RequestDemo1 extends ActionSupport{
@Override
public String execute() throws Exception {
//一 、接收参数
//利用Struts2中ActionContext对象
ActionContext context = ActionContext.getContext();
//调用ActionContext中的方法
Map<String,Object> map = context.getParameters(); //key值为Object类型
for (String key : map.keySet()) {
String[] values = (String[])map.get(key); //将key值Object类型转换为String数组
System.out.println(key+" "+Arrays.toString(values));
}
//二 、向域对象中存入数据
context.put("requestName", "request数据"); //相当于request.setAttribute();
context.getSession().put("sessionName", "session数据"); //相当于session.setAttribute();
context.getApplication().put("applicationName", "application数据"); //相当于application.setAttribute();
return SUCCESS;
}
}
3 、编写 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" extends="struts-default" namespace="/">
<action name="requestDemo1" class="czm.struts2.demo1.RequestDemo1">
<result name="success">/demo1/demo2.jsp</result>
</action>
</package>
</struts>
4 、访问 JSP 页面
5 、输入数据,点击登录
获取到输入信息:
获取到域中对象 :
备注 :完全解耦合的方式只能获得代表request、session、application的数据的Map集合,不能操作这些对象的本身的方法。
方式二:原生的方式
1 、编写 JSP 页面
demo1.jsp
<%@ 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>
<h1>Struts2访问Servlet的API方式</h1>
<h3>访问方式一:完全解耦合的方式</h3>
<form action="${pageContext.request.contextPath }/requestDemo1.action" method="post">
姓名:<input type="text" name="name"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
<h3>访问方式二:使用原生的方式</h3>
<form action="${pageContext.request.contextPath }/requestDemo2.action" method="post">
姓名:<input type="text" name="name"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
demo2.jsp
<%@ 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>
<h1>显示域对象数据</h1>
${requestName }
${sessionName }
${applicationName }
</body>
</html>
2 、编写 Action 类
package czm.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;
/**
* Struts2访问Servlet的API方式二 :原生的方式
* @author ASUS
*
*/
public class RequestDemo2 extends ActionSupport {
@Override
public String execute() throws Exception {
// 一 、接收数据
//通过 ServletActionContext 直接获得 request对象
HttpServletRequest request = ServletActionContext.getRequest();
Map<String, String[]> map = request.getParameterMap();
for (String key : map.keySet()) {
String[] values = map.get(key);
System.out.println(key+" "+Arrays.toString(values));
}
// 二 、向域对象中存入数据
//向 request中保存数据
request.setAttribute("requestName", "原生方式获取request数据");
//向session中保存数据
request.getSession().setAttribute("sessionName", "原生方式获取session数据");
//向application中保存数据
ServletActionContext.getServletContext().setAttribute("applicationName", "原生方式获取application数据");
return SUCCESS;
}
}
3 、编写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" extends="struts-default" namespace="/">
<!-- 完全解耦方式配置 -->
<action name="requestDemo1" class="czm.struts2.demo1.RequestDemo1">
<result name="success">/demo1/demo2.jsp</result>
</action>
<!-- 原生方式配置 -->
<action name="requestDemo2" class="czm.struts2.demo1.RequestDemo2">
<result name="success">/demo1/demo2.jsp</result>
</action>
</package>
</struts>
4 、访问 JSP 页面
5 、输入数据,点击登录
获取到输入信息:
获取到域中对象 :
备注 :原生的方式可以操作域对象的数据,同时也可以获得对象的方法。
方式三:接口注入的方式
1 、编写 JSP 页面
demo1.jsp
<%@ 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>
<h1>Struts2访问Servlet的API方式</h1>
<h3>访问方式一:完全解耦合的方式</h3>
<form action="${pageContext.request.contextPath }/requestDemo1.action" method="post">
姓名:<input type="text" name="name"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
<h3>访问方式二:使用原生的方式</h3>
<form action="${pageContext.request.contextPath }/requestDemo2.action" method="post">
姓名:<input type="text" name="name"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
<h3>访问方式三:接口注入的方式</h3>
<form action="${pageContext.request.contextPath }/requestDemo3.action" method="post">
姓名:<input type="text" name="name"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
demo2.jsp
<%@ 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>
<h1>显示域对象数据</h1>
${requestName }
${sessionName }
${applicationName }
</body>
</html>
2 、编写 Action 类
package czm.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;
/**
* Struts2访问Servlet的API方式三 :接口注入的方式
* @author ASUS
*
*/
public class RequestDemo3 extends ActionSupport implements ServletRequestAware,ServletContextAware{
private HttpServletRequest request;
private ServletContext context;
@Override
public String execute() throws Exception {
// 一 、接收参数
//通过接口注入的方式获得 request对象
Map<String, String[]> map = request.getParameterMap();
for (String key : map.keySet()) {
String[] values = map.get(key);
System.out.println(key+" "+Arrays.toString(values));
}
// 二 、向域对象中存入数据
//向 request中保存数据
request.setAttribute("requestName", "接口注入方式获取request数据");
//向session中保存数据
request.getSession().setAttribute("sessionName", "接口注入方式获取session数据");
//向application中保存数据
context.setAttribute("applicationName", "接口注入方式获取application数据");
return super.execute();
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
@Override
public void setServletContext(ServletContext context) {
this.context = context;
}
}
3 、编写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" extends="struts-default" namespace="/">
<!-- 完全解耦方式配置 -->
<action name="requestDemo1" class="czm.struts2.demo1.RequestDemo1">
<result name="success">/demo1/demo2.jsp</result>
</action>
<!-- 原生方式配置 -->
<action name="requestDemo2" class="czm.struts2.demo1.RequestDemo2">
<result name="success">/demo1/demo2.jsp</result>
</action>
<!-- 接口注入方式配置 -->
<action name="requestDemo3" class="czm.struts2.demo1.RequestDemo3">
<result name="success">/demo1/demo2.jsp</result>
</action>
</package>
</struts>
4 、访问 JSP 页面
5 、输入数据,点击登录
获取到输入信息:
获取到域中对象 :