response.sendRedirect不使用angular js和java servlet?

response.sendRedirect不使用angular js和java servlet?,java,angularjs,servlets,Java,Angularjs,Servlets,我有以下web应用程序: 我的html页面:- <!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html ng-app="app"> <title>BPL Auction 2016</title> <head> <

我有以下web应用程序:

我的html页面:-

    <!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html ng-app="app">
    <title>BPL Auction 2016</title>
    <head>
    <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
    <meta content="utf-8" http-equiv="encoding">
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="description" content="" />
    <!-- css -->
    <link href="css/bootstrap.min.css" rel="stylesheet" />
    <link href="css/style1.css" rel="stylesheet" />
    <!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
    <!--[if lt IE 9]>
          <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
        <![endif]-->
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js"></script>
    <script src="js/angularref.js"></script>
    </head>
    <body ng-controller="MyController">
    <div id ="header">
    <h3 id="title">BPL Auction 2016</h3>
    </div>
    <!-- Top content -->
            <div class="top-content">

                <div class="inner-bg">
                    <div class="container">
                        <div class="row">
                            <div class="col-sm-8 col-sm-offset-2 text">
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-sm-6 col-sm-offset-3 form-box">
                                <div class="form-top">
                                    <div class="form-top-left">
                                        <h3>Login to our site</h3>
                                        <p>Enter your username and password to log on:</p>
                                    </div>
                                    <div class="form-top-right">
                                        <i class="fa fa-lock"></i>
                                    </div>
                                </div>
                                <div class="form-bottom">
                                    <form name="loginForm" role="form" method="post" class="login-form">
                                        <div class="form-group">
                                            <label class="sr-only" for="form-username">Username or Company Email Id</label>
                                            <input type="text" ng-model="username" name="form-username" placeholder="Username or Email Id..." class="form-username form-control" id="form-username" required>

                                        </div>
                                        <div class="form-group">
                                            <label class="sr-only" for="form-password">Password</label>
                                            <input type="password" ng-model="password" name="form-password" placeholder="Password..." class="form-password form-control" id="form-password" required>
                                            <span>{{validationMessage}}</span>
                                        </div>
    <div class="social-login-buttons">

                                        <button type="submit" ng-click="getDataFromServer()" class="btn">Sign in!</button>
    </div>
                                    </form>
                                </div>
                            </div>
                        </div>

                    </div>
                </div>

            </div>
    <script src="js/jquery.js"></script>
    <script src="js/jquery.easing.1.3.js"></script>
    <script src="js/bootstrap.min.js"></script>

    </body>
    </html>
我的Servlet类:-

package com.bpl.loginservlet;

import java.io.BufferedReader;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

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 org.json.JSONObject;

/**
 * Servlet implementation class LoginBPLServler
 */
public class LoginBPLServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private static final String SALT = "my-salt-text";

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

        StringBuilder sb = new StringBuilder();
        BufferedReader br = request.getReader();
        String str = null;
        while ((str = br.readLine()) != null) {
            sb.append(str);
        }
        JSONObject jObj = new JSONObject(sb.toString());


        String username = jObj.getString("username");
        String unHashedPassword = jObj.getString("password");
        //signup(username, unHashedPassword);
        //response.sendRedirect("/BPL2016/second.html");

        // login should succeed.
        if (login(username, unHashedPassword))
        {
            System.out.println("user login successfull.");


            /*String successMessage ="Login Success. Redirecting ...";
            response.setContentType("text/plain");
            response.getWriter().write(successMessage);*/
            response.sendRedirect("http:/localhost:8080/BPL2016/second.html");
        }

        else
        {



        String error ="Invalid UserName or Password";
        response.setContentType("text/plain");
        response.getWriter().write(error);


        }

    }


    public void signup(String username, String password) {
    String saltedPassword = SALT + password;
    String hashedPassword = generateHash(saltedPassword);
    insertIntoDB(username,hashedPassword);
}

public void insertIntoDB(String username,String hashedPassword)
{
     Connection con;
        PreparedStatement pst;


            try{

                //MAKE SURE YOU KEEP THE mysql_connector.jar file in java/lib folder
                //ALSO SET THE CLASSPATH
                Class.forName("com.mysql.jdbc.Driver");
                con=DriverManager.getConnection("jdbc:mysql://localhost:3306/bpl","root","root");
                            pst=con.prepareStatement("insert into tb_bpl_user_login(username,password) values(?,?)");
                            pst.setString(1, username);
                            pst.setString(2, hashedPassword);
                            pst.executeUpdate();


               }
            catch (Exception e) 
            {
                System.out.println(e);
            }


}
public Boolean login(String username, String password) {
    Boolean isAuthenticated = false;

    // remember to use the same SALT value use used while storing password
    // for the first time.
    String saltedPassword = SALT + password;
    String hashedPassword = generateHash(saltedPassword);
    System.out.println(hashedPassword);
    String storedPasswordHash = getFromDB(username);
    if(hashedPassword.equals(storedPasswordHash)){
        isAuthenticated = true;
    }else{
        isAuthenticated = false;
    }
    return isAuthenticated;
}

