专栏首页土豆专栏JavaWeb入门之Servlet基础2
原创

JavaWeb入门之Servlet基础2

写给还是小白的我们,一起加油哇~

开始之前,让我先来介绍一下HTTP协议(hypetext transfer protocol 超文本传输协议),是TCP/IP协议集中的一个应用层协议,用于定于WEB浏览器与WEB服务器之间交换数据的过程以及数据本身的格式。

HTTP会话方式:

浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应,对每一个页面的访问,浏览器与WEB服务器都要建一次单独的连接。

浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。

那么在这里就不得不讲一下最常用的HTTP的两个请求方式GETPOST了:

使用GET方式传递参数:

  • 在浏览器地址栏中输入某个URL地址或单击网页上的一个超链接时,浏览器发出的HTTP请求消息的请求方式为GET
  • 如果网页中的<form>表单元素属性被设置为“GET”,浏览器提交的FORM表单时生成的HTTP请求消息的请求方式也为GET
  • 使用GET请求方式给WEB服务器传递参数的格式:

http://localhost:8080/Day0511/loginServlet?user=vmh&password=gm&interesting=reading

使用POST方式传递参数:

  • POST请求方式主要用于向WEB服务器端程序提交FORM表单中的数据:FORM表单的method设置为POST
  • POST方式将各个表单字段元素及其数据作为HTTP消息的实体内容发送给WEB服务器
  • 使用POST请求方式给WEB服务器传递参数的格式:

http://localhost:8080/Day0511/loginServlet

以下为它们之间的区别:

  • post请求是通过数据包的形式发送参数,get是通过地址栏传递参数
  • get在地址栏中可以看见参数值,post不可以
  • get请求参数是有长度上限的,post理论上没有上限

那么接下来可以讲述如何在Servlet中获取请求信息了:

Servlet有一个service()方法可用于应答请求(每次请求都会调用这个问题)

然后我们要做的就是新建一个html页面(哈哈哈这里就比较简单啦):

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <form action="loginServlet" method="post">
        user:<input type="text" name="user"/><br>
        password:<input type="password" name="password"/>
        <br><br>
        interesting:<input type="checkbox" name="interesting" value="reading"/>reading
                    <input type="checkbox" name="interesting" value="singing"/>singing
                    <input type="checkbox" name="interesting" value="party"/>party
                    <input type="checkbox" name="interesting" value="shopping"/>shopping
        <input type="submit" value="Submit"/>
    </form>
</body>
</html>

然后新建一个loginServlet,可以看到在service方法中有两个参数ServletRequestServletResponse

  • ServletRequest:封装了请求信息,可以从中获取任何的请求信息
  • ServletResponse:封装了响应信息,如果想给用户什么响应,具体可以使用该接口的方法实现。这两个接口的实现都是服务器给予实现的,并在服务器调用Service方法实现
  • HttpServletRequest: 是ServletRequest的子接口,针对与HTTP请求所定义,里面包含了大量获取HTTP请求相关的方法
  • HttpServletResponse:代表服务器的响应,这个对象中封装了向客户端发送数据,发送响应头还有响应头状态码的方法

以下为几个常用方法:

    @Override
    public void service(ServletRequest request, ServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("request coming");
        System.out.println(request);
        //根据参数名返回参数值
        String user=request.getParameter("user");
        String password=request.getParameter("password");
        System.out.println("user:"+user+"   password"+password);
        //根据请求参数的名字,返回请求参数对应的字符串数组
        String [] interesting =request.getParameterValues("interesting");
        if(interesting.length>0){
            for(String interest:interesting){
                System.out.println("interesting:"+interest);
            }
        }
        //返回参数对应的Enumeration
        Enumeration<String> names=request.getParameterNames();
        while(names.hasMoreElements()){
            String name=names.nextElement();
            String val=request.getParameter(name);
            System.out.println("name:  "+name+"  value:  "+val);
        }
        //返回请求参数的键值对
        Map<String,String[]> map=request.getParameterMap();
        for(Map.Entry<String, String[]> entry:map.entrySet()){
            System.out.println("key: "+entry.getKey()+"   value: "+Arrays.asList(entry.getValue()));
        }
        //获取请求URI
        HttpServletRequest httpServletRequest=(HttpServletRequest) request;
        String requestURI=httpServletRequest.getRequestURI();
        System.out.println(requestURI);
        //获取请求方式
        String method=httpServletRequest.getMethod();
        System.out.println("method:"+method);
        //返回请求方式后的字符串
        String queryString=httpServletRequest.getQueryString();
        System.out.println(queryString);
        //返回映射的Servlet路径
        String servletPath=httpServletRequest.getServletPath();
        System.out.println(servletPath);
        //设置响应内容类型
        response.setContentType("application/msword");
        //将print中的参数打印到浏览器上
        PrintWriter out=response.getWriter();
        out.print("response");
        
    }

Servlet还有很多东西需要学习,今天就先讲一部分,未完待续~

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 计算机网络基础知识整理--数据通信基础

    小编最近在复习计算机网络基础,整理出来一些我认为比较重要的知识。希望能帮到大家哈,后续会更新~

    黄桂期
  • Java面试之数据库常用语句

    >id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, //id值,无符号、非空、递增——唯一性,可做主键。

    黄桂期
  • Java面试之对象比较

    原因是基本类型的变量存在栈中,系统先创建一个变量为a的引用然后查找栈中是否存在10这个值,如果没找到,就将10存放进来,a指向10。同理b也是一样,创建一个变量...

    黄桂期
  • 从零开始重新认识 SpringMVC

    默认情况下,你在方法的参数列表中写什么,前端表单中 input 标签的 name 属性值就要是什么,比如:

    wsuo
  • 面向对象的7种设计原则(6)-迪米特原则

    迪米特法则,如果两个类不必彼此直接通向,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个累哦的某一个方法的话,可以通过第三者转发这个调用。

    一觉睡到小时候
  • 呆呆的io流输入输出的一些基础

              关于io流的File类,下面来码一些基础属性:              文件的属性: 1 /* 2 public String...

    Gxjun
  • Struts2框架的基本使用

         前面已经介绍过了MVC思想,Struts2是一个优秀的MVC框架,大大降低了各个层之间的耦合度,具有很好的扩展性。从本篇开始我们学习Struts2的基...

    Single
  • 构造方法、封装、关键字(this、static)和代码块的介绍

    构造方法在初始化一个类的对象时进行调用,它没有返回值,方法名与类名相同,而成员方法是则是由对象主动调用,它有返回值,表现为对象的操作行为。

    java架构师
  • 开闭原则——面向对象程序设计原则

    在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据 7 条原则来开发程序,从而提高软件开发效率、节约软件开发成本和...

    海向
  • 3-AIV--使用ContentProvider获得所有图片路径

    张风捷特烈

扫码关注云+社区

领取腾讯云代金券