jsp - 除了主页,我的 servlet 不起作用
问题描述
每当我单击第一页上的“添加新书”或“列出所有书籍”按钮时,我都会收到来自 tomcat 服务器的错误提示
"类型状态报告
留言/新
描述 源服务器没有找到目标资源的当前表示或不愿意透露存在的表示。”
我的 servletcontroller.java
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* ControllerServlet.java
* This servlet acts as a page controller for the application, handling all
* requests from the user.
* @author www.codejava.net
*/
public class ControllerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private DBUtils dbUtils;
public void init() {
String jdbcURL = getServletContext().getInitParameter("jdbcURL");
String jdbcUsername = getServletContext().getInitParameter("jdbcUsername");
String jdbcPassword = getServletContext().getInitParameter("jdbcPassword");
dbUtils = new DBUtils(jdbcURL, jdbcUsername, jdbcPassword);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String action = request.getServletPath();
try {
switch (action) {
case "/new":
showNewForm(request, response);
break;
case "/insert":
insertProjectManager(request, response);
break;
case "/delete":
deleteProjectManager(request, response);
break;
case "/edit":
showEditForm(request, response);
break;
case "/update":
updateProjectManager(request, response);
break;
case "/list":
listProjectManager(request, response);
break;
default:
listProjectManager(request, response);
break;
}
} catch (SQLException ex) {
throw new ServletException(ex);
}
}
private void listProjectManager(HttpServletRequest request, HttpServletResponse response)
throws SQLException, IOException, ServletException {
List<ProjectManager> managerList = dbUtils.queryManager();
request.setAttribute("managerList", managerList);
RequestDispatcher dispatcher = request.getRequestDispatcher("ManagerListing.jsp");
dispatcher.forward(request, response);
}
private void showNewForm(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
RequestDispatcher dispatcher = request.getRequestDispatcher("ManagerForm.jsp");
dispatcher.forward(request, response);
}
private void showEditForm(HttpServletRequest request, HttpServletResponse response)
throws SQLException, ServletException, IOException {
int id = Integer.parseInt(request.getParameter("id"));
ProjectManager manager = dbUtils.findProjectManager(id);
RequestDispatcher dispatcher = request.getRequestDispatcher("ManagerForm.jsp");
request.setAttribute("manager", manager);
dispatcher.forward(request, response);
}
private void insertProjectManager(HttpServletRequest request, HttpServletResponse response)
throws SQLException, IOException {
String name = request.getParameter("name");
String pass = request.getParameter("pass");
int projectID = Integer.parseInt(request.getParameter("projectID"));
ProjectManager manager = new ProjectManager(name, pass, projectID);
dbUtils.insertProjectManager(manager);
response.sendRedirect("list");
}
private void updateProjectManager(HttpServletRequest request, HttpServletResponse response)
throws SQLException, IOException {
int id = Integer.parseInt(request.getParameter("id"));
String name = request.getParameter("name");
String pass = request.getParameter("pass");
int projectID = Integer.parseInt(request.getParameter("projectID"));
ProjectManager manager = new ProjectManager(id, name, pass, projectID);
dbUtils.updateProjectManager(manager);
response.sendRedirect("list");
}
private void deleteProjectManager(HttpServletRequest request, HttpServletResponse response)
throws SQLException, IOException {
int id = Integer.parseInt(request.getParameter("id"));
dbUtils.deleteProjectManager(id);
response.sendRedirect("list");
}
}
managerform.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>Books Store Application</title>
</head>
<body>
<center>
<h1>Manager Management</h1>
<h2>
<a href="/new">Add New Book</a>
<a href="/list">List All Books</a>
</h2>
</center>
<div align="center">
<c:if test="${manager != null}">
<form action="update" method="post">
</c:if>
<c:if test="${manager == null}">
<form action="insert" method="post">
</c:if>
<table border="1" cellpadding="5">
<caption>
<h2>
<c:if test="${manager != null}">
Edit manager
</c:if>
<c:if test="${manager == null}">
Add New manager
</c:if>
</h2>
</caption>
<c:if test="${manager != null}">
<input type="hidden" name="id" value="<c:out value='${manager.id}' />" />
</c:if>
<tr>
<th>Title: </th>
<td>
<input type="text" name="title" size="45"
value="<c:out value='${manager.name}' />"
/>
</td>
</tr>
<tr>
<th>Author: </th>
<td>
<input type="text" name="author" size="45"
value="<c:out value='${manager.password}' />"
/>
</td>
</tr>
<tr>
<th>Price: </th>
<td>
<input type="text" name="price" size="5"
value="<c:out value='${manager.projectID}' />"
/>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="Save" />
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
managerlisting.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>Books Store Application</title>
</head>
<body>
<center>
<h1>Books Management</h1>
<h2>
<a href="/new">Add New Book</a>
<a href="/list">List All Books</a>
</h2>
</center>
<div align="center">
<table border="1" cellpadding="5">
<caption><h2>List of Project Managers</h2></caption>
<tr>
<th>ID</th>
<th>NAME</th>
<th>PASSWORD</th>
<th>PROJECTID</th>
<th>Actions</th>
</tr>
<c:forEach var="manager" items="${managerList}">
<tr>
<td><c:out value="${manager.id}" /></td>
<td><c:out value="${manager.name}" /></td>
<td><c:out value="${manager.password}" /></td>
<td><c:out value="${manager.projectID}" /></td>
<td>
<a href="/edit?id=<c:out value='${manager.id}' />">Edit</a>
<a href="/delete?id=<c:out value='${manager.id}' />">Delete</a>
</td>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>
和我的 web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>Books Management Web Application</display-name>
<context-param>
<param-name>jdbcURL</param-name>
<param-value>jdbc:mysql://localhost:3306/demo</param-value>
</context-param>
<context-param>
<param-name>jdbcUsername</param-name>
<param-value>root</param-value>
</context-param>
<context-param>
<param-name>jdbcPassword</param-name>
<param-value>mySQL12.!</param-value>
</context-param>
<servlet>
<servlet-name>ControllerServlet</servlet-name>
<servlet-class>ControllerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ControllerServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/Error.jsp</location>
</error-page>
</web-app>
解决方案
假设您正在从 URI 运行 managerform.jsp,
http://localhost:8080/yourcontextroot/managerform.jsp的链接
href="/新"
将转到不在您的上下文中的http://localhost:8080/new 。正确的链接是http://localhost:8080/yourcontextroot/new
href="new" 这将解析到http://localhost:8080/yourcontextroot/new的链接
还有其他几件事我想提出改进建议。
- 不要为 Servlet 使用默认包
- 不要将 /* 映射用于 servlet 映射(servlet 映射 url 模式中 / 和 /* 之间的区别)
推荐阅读
- javascript - 可以使用 Webpack 一次导入一个模块并让方法可用于多个模块
- python - 使用 HDF5 格式将 pandas 数据帧写入 S3
- c - 打印文件中的字符但省略括号中的字符
- angular - 为什么在传递方法参数时未定义 Ionic ionRefresher 事件?
- azure - 是否有可能使用 Azure 数据工厂将数据从 Azure 数据湖 gen2 传输到 Azure 事件中心?
- ios - 如何使用 Swift Code 检索快照计数
- apache-kafka - 如何备份 Kafka 的主题配置?
- python - 如何在 Redis 中将订阅者注册为 Python 中的回调侦听器
- apache-kafka - Kafka JDBC 连接器在使用 TimestampConverter 时抛出 NullPointerException
- python - 如何将 GUI 上的检查按钮和文本条目的结果以键:值格式添加到字典中?