我正在使用Spring,Maven和Hibernate。 我有一个用户名和密码的登录页面。我正在尝试对客户端进行身份验证,以确保他/她使用数据库中的正确用户名和密码。当用户点击提交时,页面将呈现给localhost:8080 /登录/登录,并出现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层: @服务 公共类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 "/";
}
答案 0 :(得分:0)
您当前的代码存在一些问题:
没有绑定到此网址的方法:/login
(您的表单操作就在那里)
您应该将控制器方法更改为@RequestMapping(value = "/login", method = RequestMethod.POST)
我建议在loginService
之上使用@Autowired而不是"ServiceLocator.getInstance()...."
我不确定是否会注入sessionFactory(我没有看到任何anotation,但也许你没有发布)
我建议使用<form:form>
代替<form>
,以便将来您可以利用弹簧功能。
Username<input type="text" id="text" />
应更改为Username<input type="text" name="username" id="text" />
(以及密码 - 以便控制器识别它们)
从这开始,然后从那里调试。
祝你好运!