zoukankan      html  css  js  c++  java
  • Servlet

    一、servlet的简单了解
    1.浏览器通过url地址,访问web项目中的java代码
    本质:通过浏览器向web服务器中某个地址发送http协议的请求(get或post等),让服务器自动调用某个对象的指定方法,从而让该方法执行完可以给本次http请求返回一个http响应。最后浏览器收到响应。最后浏览器收到响应后进行解析并显示用户结果。
    url地址---》调用---》java对象中的方法(servlet技术)

    2.新建web项目
    选择Dynamic Web project-->不要直接选finlish,选next,勾选Generate web.xml,自动生成web.xml

    3.web.xml文件:这个是web项目的配置文件,每个web项目都要有自己的配置文件(web.xml),同时这个web.xml文件内容是让tomcat服务器在启动期间来自动读取的
    tomcat能自动读取web项目中的web.xml原因:
        1.web项目是在tomcat中部署的
        2.web项目结构是固定的


    <servlet>
         <servlet-name>test</servlet-name>
         <servlet-class>com.briup.test.HelloWorld</servlet-class>
    </servlet>
    <servlet-mapping>
            <servlet-name>test</servlet-name>
            <url-pattern>/test</url-pattern>
        </servlet-mapping>

    启动tomcat之后访问   http://127.0.0.1:8088/Test3/test

    4.相关问题:
    (1).web项目中的我们为什么没有编写程序入口(main)?
     web项目是不需要我们写main函数的,web项目启动会自动调用tomcat服务器或者其他应用服务器的main函数,然后通过web.xml的配置去加载其他类
     (2).我们编写的HelloWorld为什么可以称之为Servlet?
    实现了Servlet接口
     (3).HelloWorld这个类的对象是谁创建的?
    web容器创建的
     (4).当我们通过浏览器发请求访问HelloWorld对象的时候,tomcat会调用这个类的中的哪个方法来处理这个请求?
    service方法
    (5)servlet是单例,每一个servlet类只有一个对象,不同的客户端调用的都是同一个对象
    (6). 容器启动的时候创建

    二、servlet的编写
    servlet:
    servlet就是java类,这种java类可以提供web形式的访问
    1.如何编写servlet
    (1)实现Servlet接口(5个方法)
    最重要的是实现接口中的service方法
    (2)继承父类GenericServlet
    另外重载了一个无参的init()方法
    (3)继承HttpServlet
    一般常用的浏览器发请求方式为get和post,这俩种方式分别对应了这个类中的doGet方法和doPost方法。


    2.Servlet接口中的5个方法
    //初始化servlet对象的时候被调用
    void init(ServletConfig config)
    //销毁servlet对象的时候被调用
    void destroy()
    //访问servlet对象的时候被调用
    void service(ServletRequest req,ServletResponse res)
    //返回servlet相关信息,比如作者、版本、版权等
    //String getServletInfo()
    //返回ServletConfig对象
    ServletConfig getServletConfig()


    3.servlet的访问
    (1)在浏览器的地址栏中,直接输入servlet映射的路径来访问
     这时候是get方式的访问,servlet中的doGet方法最终会被调用
    (2)在页面中,使用超链接来访问servlet
    这时候是get方式的访问
    (3)在页面中,可以使用表单发送请求去访问servlet
    这时候默认情况下是get方式访问,但是可以通过表单里的属性值进行设置为get或者post方式
    (4)将来还可以使用javascript或者在ajax中发请求访问servlet,这个时候也可以进行设置使用get方式还是post方式进行访问servlet

    get方式传参数 参数在uri后面(uri和url的区别) 地址栏
            GET /hello.html?name=tom HTTP1.1
            key: value
            key: value
            key: value
            .....
            
    uri统一资源标识符 用来唯一标识一个资源
    url统一资源定位符,url比uri的资源多很多
    url是uri的子集
        
        post方式传参 参数在请求正文中
            POST /hello.html HTTP1.1
            key: value
            key: value
            key: value
            .....
            
            name=tom
    get post传参的区别:
    get传参  参数在uri中; post传参  参数在请求正文中
    get方式的参数由于在地址栏中显示的,所以安全性低一点,post方式传参的时候参数在请求正文中,会相对来说安全一些
    get方式传参,参数长度是要看浏览器对地址栏中字符长度的限制;post方式参数,参数长度是要看服务器一次性最多能够接受并且处理多少数据


    4.servlet接收客户端传的参数
    不管客户端是post方式还是get方式传参,只是参数存放的位置在传输过程有所变化,但是对于servlet接收参数来讲,俩种情况都是一样的接收
        http://127.0.0.1:8080/jd1908-servlet/param?username=briup&password=briup&like=0&like=1
        下面的测试是在这样的传参中进行的
        http://127.0.0.1:8989/web_servlet/ParamServlet?name=tom&age=20&like=0&like=1

    接收单一的值
    request.getParameter("name");
    一个参数名对应多个值
    request.getParameterValues("like");
    System.out.println(Arrays.toString(like));

    获得本次传参中的所有参数名
    Enumeration<String> names = request.getParameterNames();
            while(names.hasMoreElements()){
                String str = names.nextElement();
                System.out.println(str);
            }

    Map<String, String[]> map = request.getParameterMap();
            for(String key:map.keySet()){
                System.out.println(key+" : "+Arrays.toString(map.get(key)));
            }
            打印结果:
            name : [tom]
            age  : [20]
            like : [0, 1]

    5.客户端传参过程中,出现中文乱码
    get方式乱码
    需要在tomcat服务器中server.xml文件中进行配置
    在<Connector>中加入新的属性URIEncoding="XXX"
    <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8989" protocol="HTTP/1.1" redirectPort="8443"/>
    post方式乱码
     request.setCharacterEncoding("UTF-8");
    用io流写数据时乱码
     response.setCharacterEncoding("UTF-8");
    //设置响应头部,告诉浏览器响应内容编码为utf-8
     response.setContentType("text/html;charset=utf-8");

    6.servlet的跳转和重定向
    (1)服务器内部跳转
    String url = "/hello.html";//获得一个指向url的跳转对象
    RequestDispatcher dispatcher = request.getRequestDispatcher(url);//进行跳转 跳转的同时把request和response转发给要跳转到的url
     dispatcher.forward(request, response);

    特点:1.需要使用request对象来完成
            2.服务器内部跳转就是把请求request和响应response转发给下一个资源,所以整个跳转期间所有涉及到的资源使用的都是同一个request和同一个response。
            3.服务器跳转,不会改变地址栏中的地址


    (2)客户端重定向
         客户端重定向到一个页面中或者一个servlet中
    String url = "hello.html";
    response.sendRedirect(url);
    String url = "TestServlet";
     response.sendRedirect(url);

    特点:1.需要使用response对象来完成
               2.每一个客户端重定向,浏览器都会发出新请求,在服务器内部会产生新的request对象和response对象
               3.客户端重定向,会改变浏览器地址栏的地址



        

  • 相关阅读:
    JS基础类型和引用类型
    ul的margin撑不开想要的距离的办法
    html中的列表
    BEM的命名规则
    意义模糊的函数签名……文档注释
    最基础,新手入门第一段代码
    Cookie的使用
    用servlet校验密码2
    用servlet进行用户名和密码校验
    登录页面
  • 原文地址:https://www.cnblogs.com/yxj808/p/12017869.html
Copyright © 2011-2022 走看看