学完今天的理论知识,结合DAO设计模式,实现一个用户登录,通过session传递值、filter过滤器过滤,判断用户没有登录成功,直接通过网址进入登录成功后的页面会跳转至登录页面。
oracle数据库:
上myeclipse代码:
UserBean类:
public class UserBean {
private int userid;
private String username;
private String userpwd;
/** 为1则账号密码正确
* 为0则账号密码错误
**/
private int state;
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserpwd() {
return userpwd;
}
public void setUserpwd(String userpwd) {
this.userpwd = userpwd;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
}
UserDao接口:定义了根据用户名查询用户信息的方法。
public interface UserDao {
public UserBean findUser_ByID(String username);
}
UserDaoImple类:继承UserDao,实现方法。
public class UserDaoImple implements UserDao{
private PreparedStatement pre = null;
private ResultSet rs = null;
public UserBean findUser_ByID(String username) {
Connection conn = DBUtils.getConn();
UserBean userBean = null;
String sql = "select userid,username,userpwd from tb_user where username = ?";
try {
pre = conn.prepareStatement(sql);
pre.setString(1, username);
rs = pre.executeQuery();
if(rs.next()){
userBean = new UserBean();
userBean.setUserid(rs.getInt(1));
userBean.setUsername(rs.getString(2));
userBean.setUserpwd(rs.getString(3));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
DBUtils.close(conn, pre, rs);
}
return userBean;
}
}
public class DaoFactory {
private static UserDao userDao = null;
public static UserDao getUserDao(){
if(userDao==null){
userDao = new UserDaoImple();
}
return userDao;
}
}
public class UserServiceImple implements UserService{
private UserDao userDao = null;
public UserBean login(String username, String userpwd) {
userDao = DaoFactory.getUserDao();
UserBean userBean = userDao.findUser_ByID(username);
if(userBean ==null){
return null; //用户不存在
}else if(username.equals(userBean.getUsername())&&userpwd.equals(userBean.getUserpwd())){
userBean.setState(1);
}else{
userBean.setState(0);
}
return userBean;
}
}
LoginServlet类:登录服务端与客户端交互
public class LoginServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
String username = req.getParameter("userName");
String userpwd = req.getParameter("userPwd");
UserService userService = ServiceFactory.getUserService();
UserBean userBean = userService.login(username, userpwd);
if(userBean==null){
resp.sendRedirect("userlogin.jsp");
}else if(userBean.getState()==1){
HttpSession session = req.getSession();
session.setAttribute("Login", userBean);
resp.sendRedirect("main.jsp");
}else if(userBean.getState()==0){
resp.sendRedirect("userlogin.jsp");
}
}
}
DBUtils类:封装了工具类,连接数据库
public class DBUtils {
private static Properties properties = new Properties();
private static String url = "";
private static String userName = "";
private static String pwd = "";
static{
String config = "db.properties";
try {
properties.load(DBUtils.class.getClassLoader().getResourceAsStream(config));
String Driver = properties.getProperty("driverstr");
url = properties.getProperty("url");
userName = properties.getProperty("username");
pwd = properties.getProperty("password");
Class.forName(Driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally{
}
}
public static Connection getConn(){
try {
return DriverManager.getConnection(url, userName, pwd);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static void close(Connection conn,PreparedStatement pre ,ResultSet rs) {
if (rs != null) {
try {
rs.close();
rs=null;
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pre != null) {
try {
pre.close();
pre=null;
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
conn=null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
LoginFilter类:登录过滤器,如果拦截到session没有从LoginServlet获取到用户名和密码,则跳转至登录界面
public class LoginFilter implements Filter {
UserBean userBean =null;
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filter) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest httpRequest = (HttpServletRequest)request;
HttpServletResponse httpResponse = (HttpServletResponse)response;
HttpSession session = httpRequest.getSession();
userBean = (UserBean)session.getAttribute("Login");
//如果没有值,则跳转到userlogin
if(userBean==null){
httpResponse.sendRedirect("userlogin.jsp");
}else{
filter.doFilter(request, response);
}
}
public void init(FilterConfig arg0) throws ServletException {
}
}
xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>loginServlet</servlet-name>
<servlet-class>org.great.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>drivingServlet</servlet-name>
<servlet-class>org.great.servlet.DrivingServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>drivingServlet</servlet-name>
<url-pattern>/driving</url-pattern>
</servlet-mapping>
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>org.great.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/main.jsp</url-pattern>
</filter-mapping>
</web-app>
接下来看效果图:
登录界面,输入账号密码:
输入正确,跳转:
验证:未登录,直接输入正确的登录后的地址:
则成功跳转回登录界面: