Problem einem Zaehler in mein Java - Code

  • Problem einem Zaehler in mein Java - Code

    Hallo zusammen,
    ich muss ein Programm schreiben , das zählt wie oft jede Webseite aus unserem Server aufgerufen wird, und das Ergebnis in eine MySQL – Datenbank speichert . Ich habe in der Klasse SessionObject 2 Variablen erzeugt,die die aufgerufene Webseite und die dazugehörige Session-ID speichert , eine Klasse SessionArray die alle aufgerufene Seiten und Session-ID in einem Puffer(Array) anlegt, und die Daten in die Datenbank über einen Thread schreibt . In der Klasse LiveStatReceiver wird eine Instanz der Klasse SessionArray erzeugt,die Variable pagecounter sollte angeben wie oft ein Element im Array vorhanden ist.Wenn z.B die aufgerufene Webseite www.bucho.de schon 5 Male aufgerufen wurde,sollte pagecounter den Wert 5 haben,leider gibt pagecounter immer den Wert 0, und ich verstehe nicht warum. Die Datenbankzugriffe werden über Jdbc-Template vom Spring durchgeführt.
    Hier ist mein Code,bei Rückfragen stehe ich natürlich zur Verfügung.
    Im Voraus vielen Dank.

    Quellcode

    1. import javax.servlet.*;
    2. import javax.servlet.http.*;
    3. import java.io.IOException;
    4. import org.apache.commons.logging.Log;
    5. import org.apache.commons.logging.LogFactory;
    6. import org.springframework.context.ApplicationContext;
    7. import org.springframework.web.context.support.WebApplicationContextUtils;
    8. import org.springframework.jdbc.datasource.*;
    9. public class LiveStatReceiver implements Filter{
    10. protected final Log log = LogFactory.getLog(getClass());
    11. protected FilterConfig config;
    12. //aktuelle Groesse des Arrays
    13. private int counter = 0;
    14. // zählt wie oft ein Object im Array vorhanden ist
    15. private int pagecounter = 0;
    16. /*maximale Groesse des Arrays*/
    17. private static final int MAX = 1000;
    18. /* Array zur Speicherung aufgerufenen Webseiten und deren Session IDs */
    19. private static SessionObject[] objectArray = new SessionObject[MAX];
    20. /*speichert die aktuelle Webseite*/
    21. String page = "";
    22. /*speichert die Session ID*/
    23. String sessionID = "";
    24. /*fuer die Datasourcen*/
    25. DriverManagerDataSource dataSource = new DriverManagerDataSource(); private SessionArray sessionArray;
    26. public SessionArray getSessionArray(){
    27. if (sessionArray == null){
    28. sessionArray = new SessionArray(counter,pagecounter,objectArray,dataSource);
    29. }
    30. return sessionArray;
    31. }
    32. public FilterConfig getConfig() {
    33. return config;
    34. }
    35. public void setConfig(FilterConfig config) {
    36. this.config = config;
    37. }
    38. public void init(FilterConfig config) throws ServletException{
    39. this.config = config;
    40. log.info("-----LiveStatReceiver : init ---> Filtername : " + config.getFilterName());
    41. ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(config.getServletContext());
    42. dataSource = (DriverManagerDataSource)ctx.getBean("myDataSource");
    43. }
    44. @SuppressWarnings("static-access")
    45. public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
    46. throws ServletException,IOException,NullPointerException{
    47. HttpServletRequest req = (HttpServletRequest)request;
    48. page = req.getRequestURI();
    49. HttpSession session = req.getSession();
    50. sessionID = (String)session.getId();
    51. if((page != null && !page.equals("")) && (sessionID != null &&
    52. !sessionID.equals(""))){
    53. try{
    54. /*Erzeugung einer Instanz von SessionObject,das Object sessionObject wird spaeter im Array objectArray angelegt.*/
    55. SessionObject sessionObject = new SessionObject(page,sessionID);
    56. if(sessionObject != null){
    57. /*wenn counter null ist,bedeutet dass,die aufgerufene Seite noch nicht im Array angelegt ist,das Array ist noch leer,dann pagecounter ist auch null.*/
    58. if(counter < 1){
    59. pagecounter = 0;
    60. }else{
    61. for(int i=0; i<counter; i++){
    62. if(objectArray[i].getPage() == page && objectArray[i].getSessionID()==sessionID){
    63. /*pagecounter sollte sich inkrementieren sobald das Array objectArray nicht mehr leer,was leider hier nicht der Fall ist.Beim Testen hat pagecounter immer den Wert null*/
    64. pagecounter++; }
    65. }
    66. }
    67. /*hier wird ein neus Object im Array angelegt*/
    68. SessionObject newObject;
    69. newObject = sessionObject;
    70. objectArray[counter] = newObject;
    71. // counter inkrementiert sich
    72. counter++;
    73. getSessionArray().setCounter(counter);
    74. getSessionArray().setPagecounter(pagecounter);
    75. getSessionArray().setSessionObject(objectArray);
    76. }
    77. }catch(NullPointerException e){
    78. System.out.println("NullPointerException : "+e.getMessage());
    79. }
    80. }
    81. try {
    82. getSessionArray().doThreadCountdown();
    83. log.info("--- Thread starten.");
    84. }catch (InterruptedException e) {
    85. e.printStackTrace();
    86. for (StackTraceElement trace : new Throwable().getStackTrace() ){
    87. log.info(" STRACK TRACE - ERROR : " + trace);
    88. }
    89. }
    90. chain.doFilter(request,response);
    91. }
    92. public void destroy(){}
    93. }
    94. import java.util.Iterator;
    95. import java.util.List;
    96. import java.util.Map;
    97. import org.apache.commons.logging.Log;
    98. import org.apache.commons.logging.LogFactory;
    99. import org.springframework.jdbc.core.JdbcTemplate;
    100. import org.springframework.jdbc.datasource.DriverManagerDataSource;
    101. public class SessionArray extends Thread{
    102. /*aktuelle Groesse des Arrays*/
    103. private int counter;
    104. /*maximale Groesse des Arrays*/
    105. private static final int MAX = 1000;
    106. /*incrementiert sich falls eine Seite schon aufgerufen wird.*/
    107. private int pagecounter;
    108. /*Puffer zur Speicherung aller aufgerufene Seiten und Session_ID*/
    109. private SessionObject[] sessionObject = new SessionObject[MAX];
    110. protected final Log log = LogFactory.getLog(getClass());
    111. DriverManagerDataSource dataSource ;
    112. //jdbcTemplate fuer den Datenbankzugriff
    113. private JdbcTemplate jdbcTemplate;
    114. public SessionArray(int counter,int pagecounter,SessionObject[] sessionObject,DriverManagerDataSource dataSource){
    115. this.counter = counter;
    116. this.pagecounter = pagecounter;
    117. this.sessionObject = sessionObject;
    118. this.dataSource = dataSource;
    119. }
    120. public void run(){
    121. try{
    122. jdbcTemplate = new JdbcTemplate(dataSource);
    123. String stringCounter = "";
    124. String stringSessionCounter ="";
    125. /*wählt in dem Puffer die letzte aufgerufene Seite,und ermittelt ob sie schon in der Tabelle existiert*/
    126. List list = jdbcTemplate.queryForList("select page,counter,sessioncounter from statistik where page =?",new Object[] {sessionObject[counter-1].getPage()});
    127. log.info("######## SessionArray run --> List-Size : "+list.size());
    128. Iterator it = list.iterator();
    129. /*Ergebnis der Datenbankabfrage.*/
    130. while(it.hasNext()) {
    131. Map userMap = (Map) it.next();
    132. /*Umwandlung counter in String*/
    133. stringCounter = userMap.get("counter").toString();
    134. /*Umwandlung sessioncounter in String*/
    135. stringSessionCounter =userMap.get("sessioncounter").toString();
    136. }
    137. int newCounter = 1;
    138. int newSessionCounter = 1;
    139. /*falls die aufgerufene Seite noch nicht in der Tabelle vorhanden ist,wird sie eingetragen*/
    140. if(list.size() == 0){
    141. jdbcTemplate.update("insert into statistik (page,counter,sessioncounter)" +
    142. " values (?,?,?)",new Object[]{sessionObject[counter-1].getPage(),newCounter,newSessionCounter});
    143. }else{
    144. /*falls die Seite schon existiert,wird ein Update der Tabelle durchgeführt,was hier leider nicht funktioniert.*/
    145. newCounter = Integer.parseInt(stringCounter)+1 ;
    146. if(pagecounter == 0){
    147. log.info("pagecounter: " + pagecounter);
    148. newSessionCounter = Integer.parseInt(stringSessionCounter) + 1;
    149. }else{
    150. newSessionCounter = Integer.parseInt(stringSessionCounter);
    151. }
    152. jdbcTemplate.update("update statistik set page = ?,counter = ?," +
    153. "sessioncounter =? where page = ?",new Object[] {sessionObject[counter-1].getPage(),newCounter,
    154. newSessionCounter,sessionObject[counter-1].getPage()});
    155. }
    156. }catch(Exception e){
    157. log.info("ERROR :" + e.getCause());
    158. for (StackTraceElement trace : new Throwable().getStackTrace() ){
    159. log.info("STRACK TRACE - ERROR : " + trace);
    160. }
    161. }
    162. }
    163. public void doThreadCountdown() throws java.lang.InterruptedException {
    164. try {
    165. Thread.sleep(2);
    166. } catch(InterruptedException e) {
    167. log.info("Thread interrupted!");
    168. }
    169. new SessionArray(counter,pagecounter,sessionObject,dataSource).start();
    170. }
    171. public int getPagecounter() {
    172. return pagecounter;
    173. }
    174. public void setPagecounter(int pagecounter) {
    175. this.pagecounter = pagecounter;
    176. }
    177. public int getCounter() {
    178. return counter;
    179. }
    180. public void setCounter(int counter) {
    181. this.counter = counter;
    182. }
    183. public SessionObject[] getSessionObject() {
    184. return sessionObject;
    185. }
    186. public void setSessionObject(SessionObject[] sessionObject) {
    187. this.sessionObject = sessionObject;
    188. }
    189. }
    190. public class SessionObject {
    191. String page;
    192. String sessionID;
    193. public SessionObject(String myPage,String sessionID){
    194. setPage(myPage);
    195. setSessionID(sessionID);
    196. }
    197. public String getSessionID() {
    198. return sessionID;
    199. }
    200. public void setSessionID(String sessionID) {
    201. this.sessionID = sessionID;
    202. }
    203. public String getPage() {
    204. return page;
    205. }
    206. public void setPage(String page) {
    207. this.page = page;
    208. }
    209. }
    210. CREATE TABLE `statistik` (
    211. `id` int(10) NOT NULL auto_increment,
    212. `page` varchar(250) NOT NULL,
    213. `counter` int(10) NOT NULL,
    214. `sessioncounter` varchar(250) NOT NULL,
    215. PRIMARY KEY (`id`)
    216. ) TYPE=MyISAM AUTO_INCREMENT=1;
    217. <?xml version="1.0" encoding="ISO-8859-1"?>
    218. <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    219. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    220. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    221. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
    222. <display-name>Test für das Statistik-Projekt</display-name>
    223. <context-param>
    224. <param-name>contextConfigLocation</param-name>
    225. <param-value>/WEB-INF/applicationContext-jdbc.xml</param-value>
    226. </context-param>
    227. <listener>
    228. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    229. </listener>
    230. <servlet>
    231. <servlet-name>action</servlet-name>
    232. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    233. <load-on-startup>1</load-on-startup>
    234. </servlet>
    235. <servlet-mapping>
    236. <servlet-name>action</servlet-name>
    237. <url-pattern>*.html</url-pattern>
    238. </servlet-mapping>
    239. <jsp-config>
    240. <jsp-property-group>
    241. <url-pattern>*.jsp</url-pattern>
    242. <scripting-invalid>false</scripting-invalid>
    243. <!-- <el-ignored>false</el-ignored>-->
    244. </jsp-property-group>
    245. <taglib>
    246. <taglib-uri>http://www.springframework.org/tags</taglib-uri>
    247. <taglib-location>/WEB-INF/spring.tld</taglib-location>
    248. </taglib>
    249. </jsp-config>
    250. <servlet>
    251. <description>Added by JBuilder to compile JSPs with debug info</description>
    252. <servlet-name>debugjsp</servlet-name>
    253. <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    254. <init-param>
    255. <param-name>classdebuginfo</param-name>
    256. <param-value>true</param-value>
    257. </init-param>
    258. <load-on-startup>3</load-on-startup>
    259. </servlet>
    260. <servlet-mapping>
    261. <servlet-name>debugjsp</servlet-name>
    262. <url-pattern>*.jsp</url-pattern>
    263. </servlet-mapping>
    264. <filter>
    265. <filter-name>liveStatReceiver</filter-name>
    266. <filter-class>src.sessionSave.LiveStatReceiver</filter-class>
    267. </filter>
    268. <filter-mapping>
    269. <filter-name>liveStatReceiver</filter-name>
    270. <url-pattern>*.html</url-pattern>
    271. </filter-mapping>
    272. </web-app>
    273. <?xml version="1.0" encoding="UTF-8"?>
    274. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    275. <beans>
    276. <bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    277. <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
    278. <property name="url"><value>jdbc:mysql://localhost/pagecounter</value></property>
    279. <property name="username"><value>root</value></property>
    280. <property name="password"><value></value></property>
    281. </bean>
    282. </beans>
    Alles anzeigen