一、访问ServletAPI的三种方式

方式1:通过让Action类去实现感知接口.

此时项目依赖:servlet-api.jar.

  • ServletRequestAware:感知HttpServletRequest对象;
  • ServletResponseAware:感知HttpServletResponse对象;
  • ServletSessionAware:感知HttpSession对象;
public class ServletApiAction1 extends ActionSupport implements ServletRequestAware{
private static final long serialVersionUID = 1L; private HttpServletRequest request;
@Override
public String execute() throws Exception {
//获取请求参数
System.out.println("HHH" + request.getParameter("name"));
return SUCCESS;
}
//注意这里依赖于servlet-api.jar
public void setServletRequest(HttpServletRequest req) {
this.request = req;
}
}

方式二:使用ServletActionContext类,该类提供很多静态方法可以返回Servlet API对象

public class ServletApiAction2 extends ActionSupport{
private static final long serialVersionUID = 1L; @Override
public String execute() throws Exception {
//获取请求参数
System.out.println("objk" + ServletActionContext.getRequest().getParameter("name"));
//通过请求得到session对象
ServletActionContext.getRequest().getSession().setAttribute("sessionKey", "我是session");
//得到响应对象
ServletActionContext.getResponse().sendRedirect("/view/welcome.jsp");
return NONE;
}
}

方式3.使用ActionContext类,本身是Struts2对Servlet API的封装

ActionContext使用了ThreadLocal模式,所以说是线程安全的

实际得到的都是map可以直接向map中添加数据或者获取数据

public class ServletApiAction3 extends ActionSupport{
private static final long serialVersionUID = 1L; @Override
public String execute() throws Exception {
//获取请求参数
Map<String, Object> parameters = ActionContext.getContext().getParameters();
System.out.println(parameters); //request作用域
ActionContext.getContext().put("requestName", "requestValue");
//Session作用域
ActionContext.getContext().getSession().put("sessionName", "sessionValue");
//application作用域
ActionContext.getContext().getApplication().put("applicationName", "applicationValue");
return SUCCESS;
}
}

二、获取请求参数的三种方式

方式一:第一种:Action本身作为Model对象,通过setter方法封装(属性注入)

对属性提供setter方法,拦截器会自动给调用方法把参数设置给属性

public class LoginAction1 extends ActionSupport {
private static final long serialVersionUID = 1L; private String username;
private String password; public void setUsername(String username) {
this.username = username;
} public void setPassword(String password) {
this.password = password;
} public String execute() throws Exception {
System.out.println(username + "," + password);
return NONE;
}
}

方式二:创建独立Model对象,页面通过ognl表达式封装(属性注入)

把请求参数先封装成一个对象,例如把username 和password封装成了User对象

public class LoginAction2 extends ActionSupport {
private static final long serialVersionUID = 1L; private User user;
/**
* jsp中的 user.username 用action对象调用getUser()得到user对象然后给属性设置值
*/
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute() throws Exception {
System.out.println(user);
return NONE;
}
}

此时jsp界面这样写

	<h3>登录页面  方式二</h3>
<form action="/params/login2" method="post">
账号 <input type="text" name="user.username"/><br/>
密码<input type="text" name="user.password"/><br/>
<input type="submit" value=" 登录 ">
</form>

方式三:使用ModelDriven接口,对请求数据进行封装(模型驱动)

public class LoginAction3 extends ActionSupport implements ModelDriven<User>{
private static final long serialVersionUID = 1L; //必须自己创建对象
private User user = new User();
@Override
public User getModel() {
return user;
}
@Override
public String execute() throws Exception {
System.out.println(user);
return NONE;
}
}

