struct必须是动态网页,而Hibernate可以使用静态网页实现,两者结合使用动态。
在创建动态网页时,记得勾选Generate web.xml deployment descripor,创建web.xml配置文件。
如果你忘记勾选,也可以这样:
Dynamic Web Project右击->Java EE Tools->Generate deployment 就可以了。
在WebContent->WEB-INF下的lib目录中
struts需要的jar包:
和hibernate需要的jar包:
记得build Path
配置web.xml文件的作用就是,实现过滤器,成为struts2的入口。
不出意外,应该可以直接粘:
struts
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
放在src目录下。
hibernate.cfg.xml:作用是连接数据库,然后找到数据库中的表。
然后,数据库中的表会映射实体类。
root
jdbc:mysql://localhost:3306/hibernate
org.hibernate.dialect.MySQLDialect
123
com.mysql.jdbc.Driver
true
true
User实体类这样写:
和数据库对应
package com.tjetc.domain;
public class User {
private int id;
private String name;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password + "]";
}
}
}
在WebContent目录下创建。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
其中的action=“login” 是将表单内容传入到login函数中,如下:
package com.tjetc.action;
import org.apache.struts2.ServletActionContext;
import com.tjetc.dao.UserDao;
import com.tjetc.domain.User;
public class LoginAction {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String login() {//在这里接收用户输入的用户名和密码
System.out.println(name);
System.out.println(password);
//创建UserDao对象
UserDao userDao = new UserDao();
User user=userDao.getByUsername(name); //这里用到UserDao是操作数据库的,下面会有。
System.out.println(user);
if (user==null) {//没有改用户名
System.out.println("该用户名不存在");
return "login";
}else{
if (!password.equals(user.getPassword())) {
System.out.println("密码错误");
return "login";
}else {
ServletActionContext.getRequest().getSession().setAttribute("user", user);
return "success";
}
}
}
}
/success.jsp
/login.jsp !--login() 函数返回login的话,就会跳转到login.jsp页面-->
简易设置success.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
登录成功!
此时运行login.jsp
输入用户名,密码。点击提交,出现如下画面,则测试成功。
呜呜呜呜,因为mysql的配置和包的问题卡了超级久。。。
我的mysql是8.0.19的,那些包是5.几的,所有一些方面就存在一些问题。
最后的时候会说一下。
下面是UserDao
package com.tjetc.dao;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.tjetc.domain.User;
public class UserDao {
public User getByUsername(String username) {
SessionFactory factory = new Configuration().configure().buildSessionFactory();
Session session = factory.openSession();
User user = (User) session.createQuery("from User u where u.name=?").setString(0, username).uniqueResult();
session.close();
return user;
}
}
//第一句是加载映射,创建会话工程对象
//第二句是创建会话对象
//第三句是在mysql中寻找name=用户输入的name的User对象(name不重复)
//关闭会话
//返回user
在mysql有数据的情况,运行login登录,没问题的话,你超厉害的!!!
关于mysql8.0和5.0的问题。
首先我的是8.0.19.老师给的都是5的包。
这时候,把lib下的mysql-connector-java-5.1.7-bin.jar包换成mysql-connector-java-8.0.13.jar。注意要把5.1的删干净。把8.0的build path。
然后在hibernate.cfg.xml这个连接数据库的配置文件中,把这句话
jdbc:mysql://localhost:3306/hibernate
(hibernate是数据库名称)
换成
jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
然后,把下面的驱动 com.mysql.jdbc.Driver换成
com.mysql.cj.jdbc.Driver
这大概就是我心酸的历程吧。5555555
努力呀。
一个集坚强与自信于一身的菇凉。