Javaweb-login-s登录界面使用servlet技术组件器,用jsp来写html代码,servlet来写java代码,实现动态界面的效果
基本步骤:
1.首先得配置jar文件,用build path方法,用于连接数据库
2.需要注意的是得建一个sql数据库用来存储需要验证的数据(用户名和密码)
下面是具体的实施步骤:
www.csdn.net.javaweblogin.dao
UserDao.java:用户验证类
package www.csdn.net.javaweblogin.dao;
import www.csdn.net.javaweblogin.domain.User;
public interface UserDao {
/**
* 用户登录验证
*/
public boolean checkLogin(String name,String pass);
/**
* 用户登录验证
*/
public User checkLogins(String name,String pass);
}
www.csdn.net.javaweblogin.domain
User.java:user表与User类实体映射
package www.csdn.net.javaweblogin.domain;
import java.io.Serializable;
/**
* user表与User类实体映射
* @author Administrator
*
*/
//实现可序列化接口
public class User implements Serializable{
/**
* 可序列化标识
*/
private static final long serialVersionUID = 1L;
/*映射的实现
*
* `id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(40) DEFAULT NULL,
`pass` varchar(12) DEFAULT NULL,
`instr` varchar(200) DEFAULT NULL, */
private Integer id;
private String name;
private String pass;
private String instr;
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(Integer id, String name, String pass, String instr) {
super();
this.id = id;
this.name = name;
this.pass = pass;
this.instr = instr;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getInstr() {
return instr;
}
public void setInstr(String instr) {
this.instr = instr;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", pass=" + pass
+ ", instr=" + instr + "]";
}
}
www.csdn.net.javaweblogin.util
DBConn.java:单例模式
package www.csdn.net.javaweblogin.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mysql.jdbc.PreparedStatement;
/**
* 单例模式
* (Singleton)
* @author Administrator
*
*/
public class DBConn {
/**
* 封装一个私有的静态变量
*/
private static Connection conn;
/**
* 封装一个公有静态返回私有变量的方法
* @return
*/
public static Connection getConn(){
if(conn==null){
try {
// 加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 获取连接对象
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/javaweb-db", "xxxx, xxxx");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return conn;
}
/**
* 释放资源
* @param pstmt
* @param rs
*/
public static void release(PreparedStatement pstmt,ResultSet rs){
if(pstmt!=null){
try {
pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
www.csdn.net.javaweblogin.dao.impl
UserDaoImpl.java:实现数据库的连接,封装属性,实现方法
package www.csndn.net.javaweblogin.dao.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import www.csdn.net.javaweblogin.dao.UserDao;
import www.csdn.net.javaweblogin.domain.User;
import www.csdn.net.javaweblogin.util.DBConn;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
public class UserDaoImpl implements UserDao {
// 封装属性
private Connection conn;
private PreparedStatement pstmt;
private ResultSet rs;
@Override
public boolean checkLogin(String name, String pass) {
// 第一步:声明返回值变量
boolean flag = false;
// 第二步:定义sql语句
String sql = "select id,name,pass,instr from user where name=? and pass=?";
// 第三步:获取连接对象
conn = (Connection) DBConn.getConn();
try {
// 第四步:根据sql语句获取预处理对象
pstmt = (PreparedStatement) conn.prepareStatement(sql);
// 第五步:为占位符赋值
int index = 1;
pstmt.setString(index++, name);
pstmt.setString(index++, pass);
// 第六步:执行查询操作
rs = pstmt.executeQuery();
// 第七步:判断
if (rs.next()) {
flag = true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}
@Override
public User checkLogins(String name, String pass) {
// 第一步:声明返回值变量
User entity = null;
// 第二步:定义sql语句
String sql = "select id,name,pass,instr from user where name=? and pass=?";
// 第三步:获取连接对象
conn = (Connection) DBConn.getConn();
try {
// 第四步:根据sql语句获取预处理对象
pstmt = (PreparedStatement) conn.prepareStatement(sql);
// 第五步:为占位符赋值
int index = 1;
pstmt.setString(index++, name);
pstmt.setString(index++, pass);
// 第六步:执行查询操作
rs = pstmt.executeQuery();
// 第七步:判断
if (rs.next()) {
// 创建对象
entity = new User();
// 为对象赋值
entity.setId(rs.getInt("id"));
entity.setName(rs.getString("name"));
entity.setPass(rs.getString("pass"));
entity.setInstr(rs.getString("instr"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return entity;
}
}
www.csdn.net.servlet
LoginServlet.java:利用servlet技术写java代码:
package www.csdn.net.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import www.csdn.net.javaweblogin.dao.UserDao;
import www.csdn.net.javaweblogin.domain.User;
import www.csndn.net.javaweblogin.dao.impl.UserDaoImpl;
public class LoginServlet extends HttpServlet {
/**
doGet的方法
*/
//2.全局创建
private UserDao userDao = new UserDaoImpl();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//8.解决乱码问题
request.setCharacterEncoding("UTF-8");
//1.
String name = request.getParameter("uname");
String pass = request.getParameter("upass");
//3.登录成功返回一个user对象
User user = userDao.checkLogins(name, pass);
// 4.
if(user!=null){
// 9.存入到cookie中 ,首先你要看有没有当前的cookie
Cookie cookies[]=request.getCookies();
// 14.声明当前的cookie
Cookie autoCookie=null;
// 10.判断cookie是否为空
if(cookies!=null){
// 11.
for(Cookie cookie:cookies){
// 12.获取具体的cookie
String cookieName=cookie.getName();
// 13.判断
if("auto".equals(cookieName)){
// 15.
autoCookie=cookie;
}
}
}
// 16.判断cookie是否存在,下面是存在的情况
if(autoCookie!=null){
// 19.获取cookie的值
String value=autoCookie.getValue();
// 20.与要记录的新值比较,加上!,说明是不相等的情况
if(!value.equalsIgnoreCase(name+","+pass)){
// 21.如果不等,就重新赋值
autoCookie.setValue(name+","+pass);
//32.设置路径,设置路径的目的是为了加密,让它显示在指定的页面,其他页面访问不到,用到cookie技术.注意:加上:/javaweb-login-s名称
autoCookie.setPath("/javaweb-login-s/login.jsp");
// 22.
response.addCookie(autoCookie);
}
}else{
// 17.不存在的情况下 创建新的cookie
autoCookie=new Cookie("auto",name+","+pass);
//32.设置路径,设置路径的目的是为了加密,让它显示在指定的页面,其他页面访问不到,用到cookie技术 .注意:加上:/javaweb-login-s名称
autoCookie.setPath("/javaweb-login-s/login.jsp");
// 18.响应过去
response.addCookie(autoCookie);
}
// 7.存入到request域中
request.setAttribute("user", user);
//6.转发
request.getRequestDispatcher("./sc.jsp").forward(request, response);
}else{
//5.重定向
response.sendRedirect("./login.jsp");
}
}
/**
doPost的方法
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
InitLoginServlet.java:cookie存值
package www.csdn.net.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class InitLoginServlet extends HttpServlet {
/**
doGet的方法
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//27.
String value=null;
//23.获取所有的cookie信息
Cookie cookies[]=request.getCookies();
//24.判断cookie是否为null
if(cookies!=null){
//25.遍历
for(Cookie cookie:cookies){
//26.判断
if("auto".equalsIgnoreCase(cookie.getName())){
//28.
value=cookie.getValue();
break;
}
}
}
//31.
String name="";
String pass="";
//29.判断value值是否为null
if(value!=null){
//30.拆分
String values[]=value.split(",");
//31.赋值
name=values [0];
pass=values [1];
}
// 32
request.setAttribute("name",name);
request.setAttribute("pass",pass);
// 33.//转发
request.getRequestDispatcher("./login.jsp").forward(request, response);
}
/**
doPost的方法
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Login.jsp:jsp技术实现登录界面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
My JSP 'login.jsp' starting page
Sc.jsp: jsp技术实现登录成功后的界面
<%@ page language="java" import="java.util.*,www.csdn.net.javaweblogin.domain.User" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
My JSP 'sc.jsp' starting page
<%-- <%
User user=(User)request.getAttribute("user");
String userName=user.getName();
%> --%>
欢迎${user.name}登录
Web.xml;中间转化层
javaweb-login-s
LoginServlet
www.csdn.net.servlet.LoginServlet
InitLoginServlet
www.csdn.net.servlet.InitLoginServlet
LoginServlet
/login.do
InitLoginServlet
/initLogin.do
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp