Struts2 Part1

xiaoxiao2021-02-28  6

原作者:尚硅谷-佟刚


基本配置:

<?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:包,struts2使用package 来组织模块 name:用于其他包应用当前的包 extends:所继承的包(包括:所有配置) namespace:默认值 "/" 非默认 值:http://localhost:8080/contextPath/namespace/actionName.ac tion --> <package name="helloworld" namespace="/atguigu" extends="struts-default"> <!-- 配置一个action: 一个struts2的请求就是一个action name:对应一个struts2的请求的名字,不包含"/"和扩展名 默认:class:com.opensymphony.xwork2.ActionSupport method:execute 默认:result:结果 name:success type:dispatcher(转发) --> <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(){ //1.向application中加入一个属性:applicationKey2 - applicationValue2 application.put("applicationKey2","applicationValue2"); //2.从application中读取属性date,并打印 System.out.println(application.get("date")); //3.session session.put("sessionKey2","sessionValue2"); //4.request 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"; } }

配置结果响应类型


<!-- result:表示结果的响应类型 --> <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> <!-- 重定向到一个Action --> <result name="index" type="redirectAction"> <param name="actionName">testAction</param> <param name="namespace">/atguigu</param> </result> <!-- 通过redirect 的响应类型也可以便捷的实现redirectAction的功能! <result name="index" type="redirect">/atguigu/testAction.do</result> --> <!-- 转发到一个Action --> <result name="test" type="chain"> <param name="actionName">testAction</param> <param name="namespace">/atguigu</param> </result> <!-- 不能通过type="dispatcher" 的方式转发到一个Action <result name="test" type="dispatcher">/atguigu/testAction.do</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>
转载请注明原文地址: https://www.6miu.com/read-1150063.html

最新回复(0)