public String getFromDB(String username)
{
    Connection con;
    PreparedStatement pst;
    String storedPassword = "";
    ResultSet rs;
    try
    {
     Class.forName("com.mysql.jdbc.Driver");
     con=DriverManager.getConnection("jdbc:mysql://localhost:3306/bpl","root","root");
                 pst=con.prepareStatement("select password from tb_bpl_user_login where username =?");
                 pst.setString(1, username);
                rs = pst.executeQuery();
                while(rs.next())
                {
                    storedPassword = rs.getString("password");
                    break;
                }


    }
    catch(Exception e)
    {
        System.out.println(e.getMessage());
    }
    return storedPassword;
}
public static String generateHash(String input) {
    StringBuilder hash = new StringBuilder();

    try {
        MessageDigest sha = MessageDigest.getInstance("SHA-1");
        byte[] hashedBytes = sha.digest(input.getBytes());
        char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                'a', 'b', 'c', 'd', 'e', 'f' };
        for (int idx = 0; idx < hashedBytes.length; ++idx) {
            byte b = hashedBytes[idx];
            hash.append(digits[(b & 0xf0) >> 4]);
            hash.append(digits[b & 0x0f]);
        }
    } catch (NoSuchAlgorithmException e) {
        // handle error here.
    }

    return hash.toString();
}


}
package com.bpl.loginservlet;
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.security.MessageDigest;
导入java.security.NoSuchAlgorithmException;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.PreparedStatement;
导入java.sql.ResultSet;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入org.json.JSONObject;
/**
*Servlet实现类LoginBPLServler
*/
公共类LoginBPLServlet扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
私有静态最终字符串SALT=“我的SALT文本”;
/**
*@请参阅HttpServlet#doPost(HttpServletRequest请求,HttpServletResponse响应)
*/
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
StringBuilder sb=新的StringBuilder();
BufferedReader br=request.getReader();
字符串str=null;
而((str=br.readLine())!=null){
某人附加(str);
}
JSONObject jObj=新的JSONObject(sb.toString());
字符串username=jObj.getString(“用户名”);
字符串unHashedPassword=jObj.getString(“密码”);
//注册(用户名,unHashedPassword);
//response.sendRedirect(“/BPL2016/second.html”);
//登录应该成功。
if(登录名(用户名、未登录密码))
{
System.out.println(“用户登录成功”);
/*String successage=“登录成功。重定向…”;
response.setContentType(“文本/普通”);
response.getWriter().write(成功消息)*/
sendRedirect(“http:/localhost:8080/BPL2016/second.html”);
}
其他的
{
字符串错误=“无效的用户名或密码”;
response.setContentType(“文本/普通”);
response.getWriter().write(错误);
}
}
公共无效注册(字符串用户名、字符串密码){
字符串saltedPassword=SALT+密码;
字符串hashedPassword=generateHash(saltedPassword);
insertIntoDB(用户名、哈希密码);
}
public void insertIntoDB(字符串用户名、字符串哈希密码)
{
连接con;
编制报表pst;
试一试{
//确保将mysql_connector.jar文件保存在java/lib文件夹中
//还要设置类路径
Class.forName(“com.mysql.jdbc.Driver”);
con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/bpl“,”根“,”根“);
pst=con.prepareStatement(“插入tb_bpl_用户登录(用户名、密码)值(?,)”;
pst.setString(1,用户名);
pst.setString(2,哈希密码);
pst.executeUpdate();
}
捕获(例外e)
{
系统输出打印ln(e);
}
}
公共布尔登录(字符串用户名、字符串密码){
布尔值isAuthenticated=false;
//记住在存储密码时使用相同的SALT值
//这是第一次。
字符串saltedPassword=SALT+密码;
字符串hashedPassword=generateHash(saltedPassword);
System.out.println(hashedPassword);
String storedPasswordHash=getFromDB(用户名);
if(hashedPassword.equals(storedPasswordHash)){
isAuthenticated=true;
}否则{
isAuthenticated=false;
}
返回未经验证;
}
公共字符串getFromDB(字符串用户名)
{
连接con;
编制报表pst;
字符串storedPassword=“”;
结果集rs;
尝试
{
Class.forName(“com.mysql.jdbc.Driver”);
con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/bpl“,”根“,”根“);
pst=con.prepareStatement(“从tb\u bpl\u用户登录中选择密码,其中用户名=?”;
pst.setString(1,用户名);
rs=pst.executeQuery();
while(rs.next())
{
storedPassword=rs.getString(“密码”);
打破
}
}
捕获(例外e)
{
System.out.println(e.getMessage());
}
返回存储密码;
}
公共静态字符串生成器哈希(字符串输入){
StringBuilder哈希=新的StringBuilder();
试一试{
MessageDigest sha=MessageDigest.getInstance(“sha-1”);
byte[]hashedBytes=sha.digest(input.getBytes());
字符[]位={0',1',2',3',4',5',6',7',8',9',0,,
‘a’、‘b’、‘c’、‘d’、‘e’、‘f’};
对于(int idx=0;idx>4]);
附加(数字[b&0x0f]);
}
}捕获(无算法异常){
//在这里处理错误。
}
返回hash.toString();
}
}
输入正确的登录凭据后,我无法重定向到second.html页面。我得到的答复如下:-


