完全解耦合的方式
- 编写JSP
<h2>方式一:完全解耦合的方式</h2>
<form action="${pageContext.request.contextPath }/Action01.action"method="post">
姓名:<input name="name" type="text"/><br>
密码:<input name="password" type="password"/><br>
<input type="submit" value="提交"/><br>
</form>
- 编写Action
public class Action01 extends ActionSupport {
@Override
public String execute() throws Exception {
//1. 接收参数
//利用Struts2中对象ActionContext对象
ActionContext context = ActionContext.getContext();
Map<String, Object> map = context.getParameters();
for (String key : map.keySet()) {
String[] object = (String[])map.get(key);
System.out.println(key+ " "+Arrays.toString(object));
}
//2. 向域对象中存入数据
context.put("reqName", "reqValue");//相当于request.setAttribute();
context.getSession().put("sessName", "sessValue");//相当于session.setAttribute();
context.getApplication().put("appName", "appValue");//相当于application.setAttribute();
return SUCCESS;
}
}
这种方法只能获得代表request、session、application的数据的Map集合,不能操作这些对象的本身的方法
使用Servlet的API的原生方式****
- 编写JSP
<h2>方式二:使用原生的方式访问</h2>
<form action="${pageContext.request.contextPath }/Action02.action"method="post">
姓名:<input name="name" type="text"/><br>
密码:<input name="password" type="password"/><br>
<input type="submit" value="提交"/><br>
</form>
- 编写Action
public class Action02 extends ActionSupport{
@Override
public String execute() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
Map<String, String[]> map = request.getParameterMap();
for (String key : map.keySet()) {
String[] s = map.get(key);
System.out.println(key+" "+Arrays.toString(s));
}
request.setAttribute("reqName", "reqValue");
request.getSession().setAttribute("sessName", "sessValue");
ServletActionContext.getServletContext().setAttribute("appName", "appValue");
return SUCCESS;
}
}
这种方法可以操作域对象的数据,同时也可以获得对象的方法
接口注入的方式
- 编写JSP
<h2>方式二:使用原生的方式访问</h2>
<form action="${pageContext.request.contextPath }/Action03.action"method="post">
姓名:<input name="name" type="text"/><br>
密码:<input name="password" type="password"/><br>
<input type="submit" value="提交"/><br>
</form>
- 编写Action
/**
* 访问Servlet的API的方式三:接口注入的方式
* @author jt
*
*/
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<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("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;
}
}
注:
Servlet是单例的,多个程序访问同一个Servlet只会创建一个Servlet的实例。Action是多例的,一次请求,创建一个Action的实例,不会出现线程安全问题
全局结果页面
<global-results>
<result>success.jsp</result>
</global-results>
result标签的配置
result标签用于配置页面的跳转。在result标签上有两个属性:
- name属性 :逻辑视图的名称。默认值:success
- type属性 :页面跳转的类型。
- dispatcher:默认值,请求转发。(Action转发JSP)
- redirect:重定向。(Action重定向JSP)
- chain:转发。(Action转发Action)
- redirectAction :重定向。(Action重定向Action)
- stream:Struts2中提供文件下载的功能。