• Servlet总结(Zpoor,你还说你不会Servlet?)


    在上周的S7英雄联盟总决赛中,因为Faker要急着回去吃饭,最终被SSG3:0,白天我还能忍得住,晚上就在被窝里悄悄的笑起来(哈哈哈。。。。自己脑补)。真得劲。

    这周学了还算不少东西,但是缺点就是不写博客了,你说你想干啥?还有我发现学习编程还是要多看书,少看视屏,多思考,多写,多总结

    我好饿啊。

    Servlet通常被称为服务端小程序,是运行在服务器端的程序,用于处理和响应客户端的请求。
    主要缺点就是开发效率低,表现层中,所有的HTML标签都要用输出流输出,非常麻烦。在MVC规范出来之后,Servlet作为控制器使用,不在作为视图层。

    Servlet是一个特殊的Java类,必须继承HttpServlet。Servlet提供不同的方法用于响应客户端的请求。

    doGet:用于响应客户端的GET请求
    doPost:用于响应客户端的POST请求
    doput:用于响应客户端的PUT请求
    doDelete:用于响应客户端的DELETE请求

    注意:
    doGet和doPost最常用,一般响应请求就要重写上面四种方法,大部分时候,Servlet对于请求响应都是一样的,只需重写service方法即可响应客户端的所有请求。

    init(ServletConfig config):创建Servlet实例,初始化Servlet资源
    destroy:销毁Servlet,自动调用该方法回收资源(一般都是关闭停止服务器才会调用此方法)
    注意:这两种方法无需重写

    设置编码方式:
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");

    获取的请求参数:
            String name = request.getParameter("name");(单个参数)

    获取复选框的参数:
            String[] color = request.getParameterValues("color");

    获取页面的输出流
            PrintStream out = new PrintStream(response.getOutputStream());

    Servlet和Jsp区别:
        Servlet没有内置对象,原本Jsp中的内置对象都要由程序显式创建
        对于静态的HTML标签,Servlet都要使用页面输出流逐个输出

    从servlet3.0开始,配置Servlet有两种方式:
        @WebServlet注解进行配置
        web.xml文件配置

    @WebServlet常用属性:
        asyncSupported    指定该Servlet是否支持一步操作模式
        displayName       指定Servlet的显示名
        initParams          为该Servlet配置参数
        loadOnStartup     该Servlet配置为load-on-startup的Servlet
        name              指定该Servlet的名称
        urlPatterns/value 两个属性的作用相同,指定该Servlet的处理URL

    关于@WebServlet注解和Web.xml配置的注意事项:
        使用的注解的时候:
            不要再web.xml文件的根元素(<web-app...>)指定metadata-complete = "true"。
            不要再web.xml中配置该servlet。
        使用web.xml的时候:
            要配置Servlet的名字:对应web.xml文件中的<servlet/>元素。
            要配置Servlet的URL:对应web.xml文件中的<servlet-mapping/>,如果没有配置就不能响应用户的请求。


    <servlet>
                <!-- 指定Servlet的名字 ,相当于指定@WebServlet的name属性 -->
          <servlet-name>firstServlet</servlet-name>
                <!-- 指定Servlet的实现类 -->
          <servlet-class>cn.zpoor.servlet.FirstServlet</servlet-class>
    </servlet>



        <!-- 配置Servlet的Url -->
    <servlet-mapping>
              <!-- 指定Servlet的名字 -->
          <servlet-name>firstServlet</servlet-name>
              <!-- 指定Servlet映射的Url地址 -->
          <url-pattern>/zpoor</url-pattern>
    </servlet-mapping>


    创建Servlet实例的两个时机:
        客户端第一次请求某个servlet,创建servlet实例(大部分都是这样创建的)
        Web应用启动时立即城建Servlet实例,即load-on-srtartup Servlet

    Jsp/Servlet的生命周期:
        创建Servlet实例
        Web容器调用Servlet的init方法,初始化Servlet
        初始化之后,一直在容器内,接收什么请求,就响应什么请求;或者统一使用Service方法来处理用户请求
        Web容器决定销毁Servlet,先调用Servlet的destory方法,通常在关闭web应用之前销毁servlet
        

    为Servlet配置参数的两种方式:
        @WebServlet的initParams属性来指定(name:指定参数名   value:指定参数值)
        web.xml文件的<servlet/>元素中添加<init-param/>子元素来指定(param-name:指定配置参数名  param-value:指定参数值)
        (访问Servlet配置参数通过ServletConfig对象完成,提供的方法Java.lang.String getInitParameter(java.lang.String name):获取初始化参数)(Jsp的内置对象config就是此处的ServletConfig)

    ServletConfig获取配置参数的方法和ServletContext方法完全一样(前者获取当前的Servlet配置参数,后者获取整个web应用的配置参数)

        try {
                    //获取ServletConfig对象
                ServletConfig config = getServletConfig();
                    //通过ServletConfig对象获取配置参数
                String driver = config.getInitParameter("driver");
                String url = config.getInitParameter("url");
                String user = config.getInitParameter("user");
                String password = config.getInitParameter("password");
            } catch (Exception e) {
                    e.printStackTrace();
                }

    Servlet作为控制器(Controller):
        作为表现层的劣势:
            开发效率低,所有的html都需要页面输出流完成
            不利于团队协作开发,美工没法参与Servlet的开发
            程序的可维护性差,即使修改一个按钮,都要重新编写编译java代码

    Jsp作为表现层(View)作用:
        负责收集用户的请求参数
        将应用的处理结果,状态数据呈现给用户

    MVC对应组件:
        M:Model 模型 对应javabean
        V:View 视图  对应jsp页面
        C:Controller 控制器  对应Servlet

    Servlet3.0新特性(革命版本):
        在javax.servlet.annotation提供如下注解:
            @WebServlet:修饰一个Servlet类,用于部署Servlet类
            @WebInitParam:为Servlet和Filter配置参数
            @WebFilter:修饰部署Filter类
            @MultipartConfig:修饰Servlet,指定该Servlet负责处理multipart/form-data类型的请求(用于文件上传)
        Web模块支持(web-fragment.xml配置知识)
        提供异步处理

    Servlet3.1新特性:
        强制更改Session id
        非阻塞IO(什么阻塞IO,当Servlet读取浏览器提交的数据时,如果数据不可用或者数据没有读取完成,当前线程就会阻塞无法继续向下执行)
            底层IO实现原理(基于两个IO流)
                ServletInputStream:读取数据的输入流
                ServletOutputStream:输出数据的输出流
            



  • 相关阅读:
    XML组成部分
    XML语法
    XML概念
    HTTP协议:响应消息的数据格式---Response
    KM HDU 3718
    KM最大匹配 HDU 2255
    匈牙利算法
    母函数
    最长公共子序列 LCS
    hdu 4632 区间DP
  • 原文地址:https://www.cnblogs.com/zpoor/p/7800217.html
Copyright © 2020-2023  润新知