实际上我是通过隐藏的字段概念和使用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中的逻辑也将执行。 如何解决这个问题?
答案 0 :(得分:0)
如果您只想显示“禁用JavaScript”,则可以在HTML中执行以下操作:
<noscript>JavaScript is disabled</noscript>
如果在禁用JavaScript时您想在后端执行某些操作,请发表评论,我会更新答案。
看起来您正试图在客户端验证用户输入。如果是这种情况,请不要这样做,因为可以修改客户端JavaScript,从而破坏验证代码。用户输入应始终在服务器端进行验证(客户端和服务器端也可以,客户端只会用于提供良好的错误消息并减少对服务器的请求数量)。