Serwlet i polskie znaki

0

Witam wszystkich czy ktoś może mi wyjaśnić dlaczego nie mogę uzyskać polskich znaków w tym co znajduje się pomiędzy znacznikiem <select> oto kody: (w ustawieniach eclipsa chyba wszystko ustawiłem na utf-8)

Strona:

<%@page import="java.util.ArrayList"%>
<%@page import= "java.util.List"%>
<%@page import="logika.XmlPars"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="gray">
<% 
response.setCharacterEncoding("Windows-1250");
XmlPars pars = new XmlPars();
ArrayList<List<String>> calaLista = pars.getData();
%>


Wybierz walutę

<form action="zwrocWalute">
	<select name="waluta">
	<%for(int i =0; i<calaLista.size(); i++) {%>
	
		<option><%=calaLista.get(i).get(0)%></option>
	
	<%} %>
	
	</select>
	
	<button type="submit">OK</button>
	<br>
<%if(request.getAttribute("nazwa")!=null){ %>
	<%=request.getAttribute("nazwa")%>
	<br>
	<%=request.getAttribute("jednostka")%>
	<br>
	<%=request.getAttribute("kurs")%>

<%}%>
	

</form>

</body>
</html>

Kod serwletu:

package serwlety;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.ParserConfigurationException;

import org.xml.sax.SAXException;

import logika.XmlPars;

/**
 * Servlet implementation class test
 */
@WebServlet("/test")
public class SerwletZwrocWalute extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public SerwletZwrocWalute() {
        super();
        // TODO Auto-generated constructor stub
    }

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html"); 
		response.setCharacterEncoding("Windows-1250");
		
		ServletContext context = this.getServletContext(); 
		RequestDispatcher dispa= context.getRequestDispatcher("/strona.jsp");
		
		XmlPars pars = new XmlPars();
		ArrayList<List<String>> calaLista;
		
		String waluta = request.getParameter("waluta");
		String nazwaWaluty="q ";
		String kurs=" q";
		String jednostka="q";
		
		
		try {
			calaLista = pars.getData();
			for(int i = 0; i<calaLista.size(); i++){
				if(calaLista.get(i).get(0).equals(waluta)){
					nazwaWaluty="Waluta: "+calaLista.get(i).get(0);
					jednostka = "Jednostka: "+calaLista.get(i).get(1)+calaLista.get(i).get(2);
					kurs="Kurs: "+calaLista.get(i).get(3);
					
					request.setAttribute("nazwa", nazwaWaluty);
					request.setAttribute("jednostka", jednostka);
					request.setAttribute("kurs", kurs);
					dispa.forward(request, response); 
					break;
				}
			}
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
	}

}


1
  1. Skonfiguruj kodowanie w web.xml
  2. Użyj filtru:
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;

public class EncodingFilter implements Filter {
private String encoding;
private FilterConfig filterConfig;

/**
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
public void init(FilterConfig fc) throws ServletException {
this.filterConfig = fc;
this.encoding = filterConfig.getInitParameter("encoding");
}

/**
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
req.setCharacterEncoding(encoding);
chain.doFilter(req, resp);
}

/**
* @see javax.servlet.Filter#destroy()
*/
public void destroy() {
}

}

konfiguracja

<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.yourpackagestructurehere.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2

W jakim celu ustawiasz kodowanie na Windows-1250, jeżeli strona jest w UTF-8?

response.setCharacterEncoding("Windows-1250");

1

W pierwszej stronie widze 3 razy ustawienie utf-8 (troche duzo, co?) a na koniec dowalony header z windows-1250. WTF.

1 użytkowników online, w tym zalogowanych: 0, gości: 1