struts2访问ServletAPI方式和获取参数的方式的更多相关文章

  1. 使用HTTP协议向服务器传参的方式及django中获取参数的方式

    使用HTTP协议向服务器传参的四种方式 URL路径携带参数,形如/weather/beijing/2018; 查询字符串(query string),形如key1=value1&key2=va ...

  2. DRF框架获取参数的方式

    DRF获取参数的方式 例如url url(r'^demo/(?P<word>.*)/$', DemoView.as_view()) 在类视图中获取参数 url:http://127.0.0 ...

  3. Struts2访问ServletAPI的三种方式

    web应用中需要访问的ServletAPI,通常只有HttpServletRequest,HttpSession,ServletContext三个,这三个接口分别代表jsp内置对象中的request, ...

  4. Json 后台转对象的方式或者获取属性值方式。

    类似这类的 json字符串 后台转成 model 或者取其中一个属性值. 需要去掉前后引号 以及将转义字符去掉.空格代替 resoult = resoult.Substring(0, resoult. ...

  5. koa通过get请求获取参数

    1.通过get方式请求获取参数的方式有两种 通过上下文获取 通过request获取 获得的格式有两种:query与querystring 注意:querystring为小写,驼峰格式会导致无法获取 2 ...

  6. 2018.11.21 struts2获得servletAPI方式及如何获得参数

    访问servletAPI方式 第一种:通过ActionContext (重点及常用 都是获得原生对象) 原理 Action配置 被引入的配置文件 在页面调用取值 第二种:通过ServletAction ...

  7. Struts2-整理笔记(四)Action生命周期、如何获取参数(3种)、集合类型参数封装

    一.Action生命周期 每次请求到来时,都会创建一个新的Action实例 Action是线程安全的,可以使用成员变量接收参数 二.获取参数的方式(3种) 1.属性驱动获得参数 每次请求Action时 ...

  8. python DRF获取参数介绍

    DRF获取参数的方式 例如url url(r'^demo/(?P<word>.*)/$', DemoView.as_view()) 在类视图中获取参数 url:http://127.0.0 ...

  9. springMVC --@RequestParam注解(后台控制器获取参数)

    在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter("name"),另外一种是用注解@RequestParam直接获取. 1.获 ...

随机推荐

  1. LncRNA

    简介:长链非编码RNA(Long non-coding RNA, lncRNA)通过多种机制发挥其生物学功能, 这些机制包括基因印记.染色质重塑.细胞周期调控.剪接调控.mRNA降解和翻译调控等.ln ...

  2. android--------根据文件路径使用File类获取文件相关信息

    Android通过文件路径如何得到文件相关信息,如 文件名称,文件大小,创建时间,文件的相对路径,文件的绝对路径等. 如图: public class MainActivity extends Act ...

  3. c++中的new和delete

    对于计算机程序设计而言,变量和对象在内存中的分配都是编译器在编译程序时安排好的,这带来了极大的不便,如数组必须大开小用,指针必须指向一个已经存在的变量或对象.对于不能确定需要占用多少内存的情况,动态内 ...

  4. UVA-10710 Skyscraper Floors (找规律+幂取模)

    题目大意:题目中给了一种数的定义,根据定义,让判断一个给定的数是不是这种数.题中叫这种数为吉米数,定义如下:对序列1,2,3,,,,n,做n-1次SF变换(对该变换的解释在下文),如果能得到原序列,则 ...

  5. OC @property @synthesize和id

    文顶顶   OC语言@property @synthesize和id OC语言@property @synthesize和id 一.@property @synthesize关键字 注意:这两个关键字 ...

  6. python 利用quick sort思路实现median函数

    # import numpy as np def median(arr): #return np.median(arr) arr.sort() return arr[len(arr)>>1 ...

  7. win7 安装express

    1.以管理员身份打开cmd(避免出错) npm install -g express-generator@4 Start the server: npm start 链接,github官网说明 htt ...

  8. popen strtok 函数的使用

    FILE * popen ( const char * command , const char * type ); int pclose ( FILE * stream );   type 参数只能 ...

  9. en_e outtest2

    e 1◆ e i: ə ɜː e I   2◆ ei ey ei i:   3◆ eer ɪə   4◆ ee i:   5◆ er ə   6◆ ere ɪə eə   7◆ ea ɪə i: ə ...

  10. python3.6 连接mysql数据库

    ==================pymysql=================== 由于 MySQLdb 模块还不支持 Python3.x,所以 Python3.x 如果想连接MySQL需要安装 ...