ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java电子会议厅简单修改

2022-02-28 22:02:10  阅读:188  来源: 互联网

标签:Java 会议厅 request HttpServletResponse response 修改 import servlet javax


概述

这次的内容呢,是找到了舍友在大二第一学期完成的Java大作业,舍友还非常贴心得为我解答了一些他大作业的大体框架,对于我读懂他的代码可是起到了非常大的作用。

解读同学的代码

他的作业主要完成的是一个

基于Servlet+JavaBean的电子会议厅班级事务发布模块设计实现

所以说他在本次作业中只是实现了电子会议厅的班级事务发布模块,好,现在来看看具体的代码。

具体的页面

1.登陆页面

登陆页面截图
可以看到呢,同学的这个登陆页面呢也是制作得特别得精美,我也是特别好奇地请教了制作的过程,得知是套用了网络上一些开源的前端UI,我也是得到了这个网站的地址,特别分享在这里。
点击跳转分享UI网站

2.主界面

主界面截图

3.班级事务发布页面

班级事务发布页面截图

4.班级事务查询页面

班级事务查询页面截图

问题发现

在我发现舍友的代码已经有部分超过了我的水平之后,我已经开始“压力山大了=。=”,但是我在反复地演示了他的代码之后,发现了一个原则上的问题,这个问题已经超脱了这个代码的本身,所以,正好避过了我面对的一些困难,那么这个问题是什么呢?
他在登陆管理的代码中,只是简单地写了登陆成功的跳转,并没有登陆失败的判断,这个时候就出现了一个很严重的错误,我在没有经过登陆页面的情况下,也就是不登陆,直接输入主页面的地址,也是可以访问的,但是问题又出现了,这个我也不会啊!这个时候只有借助21世纪伟大因特网的力量了,在CSDN上寻找了解决这个问题的方法,最终知道解决这个问题的代码被称为过滤器————Filter
这是原来的跳转代码:

package com.ec.action;

import java.io.IOException;

import javax.servlet.ServletContext;
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 com.ec.bean.OperateJDBC;
import com.ec.bean.User;

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		ServletContext application = this.getServletContext();
		OperateJDBC userBuffer=(OperateJDBC)application.getAttribute("users");
		if(userBuffer==null)
		{
			userBuffer=new OperateJDBC();
			application.setAttribute("users", userBuffer);
		}
		
		User user=null;
		
		String account=request.getParameter("account");
		String password=request.getParameter("password");
					
		if(userBuffer.ValidateUser(account,password))
		{
			user=userBuffer.GetUser(account);
			application.setAttribute("currentUser", user);
			request.getRequestDispatcher("main.jsp").forward(request,response);
		}
		else
		{
			response.sendRedirect("error.jsp");
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

在参考过在CSDN中找到的解答后,重新地编写了LoginServlet中的代码,更改后的代码如下:

package com.ec.action;

import java.io.IOException;

import javax.servlet.ServletContext;
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 com.ec.bean.OperateJDBC;
import com.ec.model.UserModel;
import com.ec.utils.JsonUtils;

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginServlet() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub

	}


	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		HttpSession session = request.getSession(true);
		Object userid = session.getAttribute("userid");
		try {
			if((int)userid == 0) {

			}
		} catch (Exception e) {

		}

		ServletContext application = this.getServletContext();

		String account=request.getParameter("account");
		String password=request.getParameter("password");

		Integer UserId = null;
		try {
			UserId = UserModel.ValidateUser(account,password);
		} catch (Exception e) {
			e.printStackTrace();
		}
		if(UserId != null) {
			request.getSession().setAttribute("user_id", UserId);
			JsonUtils.WriteResponse(response, 200, "登陆成功,即将跳转到管理页面");
		} else {
			JsonUtils.WriteResponse(response, 201, "账号或密码错误");
		}
	}

}

并且编写了“登陆过滤器”————LoginServlet,具体代码如下:

package com.ec.filter;


import javafx.scene.shape.Path;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class LoginFilter implements Filter {

    private static List<String> NotFilterURI;
    private static List<String> NotFilterExt;

    static {
        NotFilterURI = new ArrayList<>();
        NotFilterURI.add("/login.jsp");
        NotFilterURI.add("/login");

        NotFilterExt = new ArrayList<>();
        NotFilterExt.add("js");
        NotFilterExt.add("css");
        NotFilterExt.add("jpg");
        NotFilterExt.add("jpeg");
        NotFilterExt.add("png");
        NotFilterExt.add("gif");
        NotFilterExt.add("eot");
        NotFilterExt.add("svg");
        NotFilterExt.add("ttf");
        NotFilterExt.add("woff");
    }


    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest)servletRequest;
        HttpServletResponse response = (HttpServletResponse)servletResponse;

        String uri = req.getRequestURI().substring(servletRequest.getServletContext().getContextPath().length(), req.getRequestURI().length());

        System.out.println(req.getServletContext().getContextPath());
        System.out.println(uri);

        int lastpoint = uri.lastIndexOf(".");
        if(lastpoint > -1  && uri.length() > lastpoint) {
            String ext = uri.substring(lastpoint+1, uri.length());
            // 过滤掉静态文件
            if(!NotFilterExt.contains(ext)) {
                if(!NotFilterURI.contains(uri)) {
                    HttpSession session = req.getSession(false);
                    if(session == null) {
                        response.sendRedirect(req.getServletContext().getContextPath() + "/login.jsp");
                        return;
                    }
                    Object user_id = session.getAttribute("user_id");

                    if (user_id == null || (Integer) user_id <= 0) {
                        response.sendRedirect(req.getServletContext().getContextPath() + "/login.jsp");
                        return;
                    }
                }
            }
        }
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {

    }
}

在经过了诸多次的请教与试验后,终于成功地更改了遇到的这一问题,如果未登陆,直接访问主页面、事务管理页面以及事务查询页面,会自动跳转到登陆页面,这也保证了管理页面的信息安全性

总结

经过本次的对于别人代码的反向解读后,让我明白:编程届的“大佬”不一定就离我们遥不可及,他们很可能就是我们的舍友,古人云“三人行,必有我师焉。”,我们都在一个缓步上升的阶段,需要做到虚心请教,一起进步。

标签:Java,会议厅,request,HttpServletResponse,response,修改,import,servlet,javax
来源: https://www.cnblogs.com/helloheibai/p/15947798.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有