Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Servlet getServletContext()。getRequestDispatcher在url行中显示属性_Java_Jsp_Servlets - Fatal编程技术网

Java Servlet getServletContext()。getRequestDispatcher在url行中显示属性

Java Servlet getServletContext()。getRequestDispatcher在url行中显示属性,java,jsp,servlets,Java,Jsp,Servlets,我用两个jsp文件和一个控制器构建了一个小servlet 这是login.jsp: <body> <section class="loginform cf"> <form name="login" action="controller/login" method="get" onsubmit="return validateForm()" accept-charset="utf-8"> <ul>

我用两个jsp文件和一个控制器构建了一个小servlet

这是
login.jsp

<body>
    <section class="loginform cf">
    <form name="login" action="controller/login" method="get" onsubmit="return validateForm()"
        accept-charset="utf-8">
        <ul>
            <li><label for="username">Username</label> <input type="text"
                name="username" ></li>
            <li><label for="password">Password</label> <input
                type="password" name="password" ></li>
            <li><input type="submit" value="Login"></li>
        </ul>
    </form>

    <form  action="http://localhost:8080/ToDoListProj" method="get">
         <input title="Register" type="submit" value="Not Yet A Member?" formaction="register.jsp"/>
        <br/>
    </form>
    </section>
</body>

我如何解决这个问题?

您应该将
method=“get”
更改为
method=“post”


GET
方法将数据添加到URL中,与您的情况相同。处理身份验证时,切勿使用
get
方法。表单。

使用Http POST而不是GET:

在JSP中

<form name="login" action="controller/login" method="post"

您必须将
get
更改为
post
方法

 <form name="login" action="controller/login" method="post" onsubmit="return validateForm()"
如果使用https而不是http,则HttpGet是“OK”。Https将加密get参数(但例如,整个请求url可能未加密地保存在服务器日志中,因此HttpPost将是首选方法)

除了所有的答案都说您应该使用
method=post
,您还可以将
doGet
中的代码放在自己的函数中,比如说
login
,这样您就可以同时使用HttpPost和HttpGet:

private RequestDispatcher login(HttpServletRequest request, HttpServletResponse response) {
    String path = request.getPathInfo();
    System.out.println(path);
    RequestDispatcher dispatcher = null;

    switch(path)
    {
    case "/login":
    {
        try {
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            if(username != null && password != null && isAlphaNumeric(username) && isAlphaNumeric(password))
            {
                List<User> usersList = il.ac.hit.model.HibernateToDoListDAO.getInstance().getUsersList();
                for(User user : usersList)
                {
                    if(user.getName().equals(username) && user.getPassword().equals(password))
                    {
                        Cookie cookie = new Cookie("UserId", username);
                        cookie.setPath("/");
                        response.addCookie(cookie);
                        request.getSession().setAttribute("UserID", username);
                        request.getSession().setAttribute("table", HibernateToDoListDAO.getInstance().getItemsList(username));
                        dispatcher = getServletContext().getRequestDispatcher("/view.jsp");
                        break;
                    }   
                }
            }
            else
            {
                dispatcher = getServletContext().getRequestDispatcher("/wronglogin.jsp");
            }

        } catch (ToDoListPlatformException e) {

            dispatcher = getServletContext().getRequestDispatcher("/wronglogin.jsp");
        }

        break;
    }

    return dispatcher;  
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    login(request, response).forward(request, response);
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    login(request, response).forward(request, response);
}
private RequestDispatcher登录(HttpServletRequest请求、HttpServletResponse响应){
字符串路径=request.getPathInfo();
System.out.println(路径);
RequestDispatcher=null;
交换机(路径)
{
案例“/登录”:
{
试一试{
字符串username=request.getParameter(“用户名”);
字符串密码=request.getParameter(“密码”);
如果(用户名!=null&&password!=null&&isAlphaNumeric(用户名)&&isAlphaNumeric(密码))
{
List usersList=il.ac.hit.model.HibernateToDoListDAO.getInstance().getUsersList();
for(用户:usersList)
{
if(user.getName().equals(用户名)和&user.getPassword().equals(密码))
{
Cookie Cookie=新Cookie(“用户ID”,用户名);
cookie.setPath(“/”);
addCookie(cookie);
request.getSession().setAttribute(“UserID”,用户名);
request.getSession().setAttribute(“表”,HibernateToDoListDAO.getInstance().getItemsList(用户名));
dispatcher=getServletContext().getRequestDispatcher(“/view.jsp”);
打破
}   
}
}
其他的
{
dispatcher=getServletContext().getRequestDispatcher(“/ErrorLogin.jsp”);
}
}捕获(ToDoListPlatforme异常){
dispatcher=getServletContext().getRequestDispatcher(“/ErrorLogin.jsp”);
}
打破
}
返回调度员;
}
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
登录(请求,响应)。转发(请求,响应);
}
/**
*@请参阅HttpServlet#doPost(HttpServletRequest请求,HttpServletResponse响应)
*/
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
登录(请求,响应)。转发(请求,响应);
}

谢谢,它成功了。现在我有另一个问题。登录后,servlet将url转发到view.jsp,这是一个项目视图。有一个“添加项目”按钮。添加项目后,它返回到视图页面并在列表中显示。但如果我点击“刷新”,项目将再次被添加。@Dan刷新将触发“添加项目”再次操作。有一种模式可以处理此问题,请参阅。
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
    // read login data from request like you do now in doGet...
 <form name="login" action="controller/login" method="post" onsubmit="return validateForm()"
private RequestDispatcher login(HttpServletRequest request, HttpServletResponse response) {
    String path = request.getPathInfo();
    System.out.println(path);
    RequestDispatcher dispatcher = null;

    switch(path)
    {
    case "/login":
    {
        try {
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            if(username != null && password != null && isAlphaNumeric(username) && isAlphaNumeric(password))
            {
                List<User> usersList = il.ac.hit.model.HibernateToDoListDAO.getInstance().getUsersList();
                for(User user : usersList)
                {
                    if(user.getName().equals(username) && user.getPassword().equals(password))
                    {
                        Cookie cookie = new Cookie("UserId", username);
                        cookie.setPath("/");
                        response.addCookie(cookie);
                        request.getSession().setAttribute("UserID", username);
                        request.getSession().setAttribute("table", HibernateToDoListDAO.getInstance().getItemsList(username));
                        dispatcher = getServletContext().getRequestDispatcher("/view.jsp");
                        break;
                    }   
                }
            }
            else
            {
                dispatcher = getServletContext().getRequestDispatcher("/wronglogin.jsp");
            }

        } catch (ToDoListPlatformException e) {

            dispatcher = getServletContext().getRequestDispatcher("/wronglogin.jsp");
        }

        break;
    }

    return dispatcher;  
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    login(request, response).forward(request, response);
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    login(request, response).forward(request, response);
}