页面跳转以及数据传递:
1.sendRedirect
这个底层是设置消息头来实现的 前面已经用设置消息头跳转了一次
是用get提交的 提交过程中的中文乱码问题
response.sendRedirect("/ServletStudy1/ArgsGet?name="+java.net.URLEncoder.encode("樊浩", "utf-8"));
2.forward
request.getRequestDispatcher("/ArgsGet?name=樊浩").forward(request, response);
3.超链接地址带参数get提交
String url = "<a href='/ServletStudy1/ArgsGet?uname=樊浩&pass=admin'>链接<a>";
out.println(url);
4.form表单
out.println("<form method='post' action='/ServletStudy1/ArgsGet'>");
out.println("<input type='text' name='name' /> <input type='submit' value='提交'/>");
out.println("</form>");
乱码:
主要设置投递和接受的字符编码格式:
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
今天的参数传递中文乱码 以上传递方式都得到解决
我是工作的linux下 , 所以没在WIN下测试,不过在VirutualBox 中访问 没有乱码,
关于get提交乱码问题 我的解决办法是:
修改server.xml tomcat中的:修改如下:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
这样,我上面的所有数据提交没有乱码出现
如果乱码问题还没解决get提交的时候 使用:
String name = new String("樊浩".getBytes("iso-8859-1"),"utf-8");
最后在做个MP3下载:
这里还有乱码没有彻底解决 IE完全解决 要替换+为空格 为了照顾firefox 就没替换:
请求页:
package com.codeguy.d2.view;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MusicList extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
request.setCharacterEncoding("utf-8");
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println("<h1>MP3下载</h1><br/><hr/>");
out.println("<a href='/ServletStudy1/MusicDown?filename=A Place Nearby.mp3'>A Place Nearby</a><br/>");
out.println("<a href='/ServletStudy1/MusicDown?filename="+java.net.URLEncoder.encode("汗 ", "utf-8")+".mp3'>汗</a>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
下载页:
package com.codeguy.d2.view;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.xml.internal.bind.v2.runtime.Name;
public class MusicDown extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");//指定接受字符集
OutputStream os = response.getOutputStream();
String filename = request.getParameter("filename");
response.setHeader("Content-Disposition", "attachment;filename="+java.net.URLEncoder.encode(filename,"utf-8"));
String path = this.getServletContext().getRealPath("/music/"+filename);
FileInputStream fis = new FileInputStream(path);
byte[] buf = new byte[1024];
int len = 0;
while((len=fis.read(buf))>0){
os.write(buf,0,len);
}
os.close();
fis.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
最后 要是谁解决啦firefox下 文件名乱码的问题 MM下 谢谢 我的本地语言为英文 centos 6.3