action中请求参数获取的两种方式

action中请求参数获取的两种方式

1.属性驱动? a.直接在 action 类中提供与请求参数匹配属性,提供 get/set 方法? b.在 action 类中创始一个 javaBean,对其提供 get/set ,在请求时页面上要进行修改,? 例如 user.username user.password ,要使用 ognl 表达式? 以上两种方式的优缺点:? 第一种比较简单,在实际操作我们需要将 action 的属性在赋值给模型(javaBean)去操作? 第二种:不需要在直接将值给 javaBean过程,因为直接将数据封装到了 javaBean? 中。它要 求在页面上必须使用 ognl 表达式,就存在页面不通用问题。2.模型驱动? 步骤:? 1.让 Action 类要实现一个指定接口 ModelDriven? 2.实例化模型对象(就是要 new 出来 javaBean)? 3.重写 getModel 方法将实例化的模型返回

    public class Login3Action extends ActionSupport implements ModelDriven<User> {
                 private User user = new User();
                 public User getModel() {
                    return user;
                }
            }
    优点:解决了属性驱动存在的问题
    缺点:一次只能封装一个model对象.      

以下为三个案例的struts.xml文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
?
<struts>
    <!-- 开启开发模式 -->
    <constant name="struts.devMode" value="true" />
    <package name="p1" extends="struts-default">
        <!-- 配置一个动作 -->
        <action name="sayHello" class="com.itheima.action.HelloAction" method="sayHello">
            <!-- 配置结果视图  -->
            <result name="success">/success.jsp</result>
        </action>
    </package>
?
    <package name="default" namespace="/" extends="struts-default">
        <action name="login" class="cn.itcast.action.LoginAction">
            <result name="failer">/login.jsp</result>
            <result type="redirect">/success.jsp</result>
        </action>
?
        <action name="login1" class="cn.itcast.action.Login1Action">
            <result name="failer">/login1.jsp</result>
            <result type="redirect">/success.jsp</result>
        </action>
?
        <action name="login2" class="cn.itcast.action.Login2Action">
            <result name="failer">/login2.jsp</result>
            <result type="redirect">/success.jsp</result>
        </action>
        <action name="login3" class="cn.itcast.action.Login3Action">
            <result name="failer">/login3.jsp</result>
            <result type="redirect">/success.jsp</result>
        </action>
    </package>
</struts>

方式一案例:

Login1Action.Java文件:

package cn.itcast.action;
?
import javax.servlet.http.HttpServletRequest;
?
import org.apache.struts2.ServletActionContext;
?
import com.opensymphony.xwork2.ActionSupport;
?
//获取请求参数  属性驱动  第一种,直接将action做为model
public class Login1Action extends ActionSupport {
     private String username;
     private String password;
     public String getUsername() {
        return username;
    }
     public void setUsername(String username) {
        this.username = username;
    }
     public String getPassword() {
        return password;
    }
     public void setPassword(String password) {
        this.password = password;
    }
?
    @Override
    public String execute() throws Exception {
        HttpServletRequest request = ServletActionContext.getRequest();
        // 2.判断用户名与密码是否正确
        if ("tom".equals(username) && "123".equals(password)) {
             request.getSession().setAttribute("username", username);
             return SUCCESS;
        } else {
            request.setAttribute("login.message", "用户名或密码错误");
            return "failer";
        }
    }
}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
     <title>My JSP ‘index.jsp‘ starting page</title>
  </head>
   <body>
    ${requestScope["login.message"] }<br>
    <form action="${pageContext.request.contextPath}/login1" method="post">
        username:<input type="text" name="username"><br>
        password:<input type="password" name="password"><br>
        <input type="submit" value="登录">
    </form>
  </body>
</html>
 

方式二案例:

Login2Action.java文件

package cn.itcast.action;
 import javax.servlet.http.HttpServletRequest;
 import org.apache.struts2.ServletActionContext;
 import cn.itcast.domain.User;
 import com.opensymphony.xwork2.ActionSupport;
 //获取请求参数  属性驱动  第二种,直接在action声明一个model
public class Login2Action extends ActionSupport {
     private User user;
     public User getUser() {
        return user;
    }
     public void setUser(User user) {
        this.user = user;
    }
     @Override
    public String execute() throws Exception {
        HttpServletRequest request = ServletActionContext.getRequest();
        // 2.判断用户名与密码是否正确
        if ("tom".equals(user.getUsername()) && "123".equals(user.getPassword())) {
             request.getSession().setAttribute("username", user.getUsername());
             return SUCCESS;
        } else {
            request.setAttribute("login.message", "用户名或密码错误");
            return "failer";
        }
    }
}

User.java文件:

package cn.itcast.domain;
 public class User {
     private String username;
     private String password;
     public String getUsername() {
        return username;
    }
     public void setUsername(String username) {
        this.username = username;
    }
     public String getPassword() {
        return password;
    }
     public void setPassword(String password) {
        this.password = password;
    }
     @Override
    public String toString() {
        return "User [username=" + username + ", password=" + password + "]";
    }
}

login2.jsp文件:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
     <title>My JSP ‘index.jsp‘ starting page</title>
  </head>
   <body>
    ${requestScope["login.message"] }<br>
    <form action="${pageContext.request.contextPath}/login2" method="post">
        username:<input type="text" name="user.username"><br>
        password:<input type="password" name="user.password"><br>
        <input type="submit" value="登录">
    </form>
  </body>
