2017-06-29 81 views
1

我做了一个登录表单,它比较从文本文件输入的用户名和密码,然后显示用户名/密码是不正确还是允许访问。Javascript代码来获得响应,并根据servlet的响应行动

<form role="form" action="/traveositelogin" method="post"> 
         <div class="form-group"> 
          <label class="sr-only" for="form-username">Username</label> 
          <input type="text" placeholder="Username..." class="form-username form-control" id="username"> 
          <p id="UsernameIncorrect" hidden>Incorrect Username. Try Again</p> 
         </div> 
         <div class="form-group"> 
          <label class="sr-only" for="form-password">Password</label> 
          <input type="password" placeholder="Password..." class="form-password form-control" id="password"> 
          <P id="PasswordIncorrect" hidden>Incorrect Password. Try Again.</p> 
         </div> 
           <button type="submit" class="btn" id="Login">Login</button> 
            <p><a href="contact.html"> Forgot Password?</a></p> 

        <div class="form-group"> 
       </div> 

这是我的servlet代码:

package com.traveosoft; 

import java.io.IOException; 
import java.util.Properties; 

import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.Scanner; 
import java.io.FileInputStream; 
import java.io.InputStreamReader; 

public class TraveoWebsiteLoginServlet extends HttpServlet { 
    @Override 
    public void doGet(HttpServletRequest req, HttpServletResponse resp) 
     throws IOException { 
     resp.setContentType("text/plain"); 
     resp.getWriter().println("Hello, this is a testing servlet. \n\n"); 
     Properties p = System.getProperties(); 
     p.list(resp.getWriter()); 

    } 

    public void doPost(HttpServletRequest req, HttpServletResponse resp) 
      throws IOException { 
      String filePath = "{login.txt}"; 
      String username = null; 
      String password = null; 

     //resp.setContentType("text/plain"); 
     //resp.getWriter().println("Hello, this is a testing servlet. Post method \n\n"); 
     //Properties p = System.getProperties(); 
     //p.list(resp.getWriter()); 

     if (req.getParameter("Login")!= null) 
     { 
      username = req.getParameter("username"); 
      password = req.getParameter("password"); 
      //resp.sendRedirect("index.html"); 
     } 
    try 
      { 
       FileInputStream fstream = new FileInputStream("login.txt"); 
       // Use DataInputStream to read binary NOT text. 
       BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 
       String strLine; 
       int count = 0; 

       while((strLine = br.readLine())!= null) 
       { 
        //Enter userName 
        String[] creds = strLine.split(","); 
        System.out.println("creds[0], creds[1]:" + creds[0] + "," +creds[1]); 
        //System.out.println("User name from the file is:"+ creds[0]); 
        if (creds[0].equals(username)) 
        { 
         //user name matches. So we need to check for password now 
         count++;       
         if (creds[1].equals (password)) 
         { 
          //Great... password also matches. Allow the user access to our repository 
          System.out.println("Allow access"); 
         } 
         else 
         { 
          // Password didn't match. Ask the user to reenter the password 
          System.out.println("Wrong password. Try Again."); 
         } 
         break; 
        } 

        //strLine = br.readLine(); 
        //count++; 
        //Enter Password 
        //System.out.println("Password from the file is:"+ creds[1]); 
       } 
       if (count == 0) 
       { 
        // No user name matched with the user name entered by the user. So user name itself is wrong 
        System.out.println("Your user name is wrong. Try Again."); 
       } 
       fstream.close(); 
       br.close(); 
      } 
      catch (Exception e) 
      { 
       System.err.println("Error: " + e.getMessage()); 
      } 
     } 

} 

我怎么能写javascript代码,当用户名是错误的,打印“的用户名是错误的”;密码错误,则打印“密码错误”;如果两者都是正确的,则允许我将超链接引用放置在保存资源的页面上。

我将不胜感激javascript中的示例代码(而不是jsp文件)。我仍然在学习这一切,任何帮助将非常感激。提前致谢。

+0

相关链接:[“用户名和/或密码无效” - 为什么网站显示这种消息而不是通知用户哪一个错误?](https://security.stackexchange.com/questions/17816/username-and-or-password-invalid-why-do-websites-show-this - 消息-I /) – Andreas

+0

@Andreas我想根据回应编写一段JavaScript代码。 –

回答

0

如果我理解正确,您希望将响应对象(或称为消息)从服务器端发送到客户端直接发送给JS,而不是通过JSP发送它。
为了做到这一点,你需要一些更加努力做好...
你可以按照下面的步骤:
1.创建一个响应对象。
2.将该对象转换为JSON格式。
3.将您的响应内容类型设置为text/json并设置响应。


// Response对象将被发送到JavaScript的

  public class ResponseMessage { 
       private boolean isLoginSuccess; 
       private String errorMessage; 

       // Getters and setters ... 
      } 

      // Servlet code 

      ResponseMessage message = new ResponseMessage(); 
      message.setError(true); 
      message.setErrorMessage("Your error message"); 
      Gson gson = new Gson(); // GSON: library to convert Java object to JSON 
      String content = gson.toJson(message); 
      response.setContentType("text/json"); 
      response.getWriter().print(content); 

JS代码

function processRequest() { 
var result = jQuery.ajax ({ 
    url: "your.url", 
    method: "post", 
    async: false, 
    data: "" 
}); 

// Create JS object from JSON 
var message = jQuery.parseJSON(result.responseText); 

// Now you can show your message 
if(message.isLoginSuccess) { 
    alert("Welcome"); 
}else{ 
    alert("Login Failed"); 
} 
} 
+0

umm,先生,事情是system.out.print行不能在我的代码中工作,就像他们不打印servlet中的文本,我可以做到这一点的任何方法。因为我对此非常陌生,所以我不熟悉Getters和Setters。 –

+0

嗨Rashi,getters和setter只不过是简单的方法,分别返回和设置类属性的值。 Like public getMessage(){ return this.mesage; } – Krishnan

+0

@RashiSrivastava我建议你通过一些servlet的基本概念。您可以参考一些在线教程网站,然后从高级概念开始。祝你好运! – Krishnan