【发布时间】:2014-12-28 13:35:38
【问题描述】:
我正在尝试写一些关于打开我制作的 Web 应用程序的用户的信息。网络应用程序很简单。打开它时,它会显示用户 ip、用户代理和上次登录应用程序的时间。我使用以下技术制作了这个应用程序:Spring、Maven、Tomcat、Hibernate 和 MySQL。似乎一切正常,但是当我在浏览器中打开应用程序时,请注意向数据库记录,我必须手动启动 Main.java 进行记录,但记录不正确,因为它没有记录真实信息但它到处都记录NULL。我有两个问题 - 如何自动执行所有这些操作(当我打开 Web 应用程序以在 DB 中记录时)以及为什么我的记录每次都是 NULL。
public class Main {
public static void main(String[] args) {
UserInfo user = new UserInfo();
user.setRollNo(7);
user.setIp(UserController.ip);
user.setUserAgent(UserController.userAgent);
user.setDate((Date) UserController.date);
SessionFactory sessionFactory = new AnnotationConfiguration()
.configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
session.close();
}
}
UserController.java
@Controller
public class UserController {
public static String ip;
public static String userAgent;
public static Date date;
@Autowired
private HttpServletRequest request;
@RequestMapping(value = "/connection")
public ModelAndView getUserInfo() {
ModelAndView modelandView = new ModelAndView("UserInfo");
ip = request.getRemoteAddr();
modelandView.addObject("msg1", "Your IP is " + ip);
userAgent = request.getHeader("User-Agent");
modelandView.addObject("msg2", "Your User agent is " + userAgent);
date = new java.util.Date();
/*
* Calendar calendar = Calendar.getInstance(); java.sql.Date startDate =
* new java.sql.Date(calendar.getTime() .getTime());
*/
modelandView.addObject("msg3", "Your last log was at " + date);
return modelandView;
}
}
用户信息.java
@Entity
@Table(name = "USER_INFORMATION")
public class UserInfo {
@Id
private int rollNo;
private String ip;
private String userAgent;
private Date date;
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getUserAgent() {
return userAgent;
}
public void setUserAgent(String userAgent) {
this.userAgent = userAgent;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/browserinfo</property>
<property name="connection.username">root</property>
<property name="connection.password"></property>
<property name="connection.pool_size">1</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">validate</property>
<mapping class="com.nikola.hellocontroller.UserInfo" />
</session-factory>
</hibernate-configuration>
【问题讨论】:
-
我不明白你的问题。你想达到什么目标?您想从数据库中获取一些数据并将其显示在视图中吗?或者也许创建新用户并将其存储在数据库中?你想在没有任何数据访问层的情况下如何实现这一点?
-
你执行“记录”的方式真的很奇怪。为什么要将来自
getUserInfo的信息存储在static变量中?它们将被每个请求覆盖。是的,您必须手动触发main方法,因为您的数据库处理只在那里。如果您不首先访问/connection,则数据库条目将包含null。现在我想知道如果你不想这样做,为什么你要那样实现它。 -
在这个例子中使用数据库的目的是什么?您正在从请求中检索用户信息,然后呢?您想创建新用户并将其存储在数据库中吗?接下来呢?从数据库中检索它?通过什么方式?按你不知道的主键?
-
@novy154 我想记录一些数据,然后显示出来查看。 @Tom 我现在正在学习这项技术。我决定在这里制作一个主题,因为我需要一些帮助.. 我还是菜鸟。如果您有时间向我解释如何解决这个问题,我将不胜感激。
-
@novy154 我正在尝试使用用户 IP、用户代理信息和用户上次登录应用程序的时间将电子记录到数据库。之后我想在应用程序中显示所有记录。
标签: java mysql spring hibernate maven