原作者:尚硅谷-佟刚
基本配置:
<?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="helloworld" namespace="/atguigu" extends="struts-default">
<action name="product-input"
class="com.opensymphony.xwork2.ActionSupport"
method="execute">
<result name="success" type="dispatcher">/WEB-INF/pages/input.jsp
</result>
</action>
</package>
</struts>
与Servlet API解耦的访问方式
package
com.atguigu.struts2
.action
import java
.util.Map
import org
.apache.struts2
.dispatcher.SessionMap
import
com.opensymphony.xwork2
.ActionContext
public class TestActionContextAction {
public String execute(){
//获取ActionContext对象
//ActionContext是Action的上下文,可以从中获取到当前Action需要的一切信息
ActionContext actionContext = ActionContext
.getContext()
//
1.获取application对应的Map ,并向其中添加一个属性
Map<String, Object> applicationMap = actionContext
.getApplication()
//设置属性
applicationMap
.put(
"applicationKey",
"applicationValue")
//获取属性
Object date = applicationMap
.get(
"date")
System
.out.println(
"date:"+date)
//
2.session
Map<String, Object> sessionMap = actionContext
.getSession()
sessionMap
.put(
"sessionKey",
"sessionValue")
System
.out.println(sessionMap
.getClass())
if(sessionMap instanceof SessionMap){
SessionMap<String,Object> sm=(SessionMap) sessionMap
sm
.invalidate()
System
.out.println(
"session失效了....")
}
//
3.request
//ActionContext中并没有提供getRequest方法来获取request对应的Map
//需要手工调用get()方法,传入request字符串来获取
Map<String,Object> requestMap=(Map<String, Object>) actionContext
.get(
"request")
requestMap
.put(
"requestKey",
"requestValue")
//
4.获取请求参数对应的Map,并获取指定的参数值
//键:请求参数的名字,值:请求参数的值对应的字符串数组
//注意:
1.getParameters()返回值为Map<String,Object> 而不是 Map<String,String[]>
//
2.parameters这个Map只能读,不能写入数据,如果写入,但不出错,但也不起作用!
Map<String,Object> parameters = actionContext
.getParameters()
String[] names=(String[]) parameters
.get(
"name")
System
.out.println(names[
0])
parameters
.put(
"age",
100)
return
"success"
}
}
package com.atguigu.struts2.action;
import java.util.Map;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.ParameterAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
public class TestAwareAction implements ApplicationAware,SessionAware,RequestAware,ParameterAware{
public String
execute(){
application.put(
"applicationKey2",
"applicationValue2");
System.out.println(application.get(
"date"));
session.put(
"sessionKey2",
"sessionValue2");
request.put(
"requestKey2",
"requestValue2");
String[] vals = parameters.get(
"name");
System.out.println(vals[
0]);
parameters.put(
"age",
new String[]{
"33"});
return "success";
}
private Map<String,Object> application;
private Map<String,String[]> parameters;
private Map<String,Object> request;
private Map<String,Object> session;
@Override
public void setApplication(Map<String, Object> application) {
this.application=application;
}
@Override
public void setParameters(Map<String, String[]> parameters) {
this.parameters=parameters;
}
@Override
public void setRequest(Map<String, Object> request) {
this.request=request;
}
@Override
public void setSession(Map<String, Object> session) {
this.session=session;
}
}
与 Servlet 耦合的访问方式
package com.atguigu.struts2.action;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
public class TestServletActionContextAction {
/**
* ServletActionContext:可以从中获取到当前Action对象需要的一切Servlet API相关的对象.
*
* 常用方法:
* 1. 获取HttpServletRquest:ServletActionContext.getRequest();
* 2. 获取HttpSession:ServletActionContext.getRequest().getSession()
* 3. 获取ServletContext:ServletActionContext.getServletContext()
*
*/
@SuppressWarnings(
"unused")
public String
execute(){
HttpServletRequest request=ServletActionContext.getRequest();
HttpSession session=ServletActionContext.getRequest().getSession();
ServletContext servletContext=ServletActionContext.getServletContext();
System.out.println(
"execute....");
return "success";
}
}
package com.atguigu.struts2.action;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;
/**
*通过实现ServletXxxAware接口的方式可以由Struts2注入
*需要的Servlet相关的对象
* ServletRequestAware:注入HttpSevletRequest对象(比较常用)
* SevletContextAware:注入ServletContext对象 (比较常用)
* ServletResponseAware:注入HttpServletResponse对象
*/
public class TestServletAwareAction implements ServletRequestAware,ServletContextAware,ServletResponseAware{
@Override
public void setServletResponse(HttpServletResponse response) {
System.out.println(response);
}
private ServletContext context;
@Override
public void setServletContext(ServletContext context) {
this.context=context;
System.out.println(context);
}
@Override
public void setServletRequest(HttpServletRequest request) {
System.out.println(request);
}
public String
execute(){
System.out.println(
"ServletContext:" +context);
return "success";
}
}
配置结果响应类型
<action name="testResult" class="com.atguigu.struts2.action.TestResultAction">
<result name="success" type="dispatcher">/success.jsp
</result>
<result name="login" type="redirect">/login.jsp
</result>
<result name="index" type="redirectAction">
<param name="actionName">testAction
</param>
<param name="namespace">/atguigu
</param>
</result>
<result name="test" type="chain">
<param name="actionName">testAction
</param>
<param name="namespace">/atguigu
</param>
</result>
</action>
</package>
<package name="testPackage" namespace="/atguigu" extends="struts-default">
<action name="testAction" class="com.atguigu.struts2.action.TestAction">
<result>/success.jsp
</result>
</action>
</package>
通配符*的使用(极大地简化了配置文件)
<action
name=
"UserAction-*" class=
"com.atguigu.struts2.action.UserAction"
method=
"{1}">
<
result name=
"{1}-success">/success.jsp</
result>
</action>
代替:
<action
name=
"UserAction-save" class=
"com.atguigu.struts2.action.UserAction"
method=
"save">
<
result name=
"save-success">/success.jsp</
result>
</action>
<action
name=
"UserAction-test" class=
"com.atguigu.struts2.action.UserAction"
method=
"test">
<
result name=
"test-success">/success.jsp</
result>
</action>
<action
name=
"UserAction-update" class=
"com.atguigu.struts2.action.UserAction"
method=
"update">
<
result name=
"update-success">/success.jsp</
result>
</action>
<action
name=
"UserAction-delete" class=
"com.atguigu.struts2.action.UserAction"
method=
"delete">
<
result name=
"delete-success">/success.jsp</
result>
</action>
<action
name=
"UserAction-query" class=
"com.atguigu.struts2.action.UserAction"
method=
"query">
<
result name=
"query-success">/success.jsp</
result>
</action>