doGet和doPost不同使用以及安卓乱码问题解决案例总结

1、path传输数据,数据之间是一个&符号进行连接。

2、Get post 

Public 

(1)get 方式提交参数给web应用

(2)post方式提交参数给web应用

(3)HttpClient发送post请求

具体代码:

   public static boolean save(String title,String length,String encoding){

String path="http://............:8080/tennis_game/addService";

Map<String,String> pa = new HashMap<String, String>();

pa.put("title", title);

pa.put("timelength", length);

try {

return SendHttpClientPost(path,pa,encoding);

catch (Exception e) {

e.printStackTrace();

}//分别为请求的路径和请求的参数

return false;

}

/*

 *通过HttpClient这个开源项目发送post请求

 *封装了很多操作,使用时性能有些降低,简单的发送请求不需要使用这个

 *但有些情况可以加快开发速度

 * */

private static boolean SendHttpClientPost(String path,//Http是一个开源项目,已经集成在java请求中

Map<String, String> pa, String encoding) throws Exception {

List<NameValuePair> pairs = new ArrayList<NameValuePair>();

for(Map.Entry<String, String> entry : pa.entrySet())

{

pairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));

//构建参数对象,放在集合中

}

UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs,encoding);

//构建实体对象,

HttpPost httpPost = new HttpPost(path);

httpPost.setEntity(entity);

DefaultHttpClient client = new DefaultHttpClient();

HttpResponse response = client.execute(httpPost);

if(response.getStatusLine().getStatusCode() == 200)//取得状态行

{

return true;

}

return false;

}

/*

 * 发送post请求

 * 首先组品路径

 * */

private static boolean SenddoPost(String path, Map<String, String> pa,

String encoding) throws Exception {

StringBuilder data = new StringBuilder();

//构造直接传输数据的get方法所对应的路径

if(pa!=null)

{

for(Map.Entry<String, String> entry : pa.entrySet())

{//迭代参数对象,得到实体数据

data.append(entry.getKey()).append("=");

data.append(URLEncoder.encode(entry.getValue(),encoding));//解决中文乱码问题

data.append("&");//一个&还是两个&都是一样的,也可以进行删除,保存一个&符合

}

data.deleteCharAt(data.length()-1);

//删除最后的&符号

}

byte[] entity = data.toString().getBytes();

//生成实体数据

HttpURLConnection conn = (HttpURLConnection)new URL(path).openConnection();

conn.setConnectTimeout(5000);//这个必须有,防止僵死

conn.setRequestMethod("POST");//发送post请求

conn.setDoOutput(true);//允许对外输出数据

conn.setRequestProperty("Content-Type""application/x-www-form-urlencoded");

//设置头字段

conn.setRequestProperty("Content-Length", String.valueOf(entity.length));

//长度设置

OutputStream outStream = conn.getOutputStream();

//相对是输出数据的

outStream.write(entity);

//向外写数据,实际是写到了缓存里面

if(conn.getResponseCode()==200)//取得响应时,才真正发送请求到web

{

return true;

}

return false;

}

/*

 * get传输数据

 * 首先构造路径

 * 连接后,get方法进行提交

 */

private static boolean SendGet(String path, Map<String, String> pa,String encoding) throws Exception{

StringBuilder url = new StringBuilder(path);

//构造直接传输数据的get方法所对应的路径

url.append("?");

for(Map.Entry<String, String> entry : pa.entrySet())

{

url.append(entry.getKey()).append("=");

url.append(URLEncoder.encode(entry.getValue(),encoding));//解决中文乱码问题

url.append("&");//一个&还是两个&都是一样的,也可以进行删除,保存一个&符合

}

url.deleteCharAt(url.length()-1);

HttpURLConnection conn = (HttpURLConnection)new URL(url.toString()).openConnection();

conn.setConnectTimeout(5000);

conn.setRequestMethod("GET");

if(conn.getResponseCode()==200)

{

return true;

}

return false;

}

 

3、安卓乱码问题

原因1get提交参数时,没有对中文的参数进行URL编码。

     2tomcat服务器默认采用的是IS08859-1编码得到参数值。不支持中文。

解决方法

1、提交参数时进行中文编码。具体是构造路径时,确认想要的编码机制

StringBuilder url = new StringBuilder(path);

//构造直接传输数据的get方法所对应的路径

url.append("?");

for(Map.Entry<String, String> entry : pa.entrySet())

{url.append(entry.getKey()).append("="); url.append(URLEncoder.encode(entry.getValue(),encoding));//解决中文乱码问题

url.append("&");}

//一个&还是两个&都是一样的,也可以进行删除,保存一个&符合

2、在web找到对应的servlet

1)中文属性值较少的时候,对应的中文参数进行改变

String realname = new String(realname.getBytes(“IS08859-1”),”UTF-8”);

(2)中文属性值较多的时候,使用过滤器

新建一个filter ,点击选中新建的文件,选中edit,改为/*,对所有文件进行过滤

点击完成。Destory摧毁时被调用,doFiler每次请求都会调用

其内容为

HttpServletRequest req = (HttpServletRequest)request;

if(“GET”.equals(request.getm()))//get请求

{

EcodingHttpServletRequest  wrapper = new EcodingHttpServletRequest(req);

req.getParameter();

chain.doFilter(wrapper,response);

}

 else

{

req.setCharacterEncoding(“UTF-8”);//post方法时修改编码

chain.doFilter(wrapper,response);

 

}

 

新建一个类,EcodingHttpServletRequest 继承HttpServletRequestWrapper这个类

内容为

Private  HttpServletRequest requet;

Public EncodingHttpServletRequest(HttpServletRequest request)

{

Super(request);

This.request = request;

}

Public String getParameter(String name)

{

String value = request.getParameter(name);

If(value!=null)

{

Value = new String (value.getBytes(“ISO8859-1”),”UTF-8”);

}

return value;

}

这样就完成了修改编码。

4、Form表单中Action可以对应的写一个路径例如一个servlet,那么该jsp就好调用此servlet

5、http协议

  点击查看->浏览器栏->httpwatch Profesional,输入框输入好内容,点击record,然后进行查看。得到http协议的主要内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
`doGet` 和 `doPost` 是 `HttpServlet` 类中的两个方法,用于处理 HTTP GET 和 POST 请求。在 Servlet 中,当客户端向服务器发送 HTTP 请求时,Servlet 容器会自动调用适当的方法来处理这个请求。 下面是 `doGet` 和 `doPost` 方法的简单使用示例: ```java import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 处理 GET 请求 response.getWriter().write("This is a GET request"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 处理 POST 请求 response.getWriter().write("This is a POST request"); } } ``` 在这个例子中,我们创建了一个继承自 `HttpServlet` 类的 `MyServlet` 类,并且覆盖了其中的 `doGet` 和 `doPost` 方法。当客户端向服务器发送 GET 请求时,`doGet` 方法被调用,向客户端返回 "This is a GET request";当客户端向服务器发送 POST 请求时,`doPost` 方法被调用,向客户端返回 "This is a POST request"。 需要注意的是,在使用 `doGet` 和 `doPost` 方法时,必须根据具体的业务需求来选择合适的方法。一般来说,GET 请求用于获取数据POST 请求用于提交数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洋葱ycy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值