在struts2中使用servletAPI的几种方式

 

struts2的Action放弃了request,response等ServletAPI,.使得在业务层上更加独立,在有时候使用struts2进行Web开发的时候,不可避免的要在action中使用servletAPI,下面就是几种在struts2中使用servletAPI的学习笔记

(JSP,xml详细配置在最后)

  1. 获取session  Map类型(解耦)

//调用servletAPI获得session,name存入session    ActionContext.getContext().getSession().put("user", name);

//登出删除sessionuser

   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页面的注释中添加了 ${}

              只需要将注释里面的${}去掉就正常了

替换 struts2 的 javax.servlet 为 jakarta.servlet几种方案如下: 1. 使用 Maven Dependency Plugin 进行替换: 使用 Maven Dependency Plugin 的 versions:use-latest-versions 和 versions:use-latest-releases 命令可以自动将 pom.xml 文件的依赖版本更新为最新版本,其也包括 javax.servlet 替换为 jakarta.servlet。具体操作步骤可以参考上一个答案。 2. 手动替换 pom.xml 文件的依赖: 手动修改 pom.xml 文件,将其的 javax.servlet 替换为 jakarta.servlet。例如: ``` <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> ``` 替换为: ``` <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> ``` 3. 使用 Maven BOM 进行替换: 使用 Maven BOM (Bill of Materials) 可以将所有依赖的版本号都集在一个地方进行管理,从而方便进行统一的版本升级和依赖替换。例如,可以添加以下依赖: ``` <dependencyManagement> <dependencies> <dependency> <groupId>jakarta.platform</groupId> <artifactId>jakarta.jakartaee-api</artifactId> <version>9.0.0</version> <scope>provided</scope> <type>pom</type> </dependency> </dependencies> </dependencyManagement> ``` 然后在项目引用该 BOM: ``` <dependencies> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> </dependency> </dependencies> ``` 这样就可以自动将 javax.servlet 替换为 jakarta.servlet
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值