我正在使用Spring, Maven和Hibernate。我有这个登录页面的用户名和密码。我试图验证客户端,以确保他/她使用正确的用户名和密码从数据库。当用户点击提交时,页面呈现到localhost:8080/Login/Login,并显示404错误。我希望能够在主页上呈现结果。
我不太确定这个表单动作是如何工作的。下面是我的JSP
<form action = "login" id="login" method="post">
Username<input type="text" id="text" /> <br>
Password<input type="text" id="text" /> <br>
<input type="submit" value="Submit" />
</form>
这是我的服务dao层:@ service公共类LoginService{
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Transactional
public List<tbl_login> getUsers() {
List<tbl_login> userList = new ArrayList<tbl_login>();
try {
userList = sessionFactory.getCurrentSession().createCriteria(tbl_login.class).list();
} catch (Exception e){
e.printStackTrace();
}
return userList;
最后,这是控制器:{
@ controller公共类LoginController
LoginService loginService = (LoginService) ServiceLocator.getInstance()
.findService("loginService");
@RequestMapping(value = "/", method = RequestMethod.POST)
public String login(@RequestParam(value = "username") String username,
@RequestParam(value = "password") String password, Locale locale,
Model model) {
List<tbl_login> login = loginService.getUsers();
for (tbl_login tbl_login : login) {
if (tbl_login.getUsername().equalsIgnoreCase(username)) {
if (tbl_login.getPassword().equals(password)) {
model.addAttribute("username", username);
}
}
}
return "/";
}
您当前的代码有一些问题:
-
没有方法绑定到这个URL:
/login
(您的表单操作到那里)您应该将控制器方法更改为@RequestMapping(value = "/login", method = RequestMethod.POST)
-
我建议在
loginService
之上使用@Autowired而不是"ServiceLocator.getInstance()...."
-
我不确定sessionFactory是否会被注入(我没有看到任何注释,但也许你没有发布它)
-
我建议使用
<form:form>
而不是<form>
,以便将来您能够利用spring的功能。 -
Username<input type="text" id="text" />
应更改为Username<input type="text" name="username" id="text" />
(以及密码-以便控制器识别它们)
从这里开始,然后从这里开始调试。
祝你好运!