主要功能
作业整体采用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">
    请输入电影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>
        
请输入年份:<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>
   
密码:<input type="password" name="password"><br><br>
<input type="hidden" name="Loginflag" value="login">
      
      
<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>
  请输入密码:<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">
请输入需要查询的电影名:    <input type="text" name="message">
    
<input type="hidden" name="flag" value="select">
<input type="submit" value="查询">
</form>
</center>
<br><br>
        
      
<form action="CurdServlet" method="post" style="float:left;">
<input type="hidden" name="flag" value="add">
<input type="hidden" name="flag1" value="add1">
             
<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") %>>
             
</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() %>>
            
    请输入电影名称:<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>
        
请输入年份:<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);
}
}
}
}
}