期末大作业——电影影片管理系统

主要功能

作业整体采用MVC模式。

在登录模块中,使用过滤器和监听器对用户得登录进行监听和过滤,不允许用户进行二次登录。难点在于对用户得session进行处理,在用户进行二次登录后,利用登录名查询是否已经有过session,此时将session失效。用户登录时,使用session添加用户名,此时监听器开始工作,根据事件监听器,首先获得是哪个在进行添加,如果是添加的用户名,就获取seesionID,以及用户登录名。然后利用UserBean中得map先是通过用户名查询sessionId,再利用sessionId查询session1。如果session1为空的话,表示用户没有登陆过,将seesion的相关信息存储起来;若已经登录,将后来登录的session直接失效,此时监听器完成工作。在服务器中判断该session是否为空,为空则传传递参数给过滤器,利用过滤器拦截住请求,返回到登录页面。

在登出时也必须及时得将map中的session清空,以免在退出登录后,该用户再次进行登录时出现错误。

在增删改查得功能模块中,将4个请求需要写在同一个servlet中,在请求发送给servlet时,传一个标志参数,在servlet里面进行判断,进行相应的操作。

在整个项目中,使用过滤器对整个项目得编码方式设置为UTF-8。

在更改电影的信息时,需要传递修改电影的id给服务器,再由服务器查询该电影得信息,并传递给更改得jsp页面,显示在输入框中。同时,用户在修改电影信息时,当新名字和旧名字相同,可以直接进行修改。当输入得名字和以前得名字不相同时,会通过新名字查询数据库中是否已经存在该名字得电影信息。如果不存在,可以直接进行修改操作;如果存在,会修改除电影名之外的信息,并且返回到修改页面。

在添加电影信息名时,也不能出现已有得电影信息。先对输入得电影名进行查询,若存在则提示不能查询,并且跳到添加页面,否则可以插入电影信息。

在访问授权页面时,未登录不可进行访问,使用过滤器获取是否登录得参数,没有登录,重定向到登录页面。账号信息不存在点击注册后进行登录。

在访问数据时使用连接池,每当对数据库访问时,通过连接对象进行访问,并且关闭数据库。

删除数据提示。

能进行模糊查询。

存在缺点

数据库中的所有得属性得类型都是使用得char类型,与实际的不相符,在进行增删改查时也不能进行自增自己操作。在用户注册中对于用户得id没有进行识别。将用户的id设置为int并且能够自增。

系统的功能还比较少,只能进行增删改查。登录,注册,登出

界面简单。

主要视图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

mysql

movie(不建议这样建)

数据库这样建立不太好,建议自己建立个别的

