我刚从这篇文章doGet and doPost in Servlets和Servlet returns "HTTP Status 404 The requested resource (/servlet) is not available"中学到了很多东西。但我有点困惑。我的servlet加载然后通过doGet()重定向到某个页面,但是我不能将相同的servlet用于doPost()并指向另一个页面。我看到404错误 - 未找到。
@WebServlet(name = "LoginServlet", displayName="Login Servlet", urlPatterns={"/LoginServlet"}, loadOnStartup=1)
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/view/Home.jsp").forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userName = request.getParameter("userName");
String password = request.getParameter("password");
UserAccount userAccount = DataDAO.findUser(userName, password);
if(userAccount == null) {
String error = "Invalid User Name or Password";
request.setAttribute("errorMessage", error);
RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher("/WEB_INF/views/Home.jsp");
dispatcher.forward(request,response);
return;
} else{
request.getSession().setAttribute("user",userAccount);
//response.sendRedirect("/WEB_INF/views/index.jsp");
request.getRequestDispatcher("/WEB_INF/views/index.jsp").forward(request,response);
}
}
}
编辑:我尝试添加此注释并从web.xml中删除映射,仍未找到servlet ...
这是我一直试图提交的表格:
<form action="${pageContext.request.contextPath}/LoginServlet" method="post" class="form">
<p>username: <input type="text" name="username" class="username" /></p>
<p>password: <input type="pass" name="password" class="password" /></p>
<p><input type="submit" value="submit" id="loginbutton" class="buttons" /></p>
</form>
web.xml,基于以下内容:@WebServlet annotation with Tomcat 7:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>flashcardshark.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>/Home.jsp</welcome-file>
</welcome-file-list>
<resource-ref>
<res-ref-name>jdbc/FlashCardShark</res-ref-name>
<res-type>javax.sql.ConnectionPoolDataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
</web-app>
然后我根据这些读数在编译源之前更改了java构建路径以加载已编译的源:HTTP 404 not found(Servlet not found)
Equivalent of "Order and export" of Eclipse in Netbeans
...根据我在那里阅读的内容,我在部署到服务器之前开始清理和构建,仍然没有骰子。
使用NetBeans 8.1, GlassFish 4.1.1, Java EE 7 Web和JDK 8
服务器日志:
Info: visiting unvisited references
Info: visiting unvisited references
Info: visiting unvisited references
Info: Loading application [FlashCardSharkWeb] at [/FlashCardSharkWeb]
Info: FlashCardSharkWeb was successfully deployed in 201 milliseconds.
Severe: PWC6117: File "null" not found
现在也阅读:https://stackoverflow.com/tags/servlets/info
我也尝试使用get请求访问它但我看到了同样的错误。请帮忙。
编辑:在阅读维基之后,我将所有JSP移动到WEB-INF,将注释更改为@WebServlet("/Home")
并将表单更改为:
<form action="Home" method="post" class="form">
<p>username: <input type="text" name="username" class="username" /></p>
<p>password: <input type="pass" name="password" class="password" /></p>
<p><input type="submit" value="submit" id="loginbutton" class="buttons" /></p>
</form>
...没有骰子,找不到http://localhost:8080/FlashCardSharkWeb/Home。
编辑:
在重新阅读Servlet returns "HTTP Status 404 The requested resource (/servlet) is not available"之后,我再次检查NetBeans是否将编译后的servlet放在WEB-INF文件夹中......:
答案 0 :(得分:0)
问题在于doPost()重定向代码应该是这样的:
<b:eval expr='data:blog.locale.country'/>
<script>
var country = <b:eval expr='data:blog.locale.country'/>;
console.log(country);
</script>