struts2的Action放弃了request,response等ServletAPI,.使得在业务层上更加独立,在有时候使用struts2进行Web开发的时候,不可避免的要在action中使用servletAPI,下面就是几种在struts2中使用servletAPI的学习笔记
(JSP,xml详细配置在最后)
- 获取session Map类型(解耦)
//调用servletAPI获得session,将name存入session ActionContext.getContext().getSession().put("user", name); //登出删除session的user public String logout() { ActionContext.getContext().getSession().remove("user"); return "success"; }
|
输入账号密码后测试
点击退出在打开登陆成功的界面,用户名为空白,删除成功。
2.获取request Map类型(解耦)
//获取request Map req=(Map)ActionContext.getContext().get("request"); //获取Application Map application=ActionContext.getContext().getApplication(); //获取parameters Map parameters=ActionContext.getContext().getParameters(); //等于request中的request.getParameters("name"); //这里parameters.get("name")返回的是String数组需要转换下 System.out.println(((String[])parameters.get("name"))[0]); |
测试:
3.直接使用actioncontext获取Request类型
HttpServletRequest request=(HttpServletRequest)ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST); System.out.println(request.getParameter(name)); |
测试结果同上
4.通过耦合方式使用request
//步骤1实现ServletRequestAware接口 public class login2 implements ServletRequestAware //步骤2声明HttpServletRequest request; HttpServletRequest request; //步骤3实现setServletRequest方法 public void setServletRequest(HttpServletRequest request) { this.request=request; } //使用request request.getSession().setAttribute("user", name); System.out.println(request.getParameter("name")); |
测试结果也和上面的图一样
5.使用ServletActionContext获得request
//使用HttpServletRequest获得request HttpServletRequest request=ServletActionContext.getRequest(); request.getSession().setAttribute("user", name); System.out.println(request.getParameter("name")); |
以上就是我所学习的使用servletAPI的方式,只是举例了request一种,其他的如respons也一样方法。
Jsp页面
登陆页面
<form action="login.action" method="post"> 用户名:<input type="text" name="name"><br/> 密 码:<input type="password" name="pwd"><br/> <input type="submit" value="登陆"> </form> |
Login.jsp登陆成功
<h1>登陆成功!!</h1><br/> <a>用户名:${user } </a><br> <a href="logout.action">退出</a> |
Struts.xml
<package name="logindemo" extends="struts-default" namespace="/"> <action name="login" class="com.action.login2"> <result name="success">/login.jsp</result> <result name="error">/loginError.jsp</result> </action> <action name="logout" class="com.action.login2" method="logout"> <result name="success">/index.jsp</result> </action> </package> |
另外在jsp页面中碰到了一个奇怪的错误
Type Exception Report
Message javax.el.ELException: Failed to parse the expression [${}]
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
表达式解析异常,原因是在jsp页面的注释中添加了 ${}
只需要将注释里面的${}去掉就正常了