</html>

方式三案例: Login3Action.java文件:

package cn.itcast.action;
 import javax.servlet.http.HttpServletRequest;
 import org.apache.struts2.ServletActionContext;
 import cn.itcast.domain.User;
 import com.opensymphony.xwork2.ActionSupport;
 import com.opensymphony.xwork2.ModelDriven;
 //获取请求参数  模型驱动
public class Login3Action extends ActionSupport implements ModelDriven<User> {
     private User user = new User();
     public User getModel() {
        return user;
    }
     @Override
    public String execute() throws Exception {
        HttpServletRequest request = ServletActionContext.getRequest();
        // 2.判断用户名与密码是否正确
        if ("tom".equals(user.getUsername())
                && "123".equals(user.getPassword())) {
             request.getSession().setAttribute("username", user.getUsername());
             return SUCCESS;
        } else {
            request.setAttribute("login.message", "用户名或密码错误");
            return "failer";
        }
    }
 }

login3.jsp文件:

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
     <title>My JSP ‘index.jsp‘ starting page</title>
  </head>
   <body>
    ${requestScope["login.message"] }<br>
    <form action="${pageContext.request.contextPath}/login3" method="post">
        username:<input type="text" name="username"><br>
        password:<input type="password" name="password"><br>
        <input type="submit" value="登录">
    </form>
  </body>
</html>
时间: 2024-10-07 06:29:59

action中请求参数获取的两种方式的相关文章

HTML中设置背景图的两种方式

HTML中设置背景图的两种方式 1.background    background:url(images/search.png) no-repeat top; 2.background-image    background-image:url(images/search.png):    background-repeat:no-repeat;

Hibernate 带参数查询的两种方式

1.使用?通配符 public User validate(String userName, String password) { String hql = "from User u where u.userName = ? and u.password = ?"; User user = null; List<User> list = ht.find(hql, new Object[]{userName, password}); if (list.size()!=0){

[Android] Android ViewPager 中加载 Fragment的两种方式 方式(二)

接上文: https://www.cnblogs.com/wukong1688/p/10693338.html Android ViewPager 中加载 Fragmenet的两种方式 方式(一) 二.使用Fragment来填充ViewPager Google 官方是建议我们使用Fragment来填充ViewPager的,这样可以更加方便的生成每个Page以及管理 每个Page的生命周期!当然它给我们提供了两个不同的Adapter,他们分别是: FragmentPageAdapter和Fragm

从源代码剖析Struts2中用户自定义配置转换器的两种方式——基于字段的配置转换器和基于类型的配置转换器(解决了实际系统中,因没有区分这两种工作方式的生命周期而引起的异常错误问题)

自定义类型转换器必须实现ongl.TypeConverter接口或对这个接口的某种具体实现做扩展 <<interface>>com.opensymphony.xwork2.conversion.TypeConverter à com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter à org.apache.struts2.util.StrutsTypeConverter 接口及类进行解析 TypeConverter(

iOS中创建单例的两种方式

刚刚开始做iOS开发的时候,不知道怎么创建单例,在网上搜的也大多数都不太全,所以总结了一下创建单例的两种方式 首先在.h文件中声明类方法 1 +(instancetype)sharedUtils; 然后在.m文件中实现它,实现的方法有两种 第一种,在创建一个对象时先判断在程序中有没有创建过这个对象 1 static PublicUtils *DefaultManager = nil; 2 3 +(instancetype)sharedUtils 4 { 5 if (!DefaultManager

在Scrapy中如何利用Xpath选择器从HTML中提取目标信息(两种方式)

前一阵子我们介绍了如何启动Scrapy项目以及关于Scrapy爬虫的一些小技巧介绍,没来得及上车的小伙伴可以戳这些文章: 手把手教你如何新建scrapy爬虫框架的第一个项目(上) 手把手教你如何新建scrapy爬虫框架的第一个项目(下) 关于Scrapy爬虫项目运行和调试的小技巧(上篇) 关于Scrapy爬虫项目运行和调试的小技巧(下篇) 今天我们将介绍在Scrapy中如何利用Xpath选择器从HTML中提取目标信息.在Scrapy中,其提供了两种数据提取的方式,一种是Xpath选择器,一种是C

jsp中Get方式请求参数乱码的两种解决方式

第一种方式: <% //获取请求包含的下旬字符串 String rawQueryStr=request.getQueryString(); //使用URLDecoder解码祖父穿 String queryStr=URLDecoder.decode(rawQueryStr, "UTF-8"); //以&符号分解查询字符串 String paramPairs[]=queryStr.split("&"); for(String paramPair:p

SPRING MVC 的请求参数获取的几种方法

通过@PathVariabl注解获取路径中传递参数 JAVA @RequestMapping(value = "/{id}/{str}") public ModelAndView helloWorld(@PathVariable String id, @PathVariable String str) { System.out.println(id); System.out.println(str); return new ModelAndView("/helloWorld&

springmvc——请求参数获取的几种方法

方法一: 通过@PathVariabl注解获取路径中传递参数 JAVA @RequestMapping(value = "/{id}/{str}") public ModelAndView helloWorld(@PathVariable String id, @PathVariable String str) { System.out.println(id); System.out.println(str); return new ModelAndView("/helloW