请求处理失败;嵌套异常是重定向中的java.lang.NullPointerException吗?
我正在制作edairy practice应用程序,尝试登录后收到以下错误消息:请求处理失败;嵌套异常是重定向中的java.lang.NullPointerException吗?,java,html,Java,Html,我正在制作edairy practice应用程序,尝试登录后收到以下错误消息: Exception org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException Root Cause java.lang.NullPointerException hu.citec.spring.servic
Exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
Root Cause
java.lang.NullPointerException
hu.citec.spring.service.GlobalServiceClass.findSubjects(GlobalServiceClass.java:25)
hu.citec.spring.controller.StudentController.student(StudentController.java:31)
我对这个话题很陌生,我试着去搜索,但没有找到解决办法。也许这是一件非常基本的事情,但我不知道我忘记了执行哪个逻辑步骤。
我的程序现在是这样的:
学生控制员:
package hu.citec.spring.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import hu.citec.spring.service.GlobalServiceClass;
@Controller
@RequestMapping("/student")
public class StudentController {
@Autowired
private GlobalServiceClass service;
@GetMapping("/")
public String student(Model model,HttpServletRequest request) {
if(request.getSession(false).getAttribute("user") == null) {
return "redirect:/login";
}
else {
model.addAttribute("students", service.findStudents());
model.addAttribute("subjectNames");
model.addAttribute("subjectAverages");
model.addAttribute("subjects", service.findSubjects());
}
return "student";
}
@PostMapping("/")
public String subjects(Model model) {
model.addAttribute("subjects", service.findSubjects());
return "student";
}
@GetMapping("/logout")
public String logout(HttpSession session ) {
session.invalidate();
return "login";
}
}
package hu.citec.spring.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import hu.citec.spring.service.GlobalServiceClass;
@Controller
public class LoginController {
@Autowired
private HttpServletRequest request;
@Autowired
private GlobalServiceClass service;
@GetMapping("/login")
public String login() {
return "login";
}
@PostMapping("/login")
public String doLogin(@RequestParam String htmlusername, Model model) {
htmlusername = request.getParameter("htmlusername");
String password = request.getParameter("htmlpassword");
if ((service.finduser(htmlusername) == null
|| !service.finduser(htmlusername).getUserPassword().equals(password))) {
String errorMsg = "Rossz felhasznalonev vagy jelszo!";
model.addAttribute("wrong", errorMsg);
return "login";
} else if (service.finduser(htmlusername).getUserPassword().equals(password)
&& service.findUserRole(htmlusername).equalsIgnoreCase("admin")){
HttpSession session = request.getSession(true);
session.setAttribute("user", htmlusername);
return "redirect:/admin/";
} else if (service.finduser(htmlusername).getUserPassword().equals(password)
&& service.findUserRole(htmlusername).equalsIgnoreCase("diak")) {
HttpSession session = request.getSession(true);
session.setAttribute("user", htmlusername);
return "redirect:/student/";
} else if (service.finduser(htmlusername).getUserPassword().equals(password)
&& service.findUserRole(htmlusername).equalsIgnoreCase("szulo")) {
HttpSession session = request.getSession(true);
session.setAttribute("user", htmlusername);
return "redirect:/student/";
} else if (service.finduser(htmlusername).getUserPassword().equals(password)
&& service.findUserRole(htmlusername).equalsIgnoreCase("tanar")) {
HttpSession session = request.getSession(true);
session.setAttribute("user", htmlusername);
model.addAttribute("students",service.findStudents());
}
return "redirect:/teacher/";
}
登录控制器:
package hu.citec.spring.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import hu.citec.spring.service.GlobalServiceClass;
@Controller
@RequestMapping("/student")
public class StudentController {
@Autowired
private GlobalServiceClass service;
@GetMapping("/")
public String student(Model model,HttpServletRequest request) {
if(request.getSession(false).getAttribute("user") == null) {
return "redirect:/login";
}
else {
model.addAttribute("students", service.findStudents());
model.addAttribute("subjectNames");
model.addAttribute("subjectAverages");
model.addAttribute("subjects", service.findSubjects());
}
return "student";
}
@PostMapping("/")
public String subjects(Model model) {
model.addAttribute("subjects", service.findSubjects());
return "student";
}
@GetMapping("/logout")
public String logout(HttpSession session ) {
session.invalidate();
return "login";
}
}
package hu.citec.spring.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import hu.citec.spring.service.GlobalServiceClass;
@Controller
public class LoginController {
@Autowired
private HttpServletRequest request;
@Autowired
private GlobalServiceClass service;
@GetMapping("/login")
public String login() {
return "login";
}
@PostMapping("/login")
public String doLogin(@RequestParam String htmlusername, Model model) {
htmlusername = request.getParameter("htmlusername");
String password = request.getParameter("htmlpassword");
if ((service.finduser(htmlusername) == null
|| !service.finduser(htmlusername).getUserPassword().equals(password))) {
String errorMsg = "Rossz felhasznalonev vagy jelszo!";
model.addAttribute("wrong", errorMsg);
return "login";
} else if (service.finduser(htmlusername).getUserPassword().equals(password)
&& service.findUserRole(htmlusername).equalsIgnoreCase("admin")){
HttpSession session = request.getSession(true);
session.setAttribute("user", htmlusername);
return "redirect:/admin/";
} else if (service.finduser(htmlusername).getUserPassword().equals(password)
&& service.findUserRole(htmlusername).equalsIgnoreCase("diak")) {
HttpSession session = request.getSession(true);
session.setAttribute("user", htmlusername);
return "redirect:/student/";
} else if (service.finduser(htmlusername).getUserPassword().equals(password)
&& service.findUserRole(htmlusername).equalsIgnoreCase("szulo")) {
HttpSession session = request.getSession(true);
session.setAttribute("user", htmlusername);
return "redirect:/student/";
} else if (service.finduser(htmlusername).getUserPassword().equals(password)
&& service.findUserRole(htmlusername).equalsIgnoreCase("tanar")) {
HttpSession session = request.getSession(true);
session.setAttribute("user", htmlusername);
model.addAttribute("students",service.findStudents());
}
return "redirect:/teacher/";
}
学生html:
<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<title>Students</title>
<meta charset="UTF-8" />
<link rel="stylesheet" type="text/css" th:href="@{/static/main.css}" />
</head>
<body>
<table class="table">
<thead>
<tr>
<th>Tantargy</th>
<th>Atlag</th>
<th>Minosites</th>
</tr>
</thead>
<tbody>
<tr th:if="${subjects.empty}">
<td colspan="5">No Subjects Available</td>
</tr>
<tr th:each="subject : subjects">
<td><span th:text="${subject.subjectName}"></span></td>
</tr>
<tr>
<td colspan="6">
<a th:href="@{/products/new}">Uj termek hozzaadasa</a>
<a th:href="@{/products/logout}">Kijelentkezes</a>
</td>
</tr>
</tbody>
</table>
</body>
</html>
学生
钽
地图集
米诺斯特
没有科目
登录html:
<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<title>Login</title>
<meta charset="UTF-8" />
<link rel="stylesheet" type="text/css" href="./static/main2.css" />
</head>
<body>
<div class="form-wrapper">
<h2>Please login!</h2>
<h6 th:if="${wrong}">Rossz felhasznalonev es jelszo paros!</h6>
<form name="loginForm" action="/NegyedikModulzaro/login" method="POST">
<table>
<tr>
<td>Felhasznalo nev:</td>
<td><input type="text" name="htmlusername" /></td>
</tr>
<tr>
<td>Jelszo:</td>
<td><input type="password" name="htmlpassword" /></td>
</tr>
<tr>
<td colspan="2" class="button-wrapper"><input
class="login-button" type="submit" value="Login" /></td>
</tr>
<tr>
<td colspan="6"><a th:href="@{/forgotPassword}">Elfelejtettem
a jelszavam</a> <a th:href="@{/registration}">Regisztracio</a></td>
</tr>
</table>
</form>
</div>
</body>
</html>
登录
请登录!
Rossz felhasznalonev是jelszo paros!
内华达州费哈兹纳洛:
杰尔佐:
用户报告:
package hu.citec.spring.repository;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.dao.IncorrectResultSizeDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.SingleColumnRowMapper;
import org.springframework.stereotype.Repository;
import hu.citec.spring.entity.Subject;
import hu.citec.spring.entity.SubjectGrade;
import hu.citec.spring.entity.User;
@Repository
public class UserRepository {
@Autowired
private HttpServletRequest request;
private JdbcTemplate jdbcTemplate;
public UserRepository(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public User findUser(String name) {
String query = "select * from users where username = ? or email = ?";
Object[] args = new Object[] { name,name };
try {
User user = jdbcTemplate.queryForObject(query, args, (rs, rowNum) -> {
User u = new User();
u.setActivated(rs.getInt("activated"));
u.setBlocked(rs.getInt("blocked"));
u.setEmail(rs.getString("email"));
u.setFullname(rs.getString("fullname"));
u.setUserId(rs.getInt("user_id"));
u.setPhoneNumber(rs.getDouble("phoneNumber"));
u.setUsername(rs.getString("username"));
u.setUserPassword(rs.getString("user_password"));
u.setParent_id(rs.getInt("parent_id"));
u.setStudent_id(rs.getInt("student_id"));
return u;
});
return user;
} catch (EmptyResultDataAccessException e) {
return null;
}
}
public String userRole(String username) {
User loggedUser = findUser(username);
String query = "select role.role_type from user_roles, role where user_roles.user_id =" + loggedUser.getUserId() +
" and role.role_id = user_roles.role_id";
return jdbcTemplate.queryForObject(query, SingleColumnRowMapper.newInstance(String.class));
}
// public List<Subject> findUserSubject() {
// String query = "SELECT fullname,subject_name,grade from subject,subject_grade,users where subject.subject_id = subject_grade.subject_id and subject_grade.user.id ='"
// + session.getAttribute("userID");
// return jdbcTemplate.query(query, BeanPropertyRowMapper.newInstance(SubjectGrade.class));
// }
public void addUser(User user) {
String query = "INSERT INTO users (username, fullname, email, phoneNumber,user_id,user_password) VALUES (?, ?, ?, ?, ?, ?)";
jdbcTemplate.update(query, user.getUsername(), user.getFullname(), user.getEmail(), user.getPhoneNumber(), user.getUserId(), user.getUserPassword());
}
public List<User> findAllStudentNamesByRoleId() {
String query = "SELECT u.user_id, u.fullname FROM role r " +
"INNER JOIN user_roles ur ON r.role_id = ur.role_id " +
"INNER JOIN users u ON ur.user_id = u.user_id " +
"WHERE ur.role_id = 2 ORDER BY u.fullname"; // if(roleId == 2) --> STUDENT
List<User> findAllStudentNamesByRoleId =
jdbcTemplate.query(query, BeanPropertyRowMapper.newInstance(User.class));
return findAllStudentNamesByRoleId;
}
public void addTeacher(User user) {
String insertTeacher = "INSERT INTO users (username, user_password, fullname, email, activated, blocked, phoneNumber) VALUES(?,?,?,?,?,?,?)";
jdbcTemplate.update(insertTeacher, user.getUsername(), user.getUserPassword(), user.getFullname(), user.getEmail(), user.getActivated(), user.getBlocked(), user.getPhoneNumber());
String getActualTeacherID = "SELECT users.user_id FROM users WHERE users.username = ?";
Integer actualTeacherID = jdbcTemplate.queryForObject(getActualTeacherID, SingleColumnRowMapper.newInstance(Integer.class),user.getUsername());
String insertTeacherRole = "INSERT INTO `user_roles`(`user_id`, `role_id`) VALUES (?,4)";
jdbcTemplate.update(insertTeacherRole, actualTeacherID);
}
public List<User> listTeachers(){
String query = "SELECT users.user_id as usedId, users.username, users.fullname, users.email, users.activated, users. blocked, users.phoneNumber"
+ " FROM ((user_roles "
+ " INNER JOIN role ON user_roles.role_id = role.role_id) "
+ " INNER JOIN users ON user_roles.user_id = users.user_id) "
+ " WHERE user_roles.role_id = 4";
return jdbcTemplate.query(query, BeanPropertyRowMapper.newInstance(User.class));
}
public List<SubjectGrade> findAllSubjectGrades(){
String query = "SELECT id, subject_id, user_id, grade_date as date, descrioption AS description, teacher_id, grade FROM subject_grade";
return jdbcTemplate.query(query, BeanPropertyRowMapper.newInstance(SubjectGrade.class));
}
public User findUserByStudentOrParentId(Integer id) {
try {
String query = "SELECT * users WHERE parent_id = ? or student_id = ?";
return (User) jdbcTemplate.queryForObject(query, new BeanPropertyRowMapper(User.class), id,id);
} catch (IncorrectResultSizeDataAccessException ex) {
return null;
}
}
public List<SubjectGrade> subjectsAndAveragesPerStudent(int userId) {
String query = "SELECT subject.subject_id, subject.subject_name, (AVG(subject_grade.grade), 2), ROUND(AVG(subject_grade.grade), 0) FROM subject_grade "
+ "INNER JOIN subject ON subject.subject_id = subject_grade.subject_id "
+ "WHERE subject_grade.user_id = ? "
+ "GROUP BY subject.subject_name";
List<SubjectGrade> subjectsAndAveragesPerStudent =
jdbcTemplate.query(query, BeanPropertyRowMapper.newInstance(SubjectGrade.class), userId);
return subjectsAndAveragesPerStudent;
}
}
包hu.citec.spring.repository;
导入java.util.List;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpSession;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.dao.EmptyResultDataAccessException;
导入org.springframework.dao.incorrectresultsizedaataaccessexception;
导入org.springframework.jdbc.core.beanpropertyrowapper;
导入org.springframework.jdbc.core.jdbc模板;
导入org.springframework.jdbc.core.SingleColumnRowMapper;
导入org.springframework.stereotype.Repository;
导入hu.citec.spring.entity.Subject;
导入hu.citec.spring.entity.SubjectGrade;
导入hu.citec.spring.entity.User;
@存储库
公共类用户存储库{
@自动连线
私有HttpServletRequest;
私有JdbcTemplate JdbcTemplate;
公共用户存储库(JdbcTemplate JdbcTemplate){
this.jdbcTemplate=jdbcTemplate;
}
公共用户findUser(字符串名称){
String query=“从用户名=?或电子邮件=?”的用户中选择*”;
Object[]args=新对象[]{name,name};
试一试{
User User=jdbcTemplate.queryForObject(查询,参数,(rs,rowNum)->{
用户u=新用户();
u、 setActivated(rs.getInt(“activated”);
u、 已锁定(rs.getInt(“已锁定”);
u、 setEmail(rs.getString(“email”);
u、 setFullname(rs.getString(“fullname”);
u、 setUserId(rs.getInt(“用户id”);
u、 setPhoneNumber(rs.getDouble(“phoneNumber”);
u、 setUsername(rs.getString(“用户名”);
u、 setUserPassword(rs.getString(“用户密码”);
u、 setParent_id(rs.getInt(“parent_id”);
u、 设置学生id(rs.getInt(“学生id”);
返回u;
});
返回用户;
}捕获(EmptyResultDataAccessE异常){
返回null;
}
}
公共字符串用户角色(字符串用户名){
用户loggedUser=findUser(用户名);
String query=“从用户角色中选择角色.role\u类型,角色中的用户角色.user\u id=“+loggedUser.getUserId()+
“and role.role\u id=用户\u角色.role\u id”;
返回jdbcTemplate.queryForObject(查询,SingleColumnRowMapper.newInstance(String.class));
}
//公共列表findUserSubject(){
//String query=“选择全名、科目名称、科目成绩、科目成绩、用户,其中subject.subject\u id=subject\u grade.subject\u id和subject\u grade.user.id=”
//+session.getAttribute(“userID”);
//返回jdbcTemplate.query(query,BeanPropertyRowMapper.newInstance(SubjectGrade.class));
// }
public void addUser(用户){
String query=“插入用户(用户名、全名、电子邮件、电话号码、用户id、用户密码)值(?,,,,,,?,?)”;
更新(查询,user.getUsername(),user.getFullname(),user.getEmail(),user.getPhoneNumber(),user.getUserId(),user.getUserPassword());
}
公共列表findAllStudentNamesByRoleId(){
String query=“从角色r中选择u.user\u id、u.fullname”+
“内部加入用户角色ur ON r.role\u id=ur.role\u id”+
“ur.user\u id=u.user\u id上的内部加入用户u”+
“其中ur.role_id=2按u.fullname排序”;//如果(roleId==2)-->学生
列出findAllStudentNamesByRoleId=
query(query,BeanPropertyRowMapper.newInstance(User.class));
返回findAllStudentNamesByRoleId;
}
公共void addTeacher(用户){
String insertTeacher=“插入用户(用户名、用户密码、全名、电子邮件、已激活、已阻止、电话号码)值(?、、?、?、?、?、?)”;
更新(insertTeacher、user.getUsername()、user.getUserPassword()、user.getFullname()、user.getEmail()、user.getActivated()、user.getBlocked()、user.getPhoneNumber());
String GetActualTech id=“从users.username=?”所在的用户中选择users.user\u id”;
Integer actualTeacherID=jdbcTemplate.queryForObject(getActualTeacherID,SingleColumnRowMapper.newInstance(Integer.class),user.getUsername());
String insertTeacherRole=“插入到`user\u roles`(`user\u id`,`role\u id`)值(?,4)”;
更新(insertTeacherRole,actualTeacherID);
}
公开教师名单{
String query=“选择users.user\u id作为usedId、users.username、users.fullname、users.email
this.subjectRepo = subjectRepo;
this.sgrepo = sgrepo;