Struts2(四.注册时检查用户名是否存在及Action获取数据的三种方式)

一.功能

1.用户注册页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册</title>
<script type="text/javascript" src="jslib/jquery-1.11.1.js"></script>
<script type="text/javascript">
$(function(){
$("[name='user.userName']").blur(function(){
if($.trim($(this).val())=="")
{
$("[name='user.userName']").select();
$("[name='user.userName']").focus();
$("#msg").html("请输入用户名!");
return false;
}
$.post("${pageContext.request.contextPath}/user/checkExists",{"user.userName":$(this).val()},function(data){
$("[name='isExists']").val(data)
if(data=="1")
{
$("#msg").html("用户名已存在,请重新输入!");
}
});
});
});
</script>
</head>
<body>
用户注册
<br>
<br>
<form method="post" action="${pageContext.request.contextPath}/user/add">
<table>
<tr><td>用户名:</td><td><input type="text" name="user.userName"></td></tr>
<tr><td>密码:</td><td><input type="password" name="user.pwd"></td></tr>
<tr><td colspan="2"><input type="submit" value="提交"></td></tr>
</table>
</form>
<!-- 隐藏变量,用来判断用户名是否重复,不写在表单中,因为action中没有接收的属性-->
<input type="hidden" name="isExists" value="0"/>
<div id="msg"></div>
<br>
<br>
<a href="${pageContext.request.contextPath}/main.jsp">返回主页面</a>
</body>
</html>

2.UserAction

package myuser;

import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import mypicture.Picture;
import mypicture.PictureDAO; /**
* @author wanghaoran create 2018年4月8日下午3:18:55
* 为了比较方便继承ActionSupport
*/
public class UserAction extends ActionSupport { /**
* action运行的时候的servlet环境
* 获取response
*/
HttpServletResponse response=ServletActionContext.getResponse();
/**
* 获取request,再获取session
*/
HttpServletRequest request=ServletActionContext.getRequest();
HttpSession session=request.getSession();
PrintWriter out; /**
* 向action注入数据的方式,通常使用Domain Model的方式
*/
private User user; public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
/**
* 检查与用户名是否重复
* @return
* @throws Exception
*/
public String checkExists() throws Exception {
out=response.getWriter();
UserDAO dao=new UserDAO();
if(dao.checkExists(user))
{
out.print("1");
}
else
{
out.print("0");
}
return null;
}
}

3.UserDAO

/**
* 检查用户名是否重复
* @param user
* @return
* @throws SQLException
*/
public boolean checkExists(User user) throws SQLException
{
sql="select * from users where userName=?";
boolean flag=false;
ps=conn.prepareStatement(sql);
ps.setString(1, user.getUserName());
ResultSet rs=ps.executeQuery();
if(rs.next())
{
flag=true;
}
conn.close();
return flag;
}

二.Action获取数据的三种方式

1.注入属性

UserAction:

private String userName;

private String getUserName(){
return userName;
}
private void setUserName(String userName){
this.userName=userName;
} @Override
public String checkExists() throws Exception {
User user = new User();
user.setUserName(userName);
UserDAO dao=new UserDAO();
if(dao.checkExists(user))
{
out.print("1");
}
else
{
out.print("0");
}
return null;
}

前端:

$.post("checkExists.action",{"userName":$(this).val()},function(data)

2.Domain Model 这是一般常用的方式(工作中常用,本项目也使用此方法)

private User user;
然后做setter和getter

3.ModelDriven(使用很少)

(1)Action实现ModelDriven<User>接口并添加抽象方法
  public User getModel()
  {
    return user;
  }
(2)定义并初始化一个模型并生成setter和getter
  private User user = new User();

上一篇:JS判断访问设备、客户端操作系统类型


下一篇:monkey亲测