Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

Re: lug-bg: Java Jsp i MySql


  • Subject: Re: lug-bg: Java Jsp i MySql
  • From: "Борислав Данаилов" <orangeglass@xxxxxxxxx>
  • Date: Tue, 11 Jul 2006 13:37:58 +0300
  • Delivered-to: lug-bg-list@xxxxxxxxxxxxxxxxxx
  • Delivered-to: lug-bg@xxxxxxxxxxxxxxxxxx

Здравейте,

Нищо не помогна, дори се оказа че проблемът слиза много по-дълбоко
отколкото си мислех.

След като опитах всичко, дори вече забравих какво съм опитвал, реших
да видя дали проблема не е в начина по който томкат кодира в урл-то
параметърът.

Оказа се че в конфигурационният му файл - server.xml  може да се укаже директива
URIEncoding = "UTF-8".

Това отново ме прати в задънена улица.

Когато отворя add_category.jsp // кодът е по долу

<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
<html xmlns="http://www.w3.org/1999/xhtml";>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title></title>
</head>
<body>

<jsp:useBean id="M" scope="page" class="database.Manipulator"/>


<%
M.connect();
M.setEncoding();
request.setCharacterEncoding("UTF-8");

String name = request.getParameter("category_name");
out.println(name);

%>


</body>
</html>

-----------------

по следният начин:

http://localhost:777/sz/admin/add_category.jsp?category_name=%D0%94%D0%BE%D0%B1%D1%80%D0%B5

В аутпута излиза думата "Добре" на чиста кирилица.

Добре, ама не...

Ако се опитам да добавя в МайЕсКюЕл базаданните този параметър по
следният начин като добавя този ред в по горе цитираното .jsp
M.createCategory(request.getParameter("category_name"));
Това което влиза в база данните е пълен боклук.
Открих че в Йава има два класа URLEncode и URLDecode.
И опитах следното нещо:



public static void main(String[] args) {
		
		String dobre = null;
		String dobre_enc = null;
		String dobre_dec = null;
dobre = "Добре";
try {
dobre_enc = URLEncoder.encode(dobre,"utf-8");
dobre_dec = URLDecoder.decode(dobre_enc,"utf-8");
		
} catch (UnsupportedEncodingException e) {
	System.err.println(e);
}

System.out.println(dobre+", enc: "+dobre_enc+", dec:  "+dobre_dec);

}

Аутпут:
Добре, enc: %C3%90%C2%94%C3%90%C2%BE%C3%90%C2%B1%C3%91%C2%80%C3%90%C2%B5,
dec:  Добре


Забележете че има разлика по който Томкет И Йава прилагат своето утф-8 кодиране
на думата  "Добре":

Томкет:%D0%94%D0%BE%D0%B1%D1%80%D0%B5
Йава:%C3%90%C2%94%C3%90%C2%BE%C3%90%C2%B1%C3%91%C2%80%C3%90%C2%B5,

---------------------------
Пробвах със класа URLDecode да превърна във String
%D0%94%D0%BE%D0%B1%D1%80%D0%B5

И това което получих бяга ????? точно това което влиза във майескюел.

Главата ме боли вече. Ако някой от вас знае форум за йава програмиране,
нека ми каже за да не спамя тази листа повече.
Благодаря ви!

Сега ще приложа и Manipulator.java който създава обектът M за манипулации със ДБ

package database;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
import java.net.URLDecoder;
public class Manipulator {
	
	
public Connection conn;
public Statement stat;
public PreparedStatement pstat;
public ResultSet res;

public Manipulator() {
	
	}

public void connect() {
	try {
		Class.forName("com.mysql.jdbc.Driver");
conn  = DriverManager.getConnection("jdbc:mysql://localhost/****?user=****&password=*****");

	} catch (ClassNotFoundException cnfe) {
		System.err.println(cnfe);
		
	}
	catch (SQLException sqle) {
		System.err.println(sqle);

}
}

public void shutdown() {
	try {
		stat.execute("SHUTDOWN");
		conn.close();
	} catch (SQLException e) {
		
		e.printStackTrace();
	}
	
	
}



	public void createCategory(String category_name) {
		try {
pstat = conn.prepareStatement("INSERT INTO categories (name) VALUES (?)");
		pstat.setString(1,category_name);
		pstat.execute();
		} catch (SQLException e) {
	System.err.println(e);
		}
	}


	
	public void delCategory(String the_category) {
		try {
			pstat = conn.prepareStatement("DELETE FROM categories WHERE name = (?)");
			pstat.setString(1,the_category);
			pstat.execute();
		} catch (SQLException e) {
			
			e.printStackTrace();
		}
	
	}
	
	public ResultSet getCategories() {
	
	try {
		stat = conn.createStatement();
	res=	stat.executeQuery("SELECT name FROM categories");

	} catch (SQLException e) {
	
		e.printStackTrace();
	}
	return res;
}
	
	public void setEncoding() {
		try {
			stat = conn.createStatement();
	stat.executeQuery("SET NAMES  utf8");
	stat.executeQuery("SET CHARACTER SET   utf8");
	stat.executeQuery("set character_set_results = utf8");
	stat.executeQuery("SET character_set_connection = utf8");
	stat.executeQuery("SET character_set_database = utf8");
	stat.executeQuery("SET character_set_server  = utf8");
	stat.executeQuery("SET character_set_server  = utf8");
	
		} catch (SQLException e) {
		
			e.printStackTrace();
		}
	}
	
	
	
	public ResultSet getEncoding() {
		
		try {
			stat = conn.createStatement();
			
		res=	stat.executeQuery("SHOW VARIABLES LIKE 'collation%'");

		} catch (SQLException e) {
		
			e.printStackTrace();
		}
		return res;
	}
	


	

}



 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.