第八天:servlet_httpRequest

Servlet 一共这么多东西。要会总结:

 

Servlet-àGennericServleàHttpServlet

 

ServletConfig ServletContext


/ServletResponse/HttpServletResponse

 

ServletReruquest/HttpServletRuqest

 

 

一个惊天秘密,responserequest都是站在服务器的角度而言的。我们做的是服务器编程

Response是往客户端浏览器发数据,request是获取客户端浏览器的数据。

 

JSPservlet获取值的问题。

(单选,多选框是通过value值传递的,共同特点是通过name识别的不单是JSP中,PHP是也是这样做的。)

<form action="servlet/ThirdServlet" method="post">

    <input type="text" name="username"/ >

    <input type="password" name="password"/ >

    <input type="checkbox" name="hobby"value="football"/ >足球

    <input type="checkbox" name="hobby"value="f2"/ >足球1

    <input type="checkbox" name="hobby"value="f3"/ >足球2

    <input type="radio" name="gender"value="m"/>

    <input type="radio" name="gender"value="f"/>

   

    <input type="submit" value="tijiao"/>

   

</form>

 

 

       response.setContentType("text/html");

       Stringusername = request.getParameter("username");

       Stringpassword = request.getParameter("password");

       String[]values = request.getParameterValues("hobby");

       Stringsingal = request.getParameter("gender");

       System.out.println(Arrays.asList(values));

       response.getWriter().println("name:"+username+"    "+"password:"+password

              +"    "+"hobby:"+Arrays.asList(values)+"    "+"gender:"+singal

       );

      

      

       Enumeration<String> e = request.getParameterNames();

       while(e.hasMoreElements()){

           StringparamName = e.nextElement();

           StringparamValue  =request.getParameter(paramName);

           System.out.println(paramName+":"+paramValue);

       }

      

       Map<String,String[]> map = request.getParameterMap();

       Set<Map.Entry<String, String[]>>set3 = map.entrySet();

       for(Map.Entry<String, String[]>maps:set3){

           System.out.println(maps.getKey()+":::"+Arrays.toString(maps.getValue()));

       }

 

又发现一个惊天秘密:    JSP页面中的pageEncoding="gbk"的作用有两个,

第一个负责把JSP页面转换成Servlet时间用什么样的编码。

第二个在Servlet中我们看到了这样一句话,response.setContentType("text/html;charset=gbk");说明我们的这个表单页面在提交的时间是按照GBK编码进行提交的,更重要的是,这句话告诉了浏览器我是什么样的编码,我要以什么样的编码提交,那么浏览器会自动选择相应的编码方式。浏览器的如何为网页选择正确的编码方式如何自动选择就是按照我们在JSP页面中指定的编码方式。

总结:pageEncoding指定了浏览器要用什么的编码显示这个网页,还指定这个网页在发送数据时间以哪种编码发送,根本上是指定转换成servlet用什么样的编码,并且设置setCotentType()这个响应消息头才是浏览器真正识别它是什么编码的原因。

    既然以这种方式编码传了过去,那么服务器必须要知道以哪种方式解码,按照常理,http协议应该提供这样一个方法让服务器获取提交页面的编码方式,因为我们有时间可能并不知道客户端浏览器用什么的编码,可是它没有这样的方法这是它的严重缺陷,所以我们只能手工这样设置,告诉服务器你用什么的的方式解码:request.setCharacterEncoding("gbk");此时服务器就已经能够获取正确的数据,能够在服务器端打印出来,至于服务器如何发送给客户端,这是服务器自己决定的,与它发过来的数据已无任何关系,所以我们用response.setContentType("text/html;charset=utf-8");确定发送给浏览器用UTF-8的方式,两个过程是完全独立的。所以此时在提交表单的时间浏览器自动选择了编码为GBK,此时在结果页面我们惊奇的发现它又变成了UTF-8。根据前面学习HTTP协议的问题,这个浏览器的编码完全是由setContextType决定,所以我们最本质的东西都是在servlet里面设置了这个方法。以后JSP绝对无乱码。

 

注意还有一点request.setCharacterEncoding只对实体内容起作用,对消息头不起作用即只对POST提交起作用,对GET不起作用。那么如何解决GET方式提交的乱码呢?即如果GET方式提交的有中文、怎么办?在Server.xml里面的<ConnectorURIEncoding=”UTF-8”/>即可。但是这种方式只有在tomcat里面有用,所以这个方法不通用。用另外一种方法解决GET乱码问题。

newString(joinValues.getBytes("ISO8859-1"),"utf-8");

请求参数的乱码问题。
其实很简单,你判断一下,如果提交方式是GET,并且是中文,那么可以对这个,其实就是通过URL传过来的中文如何处理,就一步:

 Username = newString(username.getByte(“ISO-8859-1”),”UTF-8”);

 

Buttonsubmit的区别?

表单中<inputtype=”text”/>不可能被提交,

<input type=”submit” value=”提交”/>

这个按钮不能够被提交,HTML表单中能不能提交给服务器就看这个表单中有没有name,name的就能够提交,没有的就不能够提交,一个页面中多个提交按钮的判断.

    <input type="submit" name="b1"value="add"/>

    <input type="submit"name="b2" value="delete"/>

 

 

       //获取某个按钮:就相当于根据name值获取value.

       String addString = request.getParameter("b1");

//     String deleteString = request.getParameter("b2");

       if (addString.equals("add")) {

           response.getWriter().println("add...");

       }else {

           response.getWriter().println("delete...");

       }

所有表单的实质就是根据页面的name,获取传过来的value .如果没有name,就不能可能传过去 .

 

图片作为提交按钮的方法:

<img src=http://www.baidu.com/logo.png name=”test”/>

这个东西会提交过去,而且它有名字会提交过去,test的值会被传过去,并且

有点击位置的坐标.

 

正常的图片是这样显示的:

<img type=”image” src=”http”//www.aa.com/og.png”/>能够显示,不能够点击.

 

 

上传文件时间,method只能post.并且要加上enctype=”multipart/form-data”虽然此时可以上去了,但是,其它数据又得不到了,所以JSPservlet不能上传,要引用一个新的jar,

 

关于传值,记住一句话,先写name,然后根据name值获取value .

 

 

防止盗链:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值