【问题标题】:suggestions on creating a admin page using jsp关于使用 jsp 创建管理页面的建议
【发布时间】:2014-08-14 22:51:14
【问题描述】:

我在使用 Java 开发 Web 应用程序方面非常陌生。我开发了一个小型应用程序,它是一个登录和注册页面,两者都运行良好。现在,我决定制作一个管理页面(使用 jsp)。在我的 java 代码中,我控制 jsp 页面的重定向(如果 user!="admin" 然后 home.jsp 否则 user=="admin" 然后 admin.jsp)。在我的管理页面中,我想做的是我希望管理员能够查看所有注册的用户,并可以编辑他们的详细信息或删除他们。有人可以建议我如何实现这一目标。

登录 Servlet.java(我在管理员和普通用户之间决定的代码)

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String email = request.getParameter("email");
        String password = request.getParameter("password");
        String errorMsg = null;
        String name;
        if(email == null || email.equals("")){
            errorMsg ="User Email can't be null or empty";
        }
        if(password == null || password.equals("")){
            errorMsg = "Password can't be null or empty";
        }

        if(errorMsg != null){
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/login.html");
            PrintWriter out= response.getWriter();
            out.println("<font color=red>"+errorMsg+"</font>");
            rd.include(request, response);
        }else{

        Connection con = (Connection) getServletContext().getAttribute("DBConnection");
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = con.prepareStatement("select id, name, email,country from Users where email=? and password=?");
            ps.setString(1, email);
            ps.setString(2, password);
            rs = ps.executeQuery();

            if(rs != null && rs.next()){

                User user = new User(rs.getString("name"), rs.getString("email"), rs.getString("country"), rs.getInt("id"));
               name=rs.getString("name");
               System.out.println("Name:"+ name);
                //if(rs.getString("name")!="admin")
               if(!name.equalsIgnoreCase("admin"))
                {
                logger.info("User found with details="+user);
                HttpSession session = request.getSession();
                session.setAttribute("User", user);
                response.sendRedirect("home.jsp");
                }
                // String rs1=rs.getString();
                else if(name.equalsIgnoreCase("admin"))
                {
                logger.info("Admin found with details="+user);
                HttpSession session = request.getSession();
                session.setAttribute("User", user);
                response.sendRedirect("admin.jsp");
                }

            }else{
                RequestDispatcher rd = getServletContext().getRequestDispatcher("/login.html");
                PrintWriter out= response.getWriter();
                logger.error("User not found with email="+email);
                out.println("<font color=red>No user found with given email id, please register first.</font>");
                rd.include(request, response);
            }
        } catch (SQLException e) {
            e.printStackTrace();
            logger.error("Database connection problem");
            throw new ServletException("DB Connection problem.");
        }finally{
            try {
                rs.close();
                ps.close();
            } catch (SQLException e) {
                logger.error("SQLException in closing PreparedStatement or ResultSet");;
            }

        }
        }

home.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page import="com.javadbproject.util.User"%>
<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Home Page</title>

<link rel="stylesheet" type="text/css" href="<c:url value='/loginstyle.css'/>"> 

</head>
<body>
<%User user = (User) session.getAttribute("User"); %>
<h3>Hi <%=user.getName() %></h3>
<strong>Your Email</strong>: <%=user.getEmail() %><br>
<strong>Your Country</strong>: <%=user.getCountry() %><br>
<br>
<form action="Logout" method="post">
<input type="submit" value="Logout" >

</form>
</body>
</html>

AuthenticationServlet

package com.javadbproject.servlet.filters;


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;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

@WebFilter("/AuthenticationFilter")
public class AuthenticationFilter implements Filter {

    private Logger logger = Logger.getLogger(AuthenticationFilter.class);

    public void init(FilterConfig fConfig) throws ServletException {
        logger.info("AuthenticationFilter initialized");
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;

        String uri = req.getRequestURI();
        logger.info("Requested Resource::"+uri);

        HttpSession session = req.getSession(false);

        if(session == null && !(uri.endsWith("html") || uri.endsWith("Login") || uri.endsWith("Register"))){
            logger.error("Unauthorized access request");
            res.sendRedirect("login.html");
        }else{
            // pass the request along the filter chain
            chain.doFilter(request, response);
        }


    }

