目录
·方法一:获取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>