我是使用Servlet和JSP的新手,我在提交表單JSP后試圖重定向到Servlet主頁JSP的起點時遇到了麻煩,我不確定如何完成這項任務,或者是否有可能做到,我嘗試的方法最多回傳主頁JSP,但沒有呼叫Servlet默認函式從jdbc獲取資料。我已經嘗試了sendredirect()和request dispatcher,但都無濟于事,如果能幫助我找到錯誤的地方,將不勝感激。
我有一個單一的servlet代碼來處理所有的操作,包括在重定向/重新加載時出現問題的插入和更新
。public class StudentServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private StudentDao studentDao;
public StudentServlet() {
this.studentDao = new StudentDao() 。
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String sPath = request.getServletPath()。
//switch statement to call appropriate method[/span]。
switch (sPath) {
case "/new"/span>:
try {
showNewForm(request, response);
} catch (ServletException | IOException e) {
e.printStackTrace()。
}
break;
case "/insert"/span>:
try {
insertStudent(request, response);
} catch (SQLException | IOException e) {
e.printStackTrace()。
}
break;
case "/delete"/span>:
try {
deleteStudent(request, response);
} catch (SQLException | IOException e) {
e.printStackTrace()。
}
break;
case "/update"/span>:
try {
updateStudent(request, response);
} catch (SQLException | IOException e) {
e.printStackTrace()。
}
break;
case "/edit"/span>:
try {
editStudent(request, response);
} catch (ServletException | IOException e) {
e.printStackTrace()。
}
break;
case "/StudentServlet"/span>:
try {
listAllStudents(request, response);
} catch (ServletException | IOException | SQLException e) {
e.printStackTrace()。
}
break。
default:
try {
listAllStudents(request, response); /home page = .../week04/StudentServletcatch (ServletException | IOException | SQLException e) {
e.printStackTrace()。
}
break;
}
}
//從studentDao中獲取資料并在適當的jsp上顯示資料的函式。
private void listAllStudents(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, SQLException {
List<Student> allStudents = studentDao.selectAllStudents()。
request.setAttribute("listStudents"/span>, allStudents)。
RequestDispatcher dispatch = request.getRequestDispatcher("student-list.jsp");
dispatch.forward(request, response)。
}
private void showNewForm(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
RequestDispatcher dispatch = request.getRequestDispatcher("student-form.jsp")。
dispatch.forward(request, response)。
}
private void insertStudent(HttpServletRequest request, HttpServletResponse response)
throws SQLException, IOException{
String firstname = request.getParameter("firstname") 。
String lastname = request.getParameter("lastname") 。
String email = request.getParameter("email")。
Student newStudent = new Student(name, lastname, email)。
studentDao.insertStudent(newStudent); //student object inserted to table
response.sendRedirect("/StudentServlet"); //重定向到主頁。
}
private void deleteStudent(HttpServletRequest請求,HttpServletResponse回應)
throws SQLException, IOException {
int id = Integer.parseInt(request.getParameter("id"/span>)
studentDao.deleteStudent(id); //student object deleted。
response.sendRedirect("/StudentServlet")。
}
private void updateStudent(HttpServletRequest request, HttpServletResponse response)
throws SQLException, IOException{
String sId = request.getParameter("id")。
int id = Integer.parseInt(sId)。
String firstname = request.getParameter("firstname") 。
String lastname = request.getParameter("lastname") 。
String email = request.getParameter("email")。
Student updateStudent = new Student(id, firstname, lastname, email)。
studentDao.updateStudent(updateStudent); //student物件更新。
response.sendRedirect("/StudentServlet"/span>)。
}
private void editStudent(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
int id = Integer.parseInt(request.getParameter("id") )。
Student currentStudent = studentDao.selectStudent(id)。
RequestDispatcher dispatch = request. getRequestDispatcher("student-form.jsp"); //student form called with current student information loaded。
request.setAttribute("student", currentStudent)。
dispatch.forward(request, response)。
}
}
這里是我的xml檔案:
<web-app xmlns:xsi="http://www.w3. org/2001/XMLSchema-instance"/span> xmlns="http://java.sun.com/xml/ns/j2ee"/span> xmlns:web="http://java.sun. com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd http://java.sun. com/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee" id="WebApp_ID" version="2.4">
<servlet>/span>
<servlet-name>/span>StudentServlet</servlet-name>/span>
<servlet-class>week04.web.StudentServlet</servlet-class>
</servlet>/span>
<servlet-mapping>/span>
<servlet-name>/span>StudentServlet</servlet-name>/span>
<url-pattern>/</url-pattern>
<url-pattern>/span>/StudentServlet</url-pattern>/span>
<url-pattern>/new</url-pattern>
<url-pattern>/update</url-pattern>/span>
<url-pattern>/insert</url-pattern>
<url-pattern>/span>/delete</url-pattern>/span>
<url-pattern>/編輯</url-pattern>
</servlet-mapping>/span>
</web-app>/span>
這里是我的主頁JSP,我把它命名為student-list.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" import="java.util.*" import="week04.model.Student"%>
<! DOCTYPE html>
<html>
<head>
<meta charset="utf-8">/span>
< meta name="viewport" content="width=device-width, intial-scale=1 shink to-fit=yes">
<link rel="styleheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
integrity="sha38-...." crossorigin="anonymous">
</head>
<body>
<nav class="navbar navbar-dark bg-primary pd-8"/span>>
<a class="navbar-brand">& nbsp; & nbsp;XYZ大學</a>
</nav>/span>
<div class="container-fluid"/span>>
<div class="container">
<div class="form container-fluid p-4">/span>
<a href="<%=request. getContextPath()%>/new" class="btn btn-success" >Add
學生</a>
</div>/span>
<br>
<!--將包含學生資料的ArrayList物件分配給本地物件-->
<% ArrayList<Student> studentList = (ArrayList) request.getAttribute("listStudents"); %>
<table class="table table-bordered">
<thead>
<tr>/span>
<th>名字</th>
<th>最后一個名字</th>
<th>Email</th>
<th>/span>Actions</th>/span>
</tr>/span>
</thead>/span>
<tbody>/span>
<%。
if(request.getAttribute("listStudents") != null) {
迭代器<Student> iterator = studentList.iterator()。
while(iterator.hasNext()) {
學生studentDetails = iterator.next();
%>
<tr><td> <%=studentDetails. getFirstname()%></td>。
<td><%=studentDetails.getLastname()%><>
<td><%=studentDetails.getEmail()%><>
<td>a href="<%=request. getContextPath()%>/edit?id=<%=studentDetails.getId()%>">Update</a>/span>
&。 nbsp; <a href="<%=request. getContextPath()%>/delete? id=<%=studentDetails. getId()%>">洗掉</a> </td>
</tr>/span>
<%。
}
}
%>
</tbody>
</table>/span>
</div>
</div>/span>
</body>
</html>
而這里是我的表單檔案,處理插入和更新資料:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<! DOCTYPE html>
<html>
<head>
<meta charset="utf-8">/span>
< meta name="viewport" content="width=device-width, intial-scale=1 shink to-fit=yes">
<link rel="styleheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
integrity="sha384-..."/span>>
</head>/span>
<body>
<nav class="navbar navbar-dark bg-primary pd-8"/span>>
<a class="navbar-brand">& nbsp; & nbsp;XYZ大學</a>
</nav>/span>
<div class="container col-md-5 p-4">/span>
<div class="card">/span>
<div class="card-body">/span>
<% System.out.println(request.getAttribute("student") "hello"); %>
<% if (request.getAttribute("listStudents") != null || request.getAttribute("student") != null) { %>
<form action="<%=request. getContextPath()%>/update" method="post">
<% } else { %>
<form action="<%=request. getContextPath()%>/insert" method="post">
<% } %>
<div>
<h2>/span>
<% if (request.getAttribute("student") != null) { %>
編輯學生
<% } else { %>
添加新的學生
<% } %>
</h2>
</div>/span>
<% if (request.getAttribute("student") != null) { %>
< input type="hidden" name="id" value="${student. id}" />
<% } %>
<fieldset class="form-group">
<legend>名字</legend>
<% if (request.getAttribute("student") != null) { %>
<input type="text"/span> value="${student. firstname}" class="form-control"。
name="fistname" required="required">
<% } else { %>
< input type="text" value="" class="form-control" name="firstname" required="required">>。
<% } %>
</fieldset>
<fieldset class="form-group"/span>>
<legend>最后一個名字</legend>
<% if (request.getAttribute("student") != null) { %>
<input type="text"/span> value="${student. lastname}" class="form-control"。
name="lastname" required="required">
<% } else { %>
< input type="text" value="" class="form-control" name="lastname" required="required">>
<% } %>
</fieldset>
<fieldset class="form-group"/span>>
<legend>Email</legend>
<% if (request.getAttribute("student") != null) { %>
<input type="text"/span> value="${student. email}" class="form-control" name="email">
<% } else { %>
< input type="text"/span> value="" class="form-control" name="email">
<% } %>。
</fieldset>
< button type="submit" class="t-3 btn btn-success" > 保存</按鈕>。
</form>/span>
</div>/span>
</div>/span>
</div>/span>
</body>
</html>
希望得到任何幫助,我不知道是我的Servlet配置、xml還是我的表單頁面配置出了問題。
uj5u.com熱心網友回復:
你正在接收例外
SQLIntergrityConstraintViolation: column firstname cannot be null
因為你的first name表組中有一個小的錯字。
<% if (request.getAttribute("student"/span>) != null) { %>
<input type="text"/span> value="${student. firstname}" class="form-control"。
name="fistname" required="required">
<% } else { %>
< input type="text" value="" class keyword">class="form-control" name="firstname" required="required">
<% } %>。
在if塊中,<input>文本欄位的name="fistname"被拼錯了,而在else塊中的name="firstname"是正確的。
這就是為什么你的insert只能在if-else中作業,因為它經過了else塊,該塊有正確的欄位名。一旦你修復了這個錯誤,insert應該開始作業,沒有if-else也會按照之前的規定。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/315165.html
標籤:
