java mysql utf8 character problem

1. For Database:


Open Glassfish Admin Console, navigate “JDBC Connection Pools > pool_name > Additional Properties”
Update URL parameter’s value as:

jdbc:mysql://localhost:3306/db_name?useUnicode=true&characterEncoding=UTF-8

(Add "?useUnicode=true&characterEncoding=UTF-8" part)

2. For Server:


Open Glassfish Admin Console, navigate “Configurations > server-config > JVM Settings > JVM Options”
Add option "-Dfile.encoding=UTF8"

3. Add the following filter to web.xml:

<filter>
	<filter-name>Set Character Encoding</filter-name>
	<filter-class>filters.SetCharacterEncodingFilter</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>Set Character Encoding</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

filter.SetCharacterEncodingFilter class:

package filters;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * Example filter that sets the character encoding to be used in parsing the
 * incoming request, either unconditionally or only if the client did not
 * specify a character encoding.
 */
public class SetCharacterEncodingFilter implements Filter {

    protected String encoding = null;
    protected FilterConfig filterConfig = null;
    protected boolean ignore = true;

    /**
     * Take this filter out of service.
     */
    @Override
    public void destroy() {
        this.encoding = null;
        this.filterConfig = null;
    }

    /**
     * Select and set (if specified) the character encoding to be used to
     * interpret request parameters for this request.
     */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain)
            throws IOException, ServletException {
// Conditionally select and set the character encoding to be used
        if (ignore || (request.getCharacterEncoding() == null)) {
            String encoding = selectEncoding(request);
            if (encoding != null) {
                request.setCharacterEncoding(encoding);
            }
        }
// Pass control on to the next filter
        chain.doFilter(request, response);
    }

    /**
     * Place this filter into service.
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
        this.encoding = filterConfig.getInitParameter("encoding");
        String value = filterConfig.getInitParameter("ignore");
        if (value == null) {
            this.ignore = true;
        } else if (value.equalsIgnoreCase("true")) {
            this.ignore = true;
        } else if (value.equalsIgnoreCase("yes")) {
            this.ignore = true;
        } else {
            this.ignore = false;
        }
    }

    /**
     * Select an appropriate character encoding to be used, based on the
     * characteristics of the current request and/or filter initialization
     * parameters. If no character encoding should be set, return null.
     */
    protected String selectEncoding(ServletRequest request) {
        return (this.encoding);
    }
}

Sharing session data between two contexts in tomcat 7

If you have two contexts, say /app1 and /app2 and you want to share session data between them you can do it by the following way:

  1. In context.xml set sessionCookiePath to / and set crossContext to true:
    <Context sessionCookiePath="/" crossContext="true">
  2. In both applications write this in web.xml:
    <filter>
    	<filter-name>userSessionFilter</filter-name>
    	<filter-class>myPackage.UserController</filter-class>
    </filter>
    <filter-mapping>
    	<filter-name>userSessionFilter</filter-name>
    	<url-pattern>/*</url-pattern>
    </filter-mapping>
  3. In the first application, create a class, say UserController, which implements Filter and in doFilter method:
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    	ServletContext sctx = ((HttpServletRequest) request).getSession().getServletContext();
    	String testStr = (String) sctx.getAttribute("attr");
    	if(testStr == null){
    		testStr = "test";
    		sctx.setAttribute("attr", testStr);
    	}
    	chain.doFilter(request, response);
    }
  4. In the second application, create a class, say UserController, which implements Filter and in doFilter method:
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    	ServletContext sctx = ((HttpServletRequest) request).getSession().getServletContext().getContext("/app1");
    	String testStr = (String) sctx.getAttribute("attr");
    	System.out.println("the value which set in first app: " + testStr);
    	chain.doFilter(request, response);
    }
  5. Now the testStr value which set in the first app’s UserController class, can be obtained by the second app’s UserController class..

java Sysem Properties

Code snippet:

public static void main(String[] args) {
	// TODO Auto-generated method stub
		
	Properties pr = System.getProperties();
        TreeSet propKeys = new TreeSet(pr.keySet());  // TreeSet sorts keys
        for (Iterator it = propKeys.iterator(); it.hasNext(); ) {
            	String key = (String)it.next();
            	System.out.println(key + "=" + pr.get(key));
        }
        
        System.out.println(System.getProperty("user.dir")); 
        System.out.println(System.getProperty("user.home")); 
        System.out.println(System.getProperty("user.name")); 
}

Windowsta Java + MongoDB

Windowsta Mongodb kurulumu:

öncelikle bu adresten mongodb yi indiriyoruz. unzip ettikten sonra bin klasöründeki mongod.exe yi (database sever için)  ve mongo.exe yi (administrative shell için) çalıştırıyoruz.

by default mongodb dataları C:\data\db klasöründe tutuyor. eğer başka yerde tutmak isterseniz mongod.exe yi --dbpath komutu ile çalıştırıyoruz. (örneğin: dataları d:\mongodb\data\db klasöründe tutmak için,  mongod.exe --dbpath d:\mongodb\data\db  gibi)

eğer bi aksilik olmazsa “waiting for connections on port 27017” diyecek.

artık mongo.exe yi çalıştırıp administrative shell imize geçebiliriz.

(bu arada diğer seçenekleri görmek için mongod --help veya mongo --help)

biraz takılmak isterseniz, burada  örnekler var..

Javada Mongodb kullanımı:

bu adresten mongo jarını indiriyoruz ve bu jarı classpath e include ediyoruz. artık kullanmaya başlayabiliriz.

bu kod ile test edebilirsiniz:

package com.wordpress.madvens.mongo;

import com.mongodb.Mongo;

public class Test {
   public static void main(String[] args) throws Exception {
       Mongo m = new Mongo();
       System.out.println(m.getDatabaseNames());
    }
}

daha fazla öğrenmek için: https://github.com/mongodb/mongo-java-driver/blob/master/examples/QuickTour.java

online Java API dökümantasyonu için: http://api.mongodb.org/java/current/

online MongoDB API dökümantasyonu için: http://api.mongodb.org/java/current/

son olarak faydalı bir link : http://www.mkyong.com/tutorials/java-mongodb-tutorials/