Struts2访问Servlet的API

完全解耦合的方式

  • 编写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属性 :页面跳转的类型。
  1. dispatcher:默认值,请求转发。(Action转发JSP)
  2. redirect:重定向。(Action重定向JSP)
  3. chain:转发。(Action转发Action)
  4. redirectAction :重定向。(Action重定向Action)
  5. stream:Struts2中提供文件下载的功能。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值