我有一个文件index.html,我可以在其中查找学生(按姓名和姓氏)。 我使用Servlet,StudentInfo作为控制器。 index.html上的POST请求将我带到overview.jsp(硬编码学生可用)。 GET方法查找学生并在result.jsp
中将其提供给我在result.jsp上我有一个GET应该把我带到overview.jsp,但是我得到了一个NPE。
我尝试在使用doGet()方法之前使其工作,并立即将其破坏。
我的代码如下:
学生班
包r0256160_Parameters2;
public class Student {
private String voornaam;
private String naam;
private int leeftijd;
private String richting;
public Student(String naam, String voornaam, int leeftijd, String richting){
this.voornaam=voornaam;
this.naam=naam;
this.leeftijd=leeftijd;
this.richting=richting;
}
public String getVoornaam(){
return voornaam;
}
public String getNaam(){
return naam;
}
public int getLeeftijd(){
return leeftijd;
}
public String getRichting(){
return richting;
}
public String toString(){
return getVoornaam() + " " + getNaam() + " " + getLeeftijd() + " " + getRichting();
}
}
StudentService课程
包r0256160_Parameters2;
import java.util.ArrayList;
public class StudentenService {
Student student1;
Student student2;
Student student3;
Student student4;
ArrayList<Student> lijst;
public StudentenService(){
student1 = new Student("Jonckers", "Els", 23, "Toegepaste Informatica");
student2 = new Student("Meerhout", "Maarten", 21, "Chemie");
student3 = new Student("Steegmans", "Elke", 16, "Vroedkunde");
student4 = new Student("Leysen", "Lore", 54, "Verpleegkunde");
lijst = new ArrayList<Student>();
lijst.add(student1);
lijst.add(student2);
lijst.add(student3);
lijst.add(student4);
}
public int getLeeftijd(String gegevenNaam, String gegevenVoornaam){
for(int i=0; i<lijst.size(); i++){
if(gegevenNaam.equalsIgnoreCase(lijst.get(i).getNaam()) && gegevenVoornaam.equalsIgnoreCase(lijst.get(i).getVoornaam())){
return lijst.get(i).getLeeftijd();
}
}
return 0;
}
public String getRichting(String gegevenNaam, String gegevenVoornaam) {
for(int i=0; i<lijst.size(); i++){
if(gegevenNaam.equalsIgnoreCase(lijst.get(i).getNaam()) && gegevenVoornaam.equalsIgnoreCase(lijst.get(i).getVoornaam())){
return lijst.get(i).getRichting();
}
}
return null;
}
public String toString(){
for(Student s : lijst){
s.toString();
}
return null;
}
public ArrayList<Student> getList(){
return lijst;
}
}
的index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Voeg een nieuwe student toe:</h1>
<form method="POST" action="StudentInfo?action=add">
<fieldset>
<legend>Naam-gegevens</legend>
<p>
<label for="naam">Naam:</label> <input id="naam" name="naam"
type=text placeholder="Familienaam van Student" required>
</p>
<p>
<label for="voornaam">Voornaam:</label> <input id="voornaam"
name="voornaam" type=text placeholder="Voornaam van Student"
required>
</p>
</fieldset>
<p>
<label for="leeftijd">Leeftijd:</label> <input id="leeftijd"
name="leeftijd" type=number min=0 max=99 placeholder="Leeftijd van Student"
required>
</p>
<p>
<label for="richting">Richting:</label> <input id="richting"
name="richting" type=text placeholder="Richting van Student"
required>
</p>
<input type="submit" value="Voer in">
</form>
<h1>Zoek een bestaande student op</h1>
<form action="StudentInfo?action=find">
<p>
<label for="naam">Naam: </label> <input id="naam" name="naam"
type=text required>
</p>
<p>
<label for="voornaam">Voornaam: </label> <input id="voornaam"
name="voornaam" required>
</p>
<p>
<input type="submit" value="Zoek!">
</p>
</form>
</body>
</html>
&#13;
Overview.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.ArrayList" %>
<%@ page import="r0256160_Parameters2.Student" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Lijst van alle studenten: </h1>
<%
ArrayList<Student> lijst = (ArrayList<Student>) request.getAttribute("lijst");
for(int i=0; i<lijst.size(); i++){
out.println("<p>");
out.println(lijst.get(i).toString());
out.println("</p>");
}
%>
<a href="index.html">Ga naar index</a>
</body>
</html>
&#13;
result.jsp中
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<p> Student <%= request.getParameter("naam") %> <%= request.getParameter("voornaam") %> is <%= request.getAttribute("leeftijd") %> jaar oud en studeert <%= request.getAttribute("richting") %> </p>
<!-- <a href="StudentInfo">Ga naar overview</a> -->
<a href="StudentInfo?action=read">Ga naar overview </a>
</body>
</html>
&#13;
最后,Servlet StudentInfo
package r0256160_Parameters2;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class StudentInfo
*/
@WebServlet("/StudentInfo")
public class StudentInfo extends HttpServlet {
private static final long serialVersionUID = 1L;
public StudentenService service = new StudentenService();
/**
* @see HttpServlet#HttpServlet()
*/
public StudentInfo() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
processRequest(request,response);
// String naam = request.getParameter("naam");
// String voornaam = request.getParameter("voornaam");
// StudentenService service = new StudentenService();
/*
* Enumeration parameters = request.getParameterNames(); boolean metpara
* = parameters.hasMoreElements();
*
* if(metpara){
*
* request.setAttribute("leeftijd", service.getLeeftijd(naam,
* voornaam)); request.setAttribute("richting",
* service.getRichting(naam, voornaam));
*
*
* RequestDispatcher view = request.getRequestDispatcher("result.jsp");
* view.forward(request, response);
*
* } else {
*
* request.setAttribute("lijst", service.getList()); RequestDispatcher
* overview = request.getRequestDispatcher("overview.jsp");
* overview.forward(request, response); }
*/
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
processRequest(request,response);
/*String naam = request.getParameter("naam");
String voornaam = request.getParameter("voornaam");
String strLeeftijd = request.getParameter("leeftijd");
int leeftijd = Integer.parseInt(strLeeftijd);
String richting = request.getParameter("richting");*/
/*
* if(naam == null || voornaam == null || strLeeftijd == null ||
* richting == null){ RequestDispatcher view =
* request.getRequestDispatcher("index.html"); view.forward(request,
* response); }
*/
/*service.lijst.add(new Student(naam, voornaam, leeftijd, richting));
request.setAttribute("lijst", service.getList());
RequestDispatcher overview = request
.getRequestDispatcher("overview.jsp");
overview.forward(request, response);*/
}
protected void processRequest(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
String destination = "index.html";
String action = request.getParameter("action");
// String naam = request.getParameter("naam");
if (action.equals("read")) {
destination = toonLijst(request, response);
} else if (action.equals("find")) {
destination = vindPersoon(request, response);
} else if (action.equals("add")){
destination = voegToe(request,response);
}
RequestDispatcher view = request.getRequestDispatcher(destination);
view.forward(request, response);
}
private String toonLijst(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("lijst", service.getList());
return "overview.jsp";
}
private String vindPersoon(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String naam = request.getParameter("naam");
String voornaam = request.getParameter("voornaam");
request.setAttribute("leeftijd", service.getLeeftijd(naam, voornaam));
request.setAttribute("richting", service.getRichting(naam, voornaam));
return "result.jsp";
}
private String voegToe(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String naam = request.getParameter("naam");
String voornaam = request.getParameter("voornaam");
String strLeeftijd = request.getParameter("leeftijd");
int leeftijd = Integer.parseInt(strLeeftijd);
String richting = request.getParameter("richting");
service.lijst.add(new Student(naam, voornaam, leeftijd, richting));
request.setAttribute("lijst", service.getList());
return "overview.jsp";
}
}
&#13;
我在doGet()和doPost()中使用的代码仍然存在。 Eclipse告诉我,在processRequest()(servlet中的方法)中,不使用局部变量action和destination。 我不明白,因为我在if语句中使用它们。
从result.jsp浏览到overview.jsp时遇到的错误(使用StundentInfo?action =&#34; read&#34; is:
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error that prevented it from fulfilling this request.
exception
java.lang.NullPointerException
r0256160_Parameters2.StudentenService.getLeeftijd(StudentenService.java:27)
r0256160_Parameters2.StudentInfo.doGet(StudentInfo.java:42)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.47 logs.
&#13;
老实说,我不明白我做错了什么。
非常感谢任何帮助。
谢谢