如何从servlet检查客户端是否启用了Java Script?

时间:2015-09-16 15:07:10

标签: javascript java

实际上我是通过隐藏的字段概念和使用cookie完成的。但是这些方法存在一个问题。如果用户或客户端手动将查询字符串添加到浏览器中的URL和cookie,那么我们的网站将接受是启用了javascript。那请告诉我其他方法。 这是我的JSP页面   -

<%@ page language="java"%>
       <html>
       <head>
       <title>Registration</title>
       <script type="text/javascript" src="../js/Validation.js"></script>  
       </head>
       <body>
       <form action="<%=request.getContextPath()%>/RegisterUser" method="post" onsubmit="return javascript:validate();">
       UserName : <input type="text" name="userName" id="userName" placeholder="Enter User Name">
       Email : <input type="text" name="email" id="email" placeholder="Enter Email Id">
       Password : <input type="password" name="password" id="password" placeholder="Enter Password">
       Retype-Password : <input type="password" name="repassword" id="repassword" placeholder="Enter Password Again">  
       <input type="submit" value="Register">
       <input type="hidden" name="jsStatus" id="jsStatus">
       </form>
       </body>
       </html>

我有Java脚本

function validate() {
    var userName = document.getElementById("userName").value;
    var email = document.getElementById("email").value;
    var password = document.getElementById("password").value;
    var repassword = document.getElementById("repassword").value;
    var jsStatus = document.getElementById("jsStatus").value = "enabled";
    return true;
}

我的servlet:

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/RegisterUser")
public class RegisterServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

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

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//      general settings
        PrintWriter pw = response.getWriter();
        response.setContentType("text/html");

//      Reading request parameters
        if( request.getParameter("jsStatus").equalsIgnoreCase("enabled") ){
            pw.println("<font>Java Script Is Enabled</font>");
        }
        else{
            pw.println("<font>Java Script Is Disabled</font>");
        }
    }
}

问题:现在,如果我点击注册按钮,它会很顺利,如果启用则启用显示JavaScript,否则禁用JavaScript。  但是,如果我通过将查询字符串扩展为jsStatus = enabled来手动向此servlet发出请求,那么我的servlet也将显示javascript已启用,然后我的servlet中的逻辑也将执行。 如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果您只想显示“禁用JavaScript”,则可以在HTML中执行以下操作:

<noscript>JavaScript is disabled</noscript>

如果在禁用JavaScript时您想在后端执行某些操作,请发表评论,我会更新答案。

看起来您正试图在客户端验证用户输入。如果是这种情况,请不要这样做,因为可以修改客户端JavaScript,从而破坏验证代码。用户输入应始终在服务器端进行验证(客户端和服务器端也可以,客户端只会用于提供良好的错误消息并减少对服务器的请求数量)。