我应该做哪些更改?

您正在重定向ajax请求,而不是页面本身。除非AngularJS的ajax引擎将ajax请求上的重定向解释为整页重定向(鉴于这个问题,显然不是这样),否则您需要将所需的目标URL写入响应正文,并自己摆弄
window.location
。这个问题至少不是由Javaservlet引起的,而是对ajax工作原理的误解。您正在重定向ajax请求,而不是页面本身。除非AngularJS的ajax引擎将ajax请求上的重定向解释为整页重定向
package com.bpl.loginservlet;

import java.io.BufferedReader;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

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 org.json.JSONObject;

/**
 * Servlet implementation class LoginBPLServler
 */
public class LoginBPLServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private static final String SALT = "my-salt-text";

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

        StringBuilder sb = new StringBuilder();
        BufferedReader br = request.getReader();
        String str = null;
        while ((str = br.readLine()) != null) {
            sb.append(str);
        }
        JSONObject jObj = new JSONObject(sb.toString());


        String username = jObj.getString("username");
        String unHashedPassword = jObj.getString("password");
        //signup(username, unHashedPassword);
        //response.sendRedirect("/BPL2016/second.html");

        // login should succeed.
        if (login(username, unHashedPassword))
        {
            System.out.println("user login successfull.");


            /*String successMessage ="Login Success. Redirecting ...";
            response.setContentType("text/plain");
            response.getWriter().write(successMessage);*/
            response.sendRedirect("http:/localhost:8080/BPL2016/second.html");
        }

        else
        {



        String error ="Invalid UserName or Password";
        response.setContentType("text/plain");
        response.getWriter().write(error);


        }

    }


    public void signup(String username, String password) {
    String saltedPassword = SALT + password;
    String hashedPassword = generateHash(saltedPassword);
    insertIntoDB(username,hashedPassword);
}

public void insertIntoDB(String username,String hashedPassword)
{
     Connection con;
        PreparedStatement pst;


            try{

                //MAKE SURE YOU KEEP THE mysql_connector.jar file in java/lib folder
                //ALSO SET THE CLASSPATH
                Class.forName("com.mysql.jdbc.Driver");
                con=DriverManager.getConnection("jdbc:mysql://localhost:3306/bpl","root","root");
                            pst=con.prepareStatement("insert into tb_bpl_user_login(username,password) values(?,?)");
                            pst.setString(1, username);
                            pst.setString(2, hashedPassword);
                            pst.executeUpdate();


               }
            catch (Exception e) 
            {
                System.out.println(e);
            }


}
public Boolean login(String username, String password) {
    Boolean isAuthenticated = false;

    // remember to use the same SALT value use used while storing password
    // for the first time.
    String saltedPassword = SALT + password;
    String hashedPassword = generateHash(saltedPassword);
    System.out.println(hashedPassword);
    String storedPasswordHash = getFromDB(username);
    if(hashedPassword.equals(storedPasswordHash)){
        isAuthenticated = true;
    }else{
        isAuthenticated = false;
    }
    return isAuthenticated;
}

public String getFromDB(String username)
{
    Connection con;
    PreparedStatement pst;
    String storedPassword = "";
    ResultSet rs;
    try
    {
     Class.forName("com.mysql.jdbc.Driver");
     con=DriverManager.getConnection("jdbc:mysql://localhost:3306/bpl","root","root");
                 pst=con.prepareStatement("select password from tb_bpl_user_login where username =?");
                 pst.setString(1, username);
                rs = pst.executeQuery();
                while(rs.next())
                {
                    storedPassword = rs.getString("password");
                    break;
                }


    }
    catch(Exception e)
    {
        System.out.println(e.getMessage());
    }
    return storedPassword;
}
public static String generateHash(String input) {
    StringBuilder hash = new StringBuilder();

    try {
        MessageDigest sha = MessageDigest.getInstance("SHA-1");
        byte[] hashedBytes = sha.digest(input.getBytes());
        char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                'a', 'b', 'c', 'd', 'e', 'f' };
        for (int idx = 0; idx < hashedBytes.length; ++idx) {
            byte b = hashedBytes[idx];
            hash.append(digits[(b & 0xf0) >> 4]);
            hash.append(digits[b & 0x0f]);
        }
    } catch (NoSuchAlgorithmException e) {
        // handle error here.
    }

    return hash.toString();
}


}