struts2框架处理请求参数的方法

目录

·方法一:获取servlet API

·方法二之属性驱动之第一种(1):

方法二之属性驱动之第二种(2):

方法三:模型驱动


·方法一:获取servlet API

获取servlet API,然后通过servlet api获取请求参数(不推荐,失去了使用框架的意义)

·方法二之属性驱动之第一种(1)

在action类中声明你要获取的参数,然后设置set/get方法。你就得到了你想要的参数。并且这些参数是放到了request域中的,你可以在JSP页面使用request.getAttribute()和${ } 获取到你想要的参数。

  *这种方式,底层是通过反射实现的。

代码——action类:

@SuppressWarnings("serial")
public class LoginAction extends ActionSupport{ 
	public String login(){
		HttpServletRequest request = ServletActionContext.getRequest(); 
		String username = (String) request.getParameter("username");
		String password = (String) request.getParameter("password");
		System.out.println(username+";"+password);
		if(username.equals("tong")&&password.equals("123")){
			request.setAttribute("username", username); 
			return SUCCESS;
		}
		return "notSuccess";
	}
	public String success(){
		return "success";
	}
	public String notSuccess(){
		return "notSuccess";
	}
}

代码——jsp页面:

<html>
  <head>
     
  </head>
  
  <body>
  <% Object name = request.getAttribute("username"); %>
  	<h3><%=name %> ${username} 登录成功!</h3>  
  </body>
</html>

方法二之属性驱动之第二种(2):

注:这种方式是通过struts2中的intercepter(拦截器)进行封装的,准确的说是一个ParametersInterceper

1·创建一个要获取的参数的属性类

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;
	}
	
}

2·在action类中引入这个属性类,并且提供get/set方法。这里要注意:你在使用参数的时候要以user.getUsername这样的格式书写;

@SuppressWarnings("serial")
public class LoginAction3 extends ActionSupport{ 
	private User user; 
	
	public User getUser() {
		return user;
	} 
	public void setUser(User user) {
		this.user = user;
	}


	public String login(){ 
		System.out.println("action3:"+user.getUsername()+";"+user.getPassword());
		if(user.getUsername().equals("tong")&&user.getPassword().equals("123")){ 
			return SUCCESS;
		}
		return "notSuccess";
	}
}

3·jsp页面,在这里所有出现该参数的地方名字都要是ognl格式的,如:user.username。(只有此方式使用ognl格式,其他方式均不使用)

     表单页面:

<html>
  <head>
    
  </head>
  
  <body>
  	
    <a>action3的登錄</a>
    <form title="action3的登录" action="/day1-work/login3">
    	用户名:<input id="username" name="user.username"  type="text"/>
    	密码:<input id="password" name="user.password" type="text"/>
    	
    	<input id="tj" type="submit"  value="登录">
    </form>
  </body>
</html>

显示页面:

<html>
  <head>
     
  </head>
  
  <body> 
  	<h3>登录成功!${user.username} </h3>  
  </body>
</html>

方法三:模型驱动

2.模型驱动(在开发中应用比较多)
            步骤:
                1.让action类实现ModelDriven
                2.重写getModel方法
                3.在action中实现化一个model对象,让getModel方法返回这个对象。
                
       `action类的代码:

    public class Login3Action extends ActionSupport implements ModelDriven<User> {

                    private User user = new User();

                    public User getModel() {
                        return user;
                    }
                }

·jsp页面代码之表单页面:

 <form title="action4的登录" action="/day1-work/login4">
    	用户名:<input id="username" name="username"  type="text"/>
    	密码:<input id="password" name="password" type="text"/>
    	
    	<input id="tj" type="submit"  value="登录">
    </form>

·jsp页面代码之显示页面:

<html>
  <head>
     
  </head>
  
  <body>
  <% Object name = request.getAttribute("username"); %>
  	<h3><%=name %> —— ${username} 登录成功! </h3>  
  </body>
</html>


           · 优点:解决了属性驱动存在的问题
          ·  缺点:一次只能封装一个model对象.

            
             struts2 有很多围绕模型驱动的特性
            * <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/> 为模型驱动提供了更多特性

·拓展:模型驱动之封装到list

与 模型驱动大同小异,注意这里的参数书写方式略有不同

直接上代码:

action类:


@SuppressWarnings("serial")
public class LoginActionList extends ActionSupport{ 
	//(Model)模型驱动之拓展:封装到list
	/*步骤:
	 * 实现ModelDriven接口
	 * 实例化一个model
	 * 重写getMdel方法,其内容为返回实例化的那个model
	 * */
	private List<User> users;
 
	public List<User> getUsers() {
		return users;
	}
 
	public void setUsers(List<User> users) {
		this.users = users;
	} 
	public String login(){ 
		System.out.println(users.get(0).toString());
		System.out.println(users.get(1).toString());
		return null;
	}

	
}

jsp登录页面:

  <a>actionList的登錄</a>
    <form title="actionList的登录" action="/day1-work/loginList">
    	用户名:<input id="username" name="users[0].username"  type="text"/>
    	密码:<input id="password" name="users[0].password" type="text"/>
    	
    	用户名:<input id="username" name="users[1].username"  type="text"/>
    	密码:<input id="password" name="users[1].password" type="text"/>
    	
    	<input id="tj" type="submit"  value="登录">
    </form>

猜你喜欢

转载自blog.csdn.net/xiaoshuo566/article/details/82531512
今日推荐