Java Servlet getServletContext()。getRequestDispatcher在url行中显示属性
我用两个jsp文件和一个控制器构建了一个小servlet 这是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>
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);
}