一.实现:3.使用seesion技术做web用户会话维持
4.使用filter用url过滤,登陆用户排查
I.seesion技术实现web用户会话维持
涉及到的注意事项
-
seesion概念:和cookie相似,用于存储一些用户信息, 相比cookie保存的信息适用更广泛,且保存在服务器端,而cookie存储于客户端
-
在tomcat 8.5之后, filter,servlet及listener不再需要在web.xml中配置文件,会以注解的方式自动配置
-
1.设置过滤器,过滤用户请求,如果seesion为空,不存在username属性,则尚未登陆,跳转至login.jsp
@WebFilter("/*") //表示过滤一切请求
public class userFilter implements Filter {
public userFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse resq=(HttpServletResponse)response;
String url=req.getRequestURL().toString();
HttpSession session=req.getSession(true);
String Username=(String)session.getAttribute("Username"); //获取用户名,判断session是否为空,是否已经登陆
System.out.println(Username.isEmpty());
System.out.println(Username);
System.out.println(url);
if (url.contains(".css")||url.contains(".jpg")) //放行对样式文件,图片的读取
{
chain.doFilter(request, response);
}
//并非用户页面,且session中的用户名为空,转发至登陆界面
else if (Username.isEmpty()&&!url.endsWith("/login.jsp")&&!url.endsWith("/loginServlet")&&!url.endsWith("/CheckCodeServlet"))
{
req.getRequestDispatcher("login.jsp").forward(req, response);
}
else
{
chain.doFilter(request, response);
}
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
2.在loginServlet提取数据库中信息对表单进行校验,如果通过校验,则将信息保存在session中,此时用户已经登陆,session不为空,拥有了不被userfilter拦截的权限,实现了session的会话维持,可以访问任意项目下文件不被拦截
request.setAttribute("Username",Username);
request.getSession().setAttribute("Username",Username);
//session中保存用户名及密码
request.getSession().setAttribute("passWord",passWord);
request.getRequestDispatcher("Inf.jsp").forward(request, response);
二.信息管理界面布局以及一些基本管理功能实现
> **1. 对人员的增删改查 模糊查找(6) **
(1).页面布局
左侧是菜单栏,右侧是显示界面,通过点击菜单,可以显示表格,共建了四个表单,这里只展示一个(teacher)
- jsp页面核心部分
<div id="table">
<table class="table1" border="16px black">
<div class="table1"><th>教师职称 </th><th>教学专业 </th><th>任职时长 </th><th>教师ID </th>
<th>教师姓名 </th><th> </th>
</div>
<c:if test="${!empty requestScope.teachers}">
<c:forEach items="${requestScope.teachers }" var="teacher">
<tr>
<td>${teacher.title }</td>
<td>${teacher.subject}</td>
<td>${teacher.experience}</td>
<td>${teacher.teacher_id}</td>
<td>${teacher.teacher_name }</td>
<td><a href="delete.teacher?teacher_id=${teacher.teacher_id}&&pageNow=${requestScope.pageNow}">delete</a> <a href="#e" onclick="appear(this)">edit</a></td>
</tr>
</th>
</c:forEach>
<div>
<div></div>
</table>
<c:forEach var="i" begin="1" end="${pageCount}">
<a href="find.teacher?pageNow=${i}">[${i}]</a>
</c:forEach>
</c:if>
<c:if test="${empty requestScope.teachers}">
<div class="table1"><span>没有任何信息</span></div>
</c:if>
</div>
<!-- jstl循环,获取teacher类集合teachers,依此取出teacher类型的javabean中的值 !-->
2.增改删除功能都被封装在了teacherServlet方法中,通过超链接中的url以get的方式访问,即保存的数据以文本缀连链接末端形式传递.再获取url链接,截取*.teacher中teacher之前的字符,通过反射机制映射到链接名相对应的处理方法中
1. 删除功能 (案例中删除了洪杰)
-增加和修改功能
@WebServlet("*.teacher")
public class TeacherServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
int flag=0;
teacherDao teacherDao=new teacherDaoImpl();
/**
* @see HttpServlet#HttpServlet()
*/
public TeacherServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String servletPath=request.getServletPath();
String methodName=servletPath.substring(1);
methodName=methodName.substring(0,methodName.length()-8);
//截取方法名 url中*.teacher 中*的值
System.out.println(methodName);
try {
Method method=getClass().getDeclaredMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);
method.invoke(this,request,response);
//java映射,映射到相对应的方法中
} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e)
{
e.printStackTrace();
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
flag=1; //修改与增添以表单post的方式提交,flag标记是与get请求相区分开来
doGet(request, response);
}
//删除方法
private void delete(HttpServletRequest request,HttpServletResponse response)
{
flag=0;
int teacher_id=Integer.parseInt((String)request.getParameter("teacher_id"));
CoureseDao coureseDao=new CourseDaoImpl();
try {
teacherDao.delete(teacher_id);
String pageNow=(String) request.getParameter("pageNow");
System.out.println("delete "+pageNow);
try {
request.getRequestDispatcher("find.teacher?pageNow="+pageNow).forward(request, response);
} catch (ServletException | IOException e) {
e.printStackTrace();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//查找方法
private void find(HttpServletRequest request,HttpServletResponse response) throws UnsupportedEncodingException
{
request.setCharacterEncoding("UTF-8");
int pageSize=13;
int lineCount;
int pageCount;
int pageNow=1;
try
{
if(request.getParameter("pageNow")!=null)
{
pageNow=Integer.parseInt((String)request.getParameter("pageNow"));
}
else
pageNow=1;
System.out.println(pageNow);
ArrayList<Teacher> teachers=null;
if (flag==0)
{
lineCount=teacherDao.count();
pageCount=lineCount%pageSize==0?lineCount/pageSize:lineCount/pageSize+1;
teachers=teacherDao.findteacher(pageSize*(pageNow-1), pageSize);
}
else
{
teachers=teacherDao.fuzzy_Search(request.getParameter("content")+"",0,15);
pageCount=1;
}
request.setAttribute("teachers",teachers);
request.setAttribute("pageCount",pageCount);
request.setAttribute("pageNow",pageNow);
try {
flag=0;
request.getRequestDispatcher("teacher.jsp").forward(request, response);
} catch (ServletException | IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//插入方法以及修改方法
private void insert(HttpServletRequest request,HttpServletResponse response) throws UnsupportedEncodingException
{
request.setCharacterEncoding("UTF-8");
flag=0;
Teacher teacher=new Teacher((String)request.getParameter("teacher_title"),(String)request.getParameter("subject"),(String)request.getParameter("experience")
,Integer.parseInt((String)request.getParameter("teacher_id")),(String)request.getParameter("teacher_name"));
System.out.println(teacher.getTeacher_name());
try {
teacherDao.delete(teacher.getTeacher_id());
teacherDao.insert_into_Teacher(teacher);
System.out.println("提交成功");
find(request, response);
} catch (SQLException | UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
模糊查找功能
使用mysql语句中的 String sql=“select * from student WHERE”
+ " CONCAT(student_id,register_time,Class,major,student_name) LIKE ‘%"+goal+"%’ limit ?,?";