我想寫一些關於打開我創建的Web應用程序的用戶的信息。網絡應用程序很簡單。打開它時,它會顯示用戶ip,用戶代理和上次登錄應用程序的時間。我用這些技術製作了這個應用程序:Spring,Maven,Tomcat,Hibernate和MySQL。似乎一切工作正常,但當我打開瀏覽器中的應用程序做注意做一個記錄到數據庫,我必須手動啓動Main.java做一個記錄,但記錄是不正確的,因爲它沒有記錄真實的信息但它到處都記錄NULL。我有兩個問題 - 如何自動完成所有這些(當我打開Web應用程序以在數據庫中創建記錄)以及爲什麼我的記錄每次都是NULL。休眠不能正確地將數據寫入到mysql
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;
}
}
UserInfo.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>
我不明白你的問題。你想實現什麼?你想從數據庫中獲取一些數據並將其顯示在視圖中?或者可能創建新用戶並將其存儲在數據庫中?你想如何實現這個沒有任何數據訪問層? – slnowak 2014-11-01 10:09:46
你執行「記錄」的方式真的很奇怪。爲什麼你要將'getUserInfo'中的信息存儲在'static'變量中?每個請求都會覆蓋它們。是的,你必須手動觸發'main'方法,因爲你的數據庫處理只在那裏。如果你不先訪問'/ connection',那麼數據庫條目將包含'null'。現在我想知道爲什麼如果你不需要這樣實現它的話。 – Tom 2014-11-01 10:18:38
在這個例子中使用數據庫的目的是什麼?您正在從請求中檢索用戶信息,然後是什麼?你想創建新的用戶並將其存儲在數據庫?接下來呢?從數據庫中檢索它?通過什麼方式?通過主鍵你不知道? – slnowak 2014-11-01 10:23:15