- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 servlet
运行简单的注册 jsp
页面。它抛出此错误消息:
description The server encountered an internal error that prevented it from fulfilling this request.
java.lang.NullPointerException
com.java.task11.utils.ValidationUtils.isEmailValid(ValidationUtils.java:22)
com.java.task11.webapp.RegistrationServlet.validateInputs(RegistrationServlet.java:95)
com.java.task11.webapp.RegistrationServlet.processRegistration(RegistrationServlet.java:66)
com.java.task11.webapp.RegistrationServlet.doPost(RegistrationServlet.java:39)
javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
这是我的registration.jsp
:
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="language"
value="${not empty param.language ? param.language : not empty language ? language : pageContext.request.locale}"
scope="session"/>
<fmt:setLocale value="${language}"/>
<fmt:setBundle basename="com.java.task11.i18n.text"/>
<html lang="${language}">
<head>
<title>Registration</title>
<jsp:include page="parts/header.jsp"/>
</head>
<body>
<div class="container-fluid registration">
<div class="row">
<div class="login-screen">
<div class="login-part">
<div class="login-ico col-md-1 col-sm-2 col-xs-12 col-md-offset-3">
<h4>
<small><fmt:message key="registration.label"/></small>
</h4>
</div>
<div class="login-form col-md-4 col-sm-8 col-xs-12 col-md-offset-1 col-sm-offset-1">
<form action="/registration" enctype="multipart/form-data" method="post">
<%-- error messages --%>
<div class="form-group">
<c:forEach items="${registrationErrors}" var="error">
<p class="error">${error}</p>
</c:forEach>
</div>
<%-- input fields --%>
<div class="form-group">
<input class="form-control" placeholder="<fmt:message key="employee.firstName"/>" name="first_name" required
id="first-name"/>
<label class="login-field-icon fui-user"></label>
</div>
<div class="form-group">
<input class="form-control" placeholder="<fmt:message key="employee.lastName"/>" name="last_name" required
id="last-name"/>
<label class="login-field-icon fui-user"></label>
</div>
<div class="form-group">
<div class="input-group">
<span class="input-group-btn">
<span class="btn btn-primary btn-file">
<fmt:message key="button.browse"/>
<input type="file" name="userImage" accept="image/*"/>
</span>
</span>
<input type="text" class="form-control" readonly="">
</div>
</div>
<div class="form-group">
<input class="form-control" type="email" placeholder="<fmt:message key="login.email"/>" name="email"
pattern="[^ @]*@[^ @]*\.[^ @]{2,}" required id="email"/>
<label class="login-field-icon fui-mail"></label>
</div>
<div class="form-group">
<input class="form-control" type="password" placeholder="<fmt:message key="employee.password"/>" name="password" required
id="password"/>
<label class="login-field-icon fui-lock"></label>
</div>
<div class="form-group">
<input class="form-control" type="text" placeholder="<fmt:message key="employee.position"/>" name="position" required
id="position"/>
<label class="login-field-icon fui-plus"></label>
</div>
<div class="form-group">
<button class="btn btn-primary btn-lg btn-block" name="submit"
type="submit" value="Submit">
<fmt:message key="button.submit"/>
</button>
<a class="login-link" href="<c:url value="/login"/>"><fmt:message key="registration.login"/></a>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<jsp:include page="parts/scripts.jsp"/>
</body>
</html>
RegistrationServlet
:
@WebServlet("/registration")
public class RegistrationServlet extends HttpServlet {
private static Logger log = Logger.getLogger(RegistrationServlet.class);
private EmployeeService employeeService = new EmployeeService();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
try {
request.getRequestDispatcher("/pages/registration.jsp").forward(request, response);
} catch (ServletException | IOException e) {
log.error(e);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
try {
request.setCharacterEncoding("UTF-8");
processRegistration(request, response);
} catch (ServletException | IOException e) {
log.error(e);
e.printStackTrace();
}
}
private void processRegistration(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String firstName = request.getParameter("first_name");
String lastName = request.getParameter("last_name");
String email = request.getParameter("email");
String password = request.getParameter("password");
String imageName = "default.png";
String position = request.getParameter("position");
System.out.printf("Request fields: %s %s %s %s %s%n", firstName, lastName, email, password, position);
Part filePart = request.getPart("userImage");
try {
String contentType = filePart.getContentType();
if (contentType.startsWith("image")) {
File image = FileUploadUtils.uploadFile(this, "img\\employees", filePart);
imageName = FileUploadUtils.getFilename(image);
}
} catch (Exception e) {
log.error(e);
}
List<String> registrationErrors = validateInputs(firstName, lastName, email, password, position);
if (registrationErrors.size() > 0) {
request.setAttribute("registrationErrors", registrationErrors);
request.getRequestDispatcher("/pages/registration.jsp").forward(request, response);
} else {
Employee employee = new Employee();
employee.setFirstName(firstName);
employee.setLastName(lastName);
employee.setEmail(email);
employee.setEncryptedPassword(password);
employee.setImage(imageName);
employee.setPosition(position);
employeeService.save(employee);
response.sendRedirect("/login");
}
}
private List<String> validateInputs(String firstName, String lastName, String email, String password, String position) {
List<String> registrationErrors = new ArrayList<>();
if (ValidationUtils.isNullOrEmpty(firstName)) {
registrationErrors.add(ValidationErrors.FIRST_NAME);
}
if (ValidationUtils.isNullOrEmpty(lastName)) {
registrationErrors.add(ValidationErrors.LAST_NAME);
}
if (!ValidationUtils.isEmailValid(email)) {
registrationErrors.add(ValidationErrors.EMAIL);
}
if (employeeService.getByEmail(email).getId() != 0) {
registrationErrors.add(ValidationErrors.EMAIL_ALREADY_PRESENT);
}
if (ValidationUtils.isNullOrEmpty(password)) {
registrationErrors.add(ValidationErrors.PASSWORD);
}
if (!ValidationUtils.isNullOrEmpty(position)) {
registrationErrors.add(ValidationErrors.POSITION_EMPTY);
}
return registrationErrors;
}
}
无法从请求参数中提取。根据我的简单检查,它打印出:
Request fields: null null null null null
我不明白为什么会发生这种情况?
有什么建议吗?
最佳答案
在这里:
if (ValidationUtils.isNullOrEmpty(lastName)) {
registrationErrors.add(ValidationErrors.LAST_NAME);
}
if (!ValidationUtils.isEmailValid(email)) {
registrationErrors.add(ValidationErrors.EMAIL);
}
您检查姓氏是否为 null 或空值,但在 isEmailValid 中您不检查空值。像这样的事情应该做
if (ValidationUtils.isNullOrEmpty(email) || !ValidationUtils.isEmailValid(email)) {
registrationErrors.add(ValidationErrors.EMAIL);
}
或者更好的是,修复您的 ValidationUtils.isEmailValid() 以处理空电子邮件值。它不应该崩溃,它应该返回 false。
关于java - 服务器遇到内部错误,导致其无法满足此请求 - 在 servlet 3.0 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22335466/
我正在尝试从该网站抓取历史天气数据: http://www.hko.gov.hk/cis/dailyExtract_uc.htm?y=2016&m=1 在阅读了 AJAX 调用后,我发现请求数据的正确
我有两个 postman 请求 x,y,它们命中了两个不同的休息 api X,Y 中的端点。 x 会给我一个身份验证 token ,这是发出 y 请求所必需的。如何在请求 y 中发出请求 x ?也就是
我使用请求库通过 API 与其他服务器进行通信。但现在我需要同时发送多个(10 个或更多)POST 请求,并且只有在所有响应都正确的情况下才能进一步前进。通常语法看起来有点像这样: var optio
背景:当用户单击按钮时,其类会在class1和class2之间切换,并且此数据是通过 AJAX 提交。为了确认此数据已保存,服务器使用 js 进行响应(更新按钮 HTML)。 问题:如果用户点击按钮的
我正在将 Node.js 中的请求库用于 Google 的文本转语音 API。我想打印出正在发送的请求,如 python example . 这是我的代码: const request = requi
我经常使用requests。最近我发现还有一个 requests2 和即将到来的 requests3 虽然有一个 page其中简要提到了 requests3 中的内容,我一直无法确定 requests
我正在尝试将图像发送到我的 API,然后从中获取结果。例如,我使用发送一个 bmp 图像文件 file = {"img": open("img.bmp)} r = requests.post(url,
我发现 Google Cloud 确保移出其物理环境的任何请求都经过强制加密,请参阅(虚拟机到虚拟机标题下的第 6 页)this link Azure(和 AWS)是否遵循类似的程序?如果有人能给我指
我有一个 ASP.NET MVC 应用程序,我正在尝试在 javascript 函数中使用 jQuery 来创建一系列操作。该函数由三部分组成。 我想做的是:如果满足某些条件,那么我想执行同步 jQu
我找不到如何执行 get http 请求,所以我希望你们能帮助我。 这个想法是从外部url(例如 https://api.twitter.com/1.1/search/tweets.json?q=tw
我的应用只需要使用“READ_SMS”权限。我的问题是,在 Android 6.0 上,当我需要使用新的权限系统时,它会要求用户“发送和查看短信”。 这是我的代码: ActivityCompat.re
我的前端代码: { this.searchInput = input; }}/> 搜索 // search method: const baseUrl = 'http://localho
我有一个由 AJAX 和 C# 应用程序使用的 WCF 服务, 我需要通过 HTTP 请求 header 发送一个参数。 在我的 AJAX 上,我添加了以下内容并且它有效: $.ajax({
我正在尝试了解如何使用 promises 编写代码。请检查我的代码。这样对吗? Node.js + 请求: request(url, function (error, response, body)
如果失败(除 HTTP 200 之外的任何响应代码),我需要重试发送 GWT RPC 请求。原因很复杂,所以我不会详细说明。到目前为止,我在同一个地方处理所有请求响应,如下所示: // We
当用户单击提交按钮时,我希望提交表单。然而,就在这种情况发生之前,我希望弹出一个窗口并让他们填写一些数据。一旦他们执行此操作并关闭该子窗口,我希望发出 POST 请求。 这可能吗?如果可能的话如何?我
像 Facebook 这样的网站使用“延迟”加载 js。当你必须考虑到我有一台服务器,流量很大时。 我很感兴趣 - 哪一个更好? 当我一次执行更多 HTTP 请求时 - 页面加载速度较慢(由于限制(一
Servlet 容器是否创建 ServletRequest 和 Response 对象或 Http 对象?如果是ServletRequest,谁在调用服务方法之前将其转换为HttpServletReq
这是维基百科文章的摘录: In contrast to the GET request method where only a URL and headers are sent to the serv
我有一个循环,每次循环时都会发出 HTTP post 请求。 for(let i = 1; i console.log("succes at " + i), error => con
我是一名优秀的程序员,十分优秀!