DROP TABLE IF EXISTS `movie`;
CREATE TABLE `movie` (
  `ID` char(100) CHARACTER SET utf8 NOT NULL,
  `name` char(100) CHARACTER SET utf8 NOT NULL,
  `performer` char(100) CHARACTER SET utf8 DEFAULT NULL,
  `year` char(100) CHARACTER SET utf8 DEFAULT NULL,
  `type` char(100) CHARACTER SET utf8 DEFAULT NULL,
  `score` char(100) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

user(不建议这样建)

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `username` char(100) NOT NULL,
  `password` char(100) NOT NULL,
  PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

jsp

addMovie.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>添加新电影</title>
<jsp:include page="head2.jsp"></jsp:include>
<%String flag=(String)request.getAttribute("flagadd"); %>
<script type="text/javascript">
var flag=<%=flag %>;
if("1"==flag)
	{
	alert("该电影名已被占用");
	}
</script>
</head>
<body>
<center>
<a href="showMovies.jsp" style="float: right">返回首页</a>
<form action="CurdServlet" method="post">
	&nbsp&nbsp&nbsp&nbsp请输入电影ID<input type="text" name="id"><br><br>
	请输入电影名称:<input type="text" name="name" style="margin-right:60px"><br><br>
	请输入电影主演:<input type="text" name="performer" style="margin-right:60px"><br><br>
	&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
	请输入年份:<input type="text" name="year" style="margin-right:60px"><br><br>
	请输入电影类型:<input type="text" name="type" style="margin-right:60px"><br><br>
	请输入电影评分:<input type="text" name="score" style="margin-right:60px"><br><br>
	<input type="hidden" name="flag" value="add">
	<input type="hidden" name="flag1" value="add2">
	<input type="submit" value="添加">
</form>
</center>
</body>
</html>

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<% 
String flag=(String)request.getParameter("flagLogin");
%>
<html>
<head>
<meta charset="UTF-8">
<title>登录</title>
<jsp:include page="head.jsp"></jsp:include>
<%--当flag=1表示已经登录或未登录 --%>
<script type="text/javascript">
var flag='<%=flag %>';
if("1"==flag)
	{
	alert("未登录或异地登录");
	}
</script>
<title>登录</title>
</head>
<body>
<center>
<form action="login" method="post" >
用户名:<input type="text" name="username">
<br><br>
&nbsp&nbsp&nbsp
密码:<input type="password" name="password"><br><br>
<input type="hidden" name="Loginflag" value="login">
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
<input type="submit" value="登录" >
</form>
<br><br>
<a href="login?Loginflag=register&Loginflag1=register1" style="margin-left:50px">点此注册</a>
</center>
<% 
String name=request.getParameter("username");
//将登录名字放到session里面
session.setAttribute("loginUser", name);
%>
</body>
</html>

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%--获取到输入的值,重定向到LoginServlet.jsp --%>
<%
String name=request.getParameter("username");
//将登录名字放到session里面
session.setAttribute("loginUser", name);
//response.sendRedirect(request.getContextPath()+"/LoginServlet");
request.getRequestDispatcher(request.getContextPath()+"LoginServlet").forward(request,response);
System.out.println("lohinjsp");
%>
</body>
</html>

register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册</title>
<%String flagLog=(String)session.getAttribute("flagLog");%>
<script type="text/javascript">
    var flag='<%=flagLog %>';
    if("1"==flag)
    	{
    	alert("该用户名已被占用");
    	}
</script>
</head>
<body>
<jsp:include page="head2.jsp"></jsp:include>
<%
%>
<center>
<form action="login" method="post" >
请输入用户名:<input type="text" name="username"><br><br>
&nbsp&nbsp请输入密码:<input type="password" name="password"><br><br>
<input type="hidden" name="Loginflag1" value="register2">
<input type="hidden" name="Loginflag" value="register">
<input type="submit" value="注册">
</form>
<br><br>
<a href="index.jsp" style="margin-left:10px" >点此登录</a>
</center>
</body>
</html>

showMovies.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*,caztc.jk.Lj.entity.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>查询结果</title>
<jsp:include page="head2.jsp"></jsp:include>
</head>
<body>
<script type="text/javascript">
    function check() {
        if (confirm("确认要删除?"))
            return true;
         else
        return false;
    }
</script>
<center>
<%--隐藏一个flag:1表示查询  放到一个sevlet上面 --%>
<form action="CurdServlet" method="post">
请输入需要查询的电影名:&nbsp&nbsp&nbsp&nbsp<input type="text" name="message">
&nbsp&nbsp&nbsp&nbsp
<input type="hidden" name="flag" value="select">
<input type="submit" value="查询">
</form>
</center>
<br><br>
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
<form action="CurdServlet" method="post" style="float:left;">
<input type="hidden" name="flag" value="add">
<input type="hidden" name="flag1" value="add1">
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
<input type="submit" value="点此添加新电影">
</form>
<form action="login" method="post" style="float:right;">
<input type="submit" value="退出登录">
<input type="hidden" name="Loginflag" value="logout">
<input type="hidden" name="username" value=<%=session.getAttribute("username") %>>
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
</form>
<center>
<% 
	List<MovieBean> movies=(List<MovieBean>)request.getAttribute("movies");
	if(movies!=null)
	{
%>
<br>
<table border=1 width=90%>
	<tr align="center">
		<td>电影编号</td>
		<td>电影名</td>
		<td>主演</td>
		<td>类型</td>
		<td>年份</td>
		<td>评分</td>
		<td>操作</td>
	</tr>
	<%
	for(MovieBean m1:movies){
	%>
	<tr>
		<td><%=m1.getID() %></td>
		<td><%=m1.getName() %></td>
		<td><%=m1.getPerformer() %></td>
		<td><%=m1.getType() %></td>
		<td><%=m1.getYear() %></td>
		<td><%=m1.getScore() %></td>
		<td>
		<%--删除提示 --%>
		<a onclick="return check()" href="CurdServlet?flag=del&id=<%=m1.getID() %>" method="post">delete</a>
		<a href="CurdServlet?flag=update&id=<%=m1.getID() %>&flag1=update1" method="post">update</a>
		</td>
	</tr>
	<%
	}
}
%>
</table>
</center>
</body>
</html>

updateMovie.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="caztc.jk.Lj.entity.MovieBean"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>编辑信息</title>
<jsp:include page="head2.jsp"></jsp:include>
</head>
<body>
<%String flag=(String)request.getAttribute("flagUpdate"); %>
<script type="text/javascript">
var flag='<%=flag %>';
if("1"==flag)
	{
	alert("该电影名已被占用");
	}
</script>
<% 
MovieBean movie=(MovieBean)session.getAttribute("movies");
%>
<center>
<a href="showMovies.jsp" style="float: right">返回首页</a>
<form action="CurdServlet" method="post" >
	<input type="hidden" name="id" value=<%=movie.getID() %>>
	&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
	&nbsp&nbsp&nbsp&nbsp请输入电影名称:<input type="text" name="newname" value=<%=movie.getName()%>><br><br>
	<input type="hidden" name="oldname" value=<%=movie.getName() %>>
	请输入电影主演:<input type="text" name="performer" value=<%=movie.getPerformer() %>><br><br>
	&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
	请输入年份:<input type="text" name="year" value=<%=movie.getYear() %>><br><br>
	请输入电影类型:<input type="text" name="type" value=<%=movie.getType() %>><br><br>
	请输入电影评分:<input type="text" name="score" value=<%=movie.getScore() %>><br><br>
	<input type="hidden" name="flag" value="update">
	<input type="hidden" name="flag1" value="update2">
	<input type="submit" value="更改">
</form>
</center>
</body>
</html>

head.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>插入部分</title>
</head>
<body  bgcolor=pink>
<center>
<div class="div1">
</div>
<h1>欢迎登录电影影片系统</h1>

<hr color=Aliceblue >
</center>
</body>
</html>

head2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>插入部分</title>
</head>
<body  bgcolor=pink>

<center>
<div class="div1">
<h1>欢迎使用电影影片管理系统</h1>
</div>
<hr color=Aliceblue >
</center>
</body>
</html>

Dao

MovieDao.java

package caztc.jk.Lj.Dao;
import caztc.jk.Lj.entity.MovieBean;
import caztc.jk.Lj.entity.UserBean;
import java.util.*;
public interface MovieDao {
	//存储从数据库中获取的所有的电影信息
	public List<MovieBean> listAllMovies(String message);
	//通过传过来的删除相应得影片
	public int deleteMovie(String id);
	//添加影片
	public int addMovie(MovieBean movieBean);
	//更新影片信息
	public int updateMovie(MovieBean movieBean);
	//通过影片Id查找影片信息
	public MovieBean selectMovieById(String id);
	//通过影片名字查找该影片是否存在
	public Boolean selectMovieByname(String name);
	//检查账号密码是否正确
	public boolean checkLogin(UserBean user);
	//检查用户名是否已经存在
	public boolean checkByUsername(String username);
	//插入用户信息
	public int addUser(UserBean user);
}

MovieDaoImpl.java

package caztc.jk.Lj.Dao;
import java.sql.*;
import java.util.*;
import caztc.jk.Lj.dbutils.DBHelper;
import caztc.jk.Lj.entity.MovieBean;
import caztc.jk.Lj.entity.UserBean;
public class MovieDaoImpl implements MovieDao {
	
	//插入用户信息
	public int addUser(UserBean user) {
		Connection con=DBHelper.getConnection();
		String sql="insert into user values(?,?)";
		PreparedStatement ps;
		try {
			ps = con.prepareStatement(sql);
			ps.setString(1,user.getUsername());
			ps.setString(2,user.getPassword());
			int n=ps.executeUpdate();
			DBHelper.releseaConnection();
			return n;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		DBHelper.releseaConnection();
		return 0;
	}
	//检查用户名是否已经存在
	public boolean checkByUsername(String username) {
		Connection con=DBHelper.getConnection();
		String sql;
		PreparedStatement ps;
		sql="select * from user where username=?";
			try {
				//处理从数据库获取到得信息
				ps = con.prepareStatement(sql);
				ps.setString(1,username);
				ResultSet rs=ps.executeQuery();	
				//下一条有数据,用户名已经存在
				while(rs.next())
				{	DBHelper.releseaConnection();
					return true;
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		DBHelper.releseaConnection();
		return false;
	}
	//用户是否存在,密码是否正确
	public boolean checkLogin(UserBean user) {
		Connection con=DBHelper.getConnection();
		String sql;
		PreparedStatement ps;
		sql="select * from user where username=? and password=?";
		String username=user.getUsername();
		String password=user.getPassword();
			try {
				//处理从数据库获取到得信息
				ps = con.prepareStatement(sql);
				ps.setString(1,username);
				ps.setString(2,password);
				ResultSet rs=ps.executeQuery();	
				//下一条有数据,账号密码正确
				while(rs.next())
				{	DBHelper.releseaConnection();
					return true;
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		DBHelper.releseaConnection();
		return false;
	}
	//通过Id查询电影
	public MovieBean selectMovieById(String id) {
			Connection con=DBHelper.getConnection();
			String sql;
			PreparedStatement ps;
			sql="select * from movie where ID=?";
			MovieBean movie1=null;
				try {
					//处理从数据库获取到得信息
					ps = con.prepareStatement(sql);
					ps.setString(1,id);
					ResultSet rs=ps.executeQuery();
					//rs最先指向得是属性,下一条才是数据
					rs.next();
						movie1=new MovieBean();
						movie1.setID(rs.getString("ID"));
						movie1.setName(rs.getString("name"));
						movie1.setPerformer(rs.getString("performer"));
						movie1.setScore(rs.getString("score"));
						movie1.setType(rs.getString("type"));
						movie1.setYear(rs.getString("year"));
				} catch (SQLException e) {
					e.printStackTrace();
				}
		DBHelper.releseaConnection();
		return movie1;
	}
	//查询所有
	public List<MovieBean> listAllMovies(String message) {
		//建立一个电影列表
		List<MovieBean> movies=new ArrayList<MovieBean>();
		//获取连接对象
		Connection con=DBHelper.getConnection();
		//写sql语句
		String sql;
		PreparedStatement ps;
		sql="select * from movie where name Like ?";
		MovieBean movie1=null;
		try {
			//处理从数据库获取到得信息
			ps = con.prepareStatement(sql);
			ps.setString(1, message);
			ResultSet rs=ps.executeQuery();
			while(rs.next())
			{ // System.out.println("**************************");
				movie1=new MovieBean();
				movie1.setID(rs.getString("ID"));
				movie1.setName(rs.getString("name"));
				movie1.setPerformer(rs.getString("performer"));
				movie1.setScore(rs.getString("score"));
				movie1.setType(rs.getString("type"));
				movie1.setYear(rs.getString("year"));
				movies.add(movie1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		DBHelper.releseaConnection();
		return movies;
	}
	//删除
	public int deleteMovie(String id) {
		List<MovieBean> movies=new ArrayList<MovieBean>();
				Connection con=DBHelper.getConnection();
				String sql;
				PreparedStatement ps;
				sql="delete from movie where ID=?";
				try {
					//处理从数据库获取到得信息
					ps = con.prepareStatement(sql);
					ps.setString(1,id);
					int n=ps.executeUpdate();
					DBHelper.releseaConnection();
					return n;
				} catch (SQLException e) {
					e.printStackTrace();
				}
		DBHelper.releseaConnection();
		return 0;
	}
	//添加
	public int addMovie(MovieBean movieBean) {
		Connection con=DBHelper.getConnection();
		String sql="insert into movie values(?,?,?,?,?,?)";
		PreparedStatement ps;
		try {
			ps = con.prepareStatement(sql);
			ps.setString(1,movieBean.getID());
			ps.setString(2, movieBean.getName());
			ps.setString(3, movieBean.getPerformer());
			ps.setString(4, movieBean.getYear());
			ps.setString(5, movieBean.getType());
			ps.setString(6, movieBean.getScore());
			int n=ps.executeUpdate();
			DBHelper.releseaConnection();
			return n;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		DBHelper.releseaConnection();
		return 0;
	}
	//通过电影名字查是否存在已经有的name
	public Boolean selectMovieByname(String newname) {
		Connection con=DBHelper.getConnection();
		String sql;
		PreparedStatement ps;
		sql="select * from movie where name=?";
		MovieBean movie1=null;
			try {
				//处理从数据库获取到得信息
				ps = con.prepareStatement(sql);
				ps.setString(1,newname);
				ResultSet rs=ps.executeQuery();
				//rs最先指向得是属性,下一条才是数据,有数据返回true代表名字已经有了
				while(rs.next())
				{
					DBHelper.releseaConnection();
					return true;
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		DBHelper.releseaConnection();
		return false;
	}
	//修改
	public int updateMovie(MovieBean movieBean) {
		Connection con=DBHelper.getConnection();
		String sql="update movie set name=?,performer=?,year=?,type=?,score=? where ID=?";
		PreparedStatement ps;
		try {
			ps = con.prepareStatement(sql);
			ps.setString(1, movieBean.getName());
			ps.setString(2, movieBean.getPerformer());
			ps.setString(3, movieBean.getYear());
			ps.setString(4, movieBean.getType());
			ps.setString(5, movieBean.getScore());
			ps.setString(6,movieBean.getID());
			int n=ps.executeUpdate();
			DBHelper.releseaConnection();
			return n;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		DBHelper.releseaConnection();
		return 0;
	}
	
}

dbutils

DBHelper.java

package caztc.jk.Lj.dbutils;
import java.sql.*;
public class DBHelper {
	//连接对象
	private static Connection con=null;
	//获取一个连接对象
	public static Connection getConnection() {	
		try {
			Class.forName("com.mysql.jdbc.Driver");
			con= DriverManager.getConnection("jdbc:mysql://localhost:3306/javaweb?useUnicode=true&characterEncoding=UTF-8", "root", "123456");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}	
		return con;
	}
	//关闭数据库
	public static void releseaConnection() {
		try {
			if(con!=null)
				con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

entity

MovieBean.java

package caztc.jk.Lj.entity;
public class MovieBean {
	private String iD;
	private String name;
	private String performer;
	private String year;
	private String type;
	private String score;
	public MovieBean(String iD, String name, String performer, String year, String type, String score) {
		super();
		this.iD = iD;
		this.name = name;
		this.performer = performer;
		this.year = year;
		this.type = type;
		this.score = score;
	}
	public MovieBean() {
	}
	public String getID() {
		return iD;
	}
	public void setID(String iD) {
		this.iD = iD;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPerformer() {
		return performer;
	}
	public void setPerformer(String performer) {
		this.performer = performer;
	}
	public String getYear() {
		return year;
	}
	public void setYear(String year) {
		this.year = year;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public String getScore() {
		return score;
	}
	public void setScore(String score) {
		this.score = score;
	}
	
}

UserBean.java

package caztc.jk.Lj.entity;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpSession;
public class UserBean {
	//用于存放登录的数据
		private String username;
		private String password;
		private static UserBean instance=new UserBean();
		//存放用户对应sessionId
		private Map<String,String> loginUserSession=new HashMap<String,String>();
		//存放sessionId对应的session
		private Map<String,HttpSession> loginSession=new HashMap<String,HttpSession>();
		public UserBean() {
		}
		public static UserBean getInstance() {
			return instance;
		}
		public String getUsername() {
			return username;
		}
		public void setUsername(String username) {
			username = username;
		}
		public String getPassword() {
			return password;
		}
		public void setPassword(String password) {
			this.password = password;
		}
		public UserBean(String username, String password) {
			super();
			this.username = username;
			this.password = password;
		}
		//通过传进来得username在Map<String,String>中找到与之对应得sessionId
		public String getSessionIdByUsername(String username) {
			return loginUserSession.get(username);
		}
		//通过传进来得SessionId获取session(即获得了与用户相对应得session)
		public HttpSession getSessionBySessionId(String sessionId) {
			return loginSession.get(sessionId);
		}
		//存放用户——sessionId
		public void setSessionIdByUserName(String username,String sessionId) {
			loginUserSession.put(username, sessionId);
		}
		//存放SessionId-session
		public void setSessionBySessionId(String sessionId,HttpSession session) {
			loginSession.put(sessionId,session);
		}
}


filter

EncodingFilter.java

package caztc.jk.Lj.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncodingFilter implements Filter {
	private FilterConfig config;
    public EncodingFilter() {
    }
	public void destroy() {
	}
	public void doFilter(ServletRequest request, ServletResponse reponse, FilterChain chain)
			throws IOException, ServletException {
		request.setCharacterEncoding(config.getInitParameter("charSet"));
		chain.doFilter(request, reponse);
	}
	public void init(FilterConfig config) throws ServletException {
		this.config=config;
	}

}

LoginFilter.java

package caztc.jk.Lj.filter;

import java.io.IOException;
import javax.servlet.DispatcherType;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import caztc.jk.Lj.entity.UserBean;

@WebFilter(dispatcherTypes = {DispatcherType.REQUEST }
					, urlPatterns = { "/showMovies.jsp" })
public class LoginFilter implements Filter {
    public LoginFilter() {
    }
	public void destroy() {
	}
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
			throws IOException, ServletException {
		System.out.println("过滤器工作");
		HttpServletRequest hrequest=(HttpServletRequest)request;
		HttpServletResponse hresponse=(HttpServletResponse)response;
		//获得请求登录的名字,在login.jsp中已经放到了session里面
		String loginUser=(String)hrequest.getSession().getAttribute("loginUser");
		String sessionId=UserBean.getInstance().getSessionIdByUsername(loginUser);
		HttpSession session=UserBean.getInstance().getSessionBySessionId(sessionId);
		//如果登录得名字获得得是空,就说明没有登录,flag=1,重定向到登录页面
		//HttpSession session=requ
		if(loginUser==null||session==null) {
		System.out.println("333");
			//request.getRequestDispatcher("index.jsp?flagLogin=1");
			hresponse.sendRedirect(hrequest.getContextPath()+"/index.jsp?flagLogin=1");
		}else {
			//有登陆
			chain.doFilter(request,response);
		}
	}

	public void init(FilterConfig fConfig) throws ServletException {
		
	}

}

Listener

LoginSessionListener.java

package caztc.jk.Lj.Listener;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import caztc.jk.Lj.entity.UserBean;
@WebListener
public class LoginSessionListener implements HttpSessionAttributeListener {
	private static final String Login_User="loginUser";
    public LoginSessionListener() {
    }
    public void attributeAdded(HttpSessionBindingEvent hsbe) {
    	System.out.println("监听器工作");
		//监听LoginUser这个属性是否有添加(login.jsp里面写的,监听这个)
		//监听是监听得所有得属性值、获取添加得属性值
		String attrName=hsbe.getName();
		//如果获取到得属性值就是LoginUser那么就表示有用户登录
		if(Login_User.equals(attrName)) {
			System.out.println("jianting");
			//获取登录名
			String attrVal=(String)hsbe.getValue();
			//获取session
			HttpSession session=hsbe.getSession();
			//通过session获取到sessionId
			String sessionId=session.getId();
			System.out.println(sessionId);
			//通过登录名获取到sessionId
			String sessionId2=UserBean.getInstance().getSessionIdByUsername(attrVal);
			if(null==sessionId2) {
				//未登录过
				//没有登录得话,就把用户名——sessionId存进Map<Stirng,String>去
				UserBean.getInstance().setSessionIdByUserName(attrVal, sessionId);
				//sessionId-session存到Map<String,HttpSession>
				UserBean.getInstance().setSessionBySessionId(sessionId, session);
			}else {
				//能够通过SessionId获取到session得话,表示登录过了
				//清除该session
				//System.out.println("重复登录");
				//HttpSession session2=UserBean.getInstance().getSessionBySessionId(sessionId2);
				//session2.invalidate();
				//UserBean.getInstance().setSessionBySessionId(sessionId2,null);
				session.invalidate();
			}	
		}
	}
    public void attributeRemoved(HttpSessionBindingEvent arg0)  { 
        
    }
    public void attributeReplaced(HttpSessionBindingEvent arg0)  { 
        
    }
	
}

servlets

CurdServlet.java

package caztc.jk.Lj.servlets;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import caztc.jk.Lj.Dao.MovieDao;
import caztc.jk.Lj.Dao.MovieDaoImpl;
import caztc.jk.Lj.entity.MovieBean;
@WebServlet("/CurdServlet")
public class CurdServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public CurdServlet() {
        super();
    }
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		doPost(request,response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		String flag=request.getParameter("flag");
		MovieDao m1=new MovieDaoImpl();
		String newname=request.getParameter("newname");
		String oldname=request.getParameter("oldname");
		String id=request.getParameter("id");
		String performer=request.getParameter("performer");
		String year=request.getParameter("year");
		String type=request.getParameter("type");
		String score=request.getParameter("score");
		String name=request.getParameter("name");
	//为select则是模糊查询
	if(flag.equals("select"))
	{
		String message=request.getParameter("message");
		if(message.equals(""))
			message="%";
		else
			message="%"+message+"%";
		//用Dao获取所有电影信息
		List<MovieBean> movies=m1.listAllMovies(message);
		request.setAttribute("movies", movies);
		request.getRequestDispatcher("showMovies.jsp").forward(request, response);	
	}
	else if(flag.equals("del"))
	{
		//用Dao获取所有电影信息
		int n=m1.deleteMovie(id);
		if(n==1)
			request.getRequestDispatcher("showMovies.jsp").forward(request, response);	
	}
	else if(flag.equals("update"))
	{	//update
		String flag1=request.getParameter("flag1");
		if(!flag1.equals("update1"))
		{
			//填写表格之后
			MovieBean movie2=new MovieBean(id,newname,performer,year,type,score);
			if(newname.equals(oldname)) {
				//不修改电影名字的情况下进行修改
				int n=m1.updateMovie(movie2);
				if(n==1)
				{
					request.getSession(true).setAttribute("movies", movie2);
					request.getRequestDispatcher("showMovies.jsp").forward(request, response);	
				}
			}
			else {
				//不相等得情况下,判断数据库中是否已经有了这个名字
				if(m1.selectMovieByname(newname))
				{//改名字存在了
					MovieBean movie3=new MovieBean(id,oldname,performer,year,type,score);
					int n=m1.updateMovie(movie3);
					if(n==1)
					{
						request.setAttribute("flagUpdate","1");
						request.getSession(true).setAttribute("movies", movie3);
						request.getRequestDispatcher("updateMovie.jsp").forward(request, response);	
					}
				}
				else{
					//不存在可以修改
					int n=m1.updateMovie(movie2);
					if(n==1)
					{
						request.getSession(true).setAttribute("movies", movie2);
						request.getRequestDispatcher("showMovies.jsp").forward(request, response);	
					}	
				}
				}
			}
		else {
			//没填写过表格
			MovieBean movie=m1.selectMovieById(id);
			request.getSession(true).setAttribute("movies", movie);
			request.getRequestDispatcher("updateMovie.jsp").forward(request, response);
		}
	}
	else if(flag.equals("add"))
	{	//flag1为add2表示已经填写了表单,add1则重定向到addMovie.jsp添加信息
		String flag1=request.getParameter("flag1");
		if(flag1.equals("add1")) {
			//request.setAttribute("flagadd","2");
			request.getRequestDispatcher("addMovie.jsp").forward(request, response);	
		}
		else {
			MovieBean m4=new MovieBean(id,name,performer,year,type,score);
			if(!m1.selectMovieByname(name)) {
				MovieDao m2=new MovieDaoImpl();
				int n=m2.addMovie(m4);
				if(n==1)
					request.getRequestDispatcher("showMovies.jsp").forward(request, response);	
			}
			else {
				request.setAttribute("flagadd","1");
				request.getRequestDispatcher("addMovie.jsp").forward(request, response);
			}
		}
	}
	}
}

LoginSerlet.java

package caztc.jk.Lj.servlets;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import caztc.jk.Lj.Dao.MovieDao;
import caztc.jk.Lj.Dao.MovieDaoImpl;
import caztc.jk.Lj.entity.UserBean;
@WebServlet("/login")
public class LoginSerlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
    public LoginSerlet() {
        super();
    }
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		MovieDao m1=new MovieDaoImpl();
		String flag=request.getParameter("Loginflag");
		System.out.println(flag);
		if(flag.equals("login")) {
			String username=request.getParameter("username");
			String password=request.getParameter("password");
			UserBean user1=new UserBean(username,password);
			
			//账号密码是否正确
			if(!username.equals("")) {
				if(m1.checkLogin(user1))
				{	request.getSession().setAttribute("loginUser", username);
					request.getSession(true).setAttribute("username", username);
					//request.getRequestDispatcher("showMovies.jsp").forward(request, response);
					response.sendRedirect("showMovies.jsp");
				}
				else {
					response.sendRedirect("index.jsp");
				}
			}
			else {
				response.sendRedirect("index.jsp");
			}
				
		}
		else if(flag.equals("logout"))
		{	//System.out.println("登出1");
			String username=request.getParameter("username");
			String sessionId2=UserBean.getInstance().getSessionIdByUsername(username);
			HttpSession usersession=UserBean.getInstance().getSessionBySessionId(sessionId2);
			try{
				usersession.invalidate();
			}catch(Exception e){	
			}
			UserBean.getInstance().setSessionBySessionId(sessionId2, null);
			UserBean.getInstance().setSessionIdByUserName(username, null);
			response.sendRedirect("index.jsp");
		}
		else if(flag.equals("register")) {
			//System.out.println("注册");
			String Loginflag1=request.getParameter("Loginflag1");
			if(Loginflag1.equals("register1")) {
				//表示没有填写过表格
				request.getRequestDispatcher("register.jsp").forward(request, response);
			}
			else if(Loginflag1.equals("register2")){
				//填写表格,调用daoimpl插入用户数据
				String username=request.getParameter("username");
				String password=request.getParameter("password");
				UserBean user2=new UserBean(username,password);
				if(m1.checkByUsername(username))
				{
					//用户名已经存在
					request.getSession(true).setAttribute("flagLog", "1");
					request.getRequestDispatcher("register.jsp").forward(request, response);
				}
				else{
					if(m1.addUser(user2)==1)
						request.getRequestDispatcher("index.jsp").forward(request, response);
				}
			}
		}
	}
}

下载整个项目的链接

下载链接

JavaWeb中,实现网站用户登录功能通常涉及到以下几个关键步骤: 1. **前端页面设计**:创建登录界面,包括用户名输入框(username)、密码输入框(password),以及登录按钮。可以使用HTML、CSS和JavaScript进行前端开发。 2. **后端服务器处理**:后端使用Java和Servlet或Spring MVC框架接收用户的登录请求。通常会涉及以下步骤: - 用户名和密码的验证:检查输入的用户名和密码是否匹配数据库中的记录。你可以使用JDBC连接数据库查询用户信息,也可以使用ORM框架如Hibernate或MyBatis。 - 使用Session或Cookie管理用户状态:如果验证通过,为用户创建一个Session,存储用户标识(通常是登录凭据的哈希值)或其他重要信息,这样后续请求可以识别用户。 3. **安全性考虑**:确保密码安全,一般会采用哈希+盐的方式加密存储,登录时对比哈希值。同时,防止SQL注入和XSS攻击。 4. **错误处理和反馈**:对输入错误或验证失败的情况,返回合适的错误消息给前端,并可能显示错误提示。 5. **登录/登出功能**:除了登录,还需要提供登出功能,清除Session或Cookie,结束用户会话。 6. **登录日志记录**:为了审计和安全,应该记录用户的登录尝试和结果。 相关问题: 1. 如何在JavaWeb中防止跨站脚本攻击(XSS)? 2. 什么是Session和Cookie的区别,它们在用户登录中的作用是什么? 3. 如何在Java中使用Spring Security来增强登录系统的安全性?
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@玉面小蛟龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值