    public void destroy() {
        //close any resources here
    }

}

我希望在与 home.jsp 类似的行上开发我的 admin.jsp

谢谢!!

【问题讨论】:

    标签: java jsp


    【解决方案1】:
    1. 你需要一个数据库mysql 会很好开始。

    2. 你需要有一个mysql connector jar file

    3. 例如创建一个class User

      public class User{
         String iduser;
         String name;
         String username;
         String password;
      
         //setters and getters
      }
      
    4. 在 mysql 或您拥有的任何数据库中为用户创建一个表。

      创建表sampleapplication.user ( iduser INT NOT NULL AUTO_INCREMENT , name VARCHAR(45) NULL , username VARCHAR(45) NULL , usercol VARCHAR(45) NULL , 主键 (iduser) );

    5. 让我们开始database with java。 :) 在您的构建路径(right click project &gt; Build path &gt; Configure build path &gt; Click Add external jar &gt; Locate mysql connector) 中添加mysql 连接器jar 文件,并将其粘贴到您的web-inf&gt;lib 文件夹中。

    6. 创建一个class for database transaction。为reference

      public class DatabaseTransaction{
      
         public List<User> readDataBase() throws Exception {
           try {
              // this will load the MySQL driver, each DB has its own driver
              Class.forName("com.mysql.jdbc.Driver");
              // setup the connection with the DB.
              connect = DriverManager
                .getConnection("jdbc:mysql://localhost/database?"
                     + "user=sqluser&password=sqluserpw");
      
              // statements allow to issue SQL queries to the database
              statement = connect.createStatement();
              // resultSet gets the result of the SQL query
              resultSet = statement
                   .executeQuery("select * from user");
      
              List<User> listOfUsers=new ArrayList<User>();
               User userToAdd;
      
              while (resultSet.next()) {
                  userToAdd = new User();
                  userToAdd.setUsername(resultSet.getString("username"));
                  userToAdd.setPassword(resultSet.getString("pword"));
                  userToAdd.setUserid(resultSet.getString("userid"));
                  userToAdd.setName(resultSet.getString("name"));
                  listOfUsers.add(userToAdd);
              }
          }
        }
      
    7. 拨打DatabaseTransaction到您的filter/controller/servlet

      DatabaseTransaction databaseTransaction = DatabaseTransaction();
      
      //use your `HttpServletRequest`
      //parameters are key and value
      //store as attribute to access in jsp page
      request.setAttribute("userList",databaseTransaction.readDataBase());
      
      //then forward the page using `HttpServletRequest` 
      //dont use response.redirect(); you wont be able to use the attribute because you are using a response 
      //filename of the jsp
      request.getRequestDispatcher("adminpage").forward(request, response);
      
    8. 在您的 jsp 页面中。使用JSTL

       //import the core tag library
        <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
      
        //lastly loop through the list attribute
         <table>
           <thead>
             <tr>
               <td>id</td>
               <td>Name</td>
               <td>Username</td>
             </tr>
           </thead>
      
           <tbody>
              <c:foreach items="${userList}" var="user">
                <tr>
                   <td><c:out value="${user.iduser}"/></td>
                   <td><c:out value="${user.name}"/></td>
                   <td><c:out value="${user.username}"/></td>
                </tr>
              </c:foreach>
          </tbody>
        </table>
      

    就是这样:)

    【讨论】:

    • 谢谢,这是一个很好的例子。我试图将它与我已经拥有的代码联系起来。我正在使用 Oracle 数据库。我会尝试你的输入。再次感谢!!
    • 所以你只需要检索它们并放入一个列表
    【解决方案2】:

    Servlet Filter 是您所需要的,您需要为每个用户设置一个逻辑角色,并为每个配置的角色提供允许的 URL 模式,以及一个过滤器过滤每个请求并根据它阻止/允许

    【讨论】:

    • 我能知道如何实现吗?
    • 我不知道如何通过 Servlet 过滤器来显示管理页面,其中包含注册用户列表以及管理员编辑、删除这些用户的灵活性。请指导我
    猜你喜欢
    • 2018-05-24
    • 2014-01-28
    • 1970-01-01
    • 2017-02-06
    • 2021-01-04
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 2018-07-02
    相关资源
    最近更新 更多