在action中使用Servlet API,推荐使用第三种比较简单

表单页面如下:

<%@ 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>
<form action="${pageContext.request.contextPath }/user/login1.action" method="post">
	请输入您的姓名: <input type="text" name="username" /> 
	<input type="submit" value="提交" />
</form>
<hr/>
<form action="${pageContext.request.contextPath }/user/login2.action" method="post">
	请输入您的姓名: <input type="text" name="username" /> 
	<input type="submit" value="提交" />
</form>
<hr/>
<form action="${pageContext.request.contextPath }/user/login3.action" method="post">
	请输入您的姓名: <input type="text" name="username" /> 
	<input type="submit" value="提交" />
</form>
</body>
</html>

1、 在Action 中解耦合方式 间接访问 Servlet API  --------- 使用 ActionContext对象

        在struts2 中 Action API 已经与 Servlet API 解耦合 (没有依赖关系 )
        * Servlet API 常见操作 : 表单提交请求参数获取,向request、session、application三个范围存取数据 

         actionContext = ActionContext.getContext();
        1) actionContext.getParameters(); 获得所有请求参数Map集合 
        2) actionContext.put("company", "****"); / actionContext.get("company") 对request范围存取数据 
        3) actionContext.getSession(); 获得session数据Map,对Session范围存取数据

        4) actionContext.getApplication(); 获得ServletContext数据Map,对应用访问存取数据 

具体代码如下:

public class LoginAction1 extends ActionSupport{
	@Override
	public String execute() throws Exception {
		ActionContext actionContext = ActionContext.getContext();
		// 1、 获取请求参数
		Map<String, Object> parameters = actionContext.getParameters();
		String[] value = (String[]) parameters.get("username"); // request.getParameter("username")
		System.out.println("username : " +value[0]);
		
		// 2、读取request的Attribute
		actionContext.put("company", "**公司"); // request.setAttribute
		System.out.println(actionContext.get("company")); // request.getAttribute
		
		// 3、存取Session的Attribute
		Map<String, Object> sessionMap = actionContext.getSession();
		sessionMap.put("age", 20);// session.setAttribute
		System.out.println(sessionMap.get("age")); // session.getAttribute
		
		// 4 存取Application的Attribute
		Map<String, Object> applicationMap = actionContext.getApplication();
		applicationMap.put("info", "要下雨"); // application.setAttribute
		System.out.println(applicationMap.get("info")); // application.getAttribute
		
		return SUCCESS;
	}
}


2、 使用接口注入的方式,操作Servlet API (耦合)
        ServletContextAware : 注入ServletContext对象
        ServletRequestAware :注入 request对象
        ServletResponseAware : 注入response对象

        * 程序要使用哪个Servlet的对象,实现对应接口 
public class LoginAction2 extends ActionSupport implements ServletRequestAware, ServletContextAware {
	
	private HttpServletRequest request;
	private ServletContext context;

	@Override
	public String execute() throws Exception {
		// 1 获得请求参数 
		System.out.println(request.getParameter("username"));
		// 2 存取request
		request.setAttribute("company", "**公司");
		// 3 存取Session
		request.getSession().setAttribute("age", 18);
		// 4 存取Application
		context.setAttribute("info", "已经下雨了");
		
		return SUCCESS;
	}

	@Override
	// struts2框架会自动将request对象设置进来
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}

	@Override
	public void setServletContext(ServletContext context) {
		this.context = context;
	}
}


3、 在Action中直接通过 ServletActionContext 获得Servlet API
ServletActionContext.getRequest() : 获得request对象 (session)
ServletActionContext.getResponse() : 获得response 对象

ServletActionContext.getServletContext() : 获得ServletContext对象 

public class LoginAction3 extends ActionSupport{
	@Override
	public String execute() throws Exception {
		// 1 获得请求参数
		System.out.println(ServletActionContext.getRequest().getParameter("username"));
		// 2 保存request范围数据
		ServletActionContext.getRequest().setAttribute("company", "**公司");
		// 3 保存session 范围数据
		ServletActionContext.getRequest().getSession().setAttribute("age", 19);
		// 4 保存application范围数据
		ServletActionContext.getServletContext().setAttribute("info", "雨很大");
		
		return super.execute();
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值