• Servlet技术


    JSP的作用

        为了简化起见,某种程度上,可以将servlet看做是含有HTML的Java程序;将JSP看作是含有Java代码的HTML页面。

        JSP文档只不是编写servlet的另一种方式。JSP页面会被翻译成servlet,servlet会被编译,在请求期间运行的就是servlet。

        对于面向处理(processing)的任务,servlet是最佳选择,而对于面向表示(presentation)的任务,JSP是最佳选择。

    生成HTML的servlet

        HTTP响应由状态行、一个或多个报头、一个空行和实际的文档以此次序构成。报头的出现次序并不重要,servlet会缓冲报头数据,将他们一次发送到客户端,因此,即使在设定报头之后,仍旧可以设置状态代码(属于返回内容的第一行)。但是,servlet不是一定要缓冲文档本身,因为对于篇幅较长的页面,用户或许只希望看到部分结果。servlet引擎可以缓冲部分输出,但并未规定缓冲区的大小。可以使用HttpServletResponse的getBufferSize方法去顶这个大小,或使用setBufferSize指定这个大小。也可以在缓冲区天慢慢,要发往客户时,对报头进行设置。如果不确定是否已经发送出去,也可以使用isCommitted方法来检查。即使如此,最佳方案还是将setContentType行放在任何使用PrintWriter的行之前。

    servlet的生命周期

        服务器只创建每个servlet的单一实例,每个用户请求都会引发新的线程——将用户请求交付给相应的doGet或doPost进行处理。

        get请求表示要从服务器获取数据;post请求表示向服务器传递数据。

      Init方法

        默认情况下,servlet对象是在第一次被请求的时候创建的,之后就驻留在web服务器管理的内存中。首次创建时,它的init方法会得到调用,因此,init是放置一次性设置代码的地方。servlet一般在用户首次调用对应的servlet的URL时创建init方法,但也可以指定servlet在服务器启动后载入。

      Service方法

        在这之后,针对每个用户请求,都会创建一个线程,该线程调用前面创建的实例的service方法。之后,由service方法依据收到的Http请求的类型,调用doGet,doPost或其他doXXX方法。如果需要在servlet中等同地处理post和get请求,应该让doPost调用doGet即可,而不是覆盖service方法。首先,之后还可以加入doPut,doTrace等,支持其他HTTP请求方法。其次,还可以通过添加getLastModified方法,加入对修改日期的支持,由于getLastModified方法由默认的service方法调用所以覆盖service方法也就失去了这个选项。最后,service提供对HEAD、OPTION和TRACE请求的自动支持。

      Destroy方法

        服务器可能会因为管理员要求或者服务器长时间空闲决定移除之前载入的servlet实例。在服务器移除servlet的实例之前,它会调用servlet的destroy方法,从而使得servlet有机会关闭数据库连接,停止后台运行的线程、将cookie列表的点击计数写入到磁盘,并执行其他清理活动。要意识到Web服务器有可能崩溃,所以不要讲destroy机制作为向磁盘上保存状态的唯一机制。

      ServletConfig对象

        与Servlet对象一一对应,封装Servlet的初始化信息

        在doPost/doGet方法中获取ServletConfig对象:this.getServletConfig()

        <servlet>

            <servlet-name>sdaasdada</servlet-name>

            <servlet-class>ghjhgjhghg</servlet-class>

            <init-param>

                 <param-name>username</param-name>

                 <param-name>password</param-name>

                 <param-value>123</para-value>getInitParamter("username");

            </init-param>

        </servlet>

        获取初始化参数:this.getServletConfig().

    Servlet的映射方式

        Servlet的请求路径是虚拟的,与项目路径无关

            扩展映射:*.do

            路径映射:/test/*

            http://localhost:8080/n01/test.do   会调用下面的路径(路径映射优先)

    在servlet中获取表单数据

        单个值的读取:调用HttpServletRequest的getParameter方法,提供大小写敏感的参数名作为方法的参数。

        多个值的读取:调用getParameterValues方法返回字符串数组。

        参数名的查找:调用getParameterNames以Enumeration的形式返回这种列表,其中每一项都可以转换成String,并可以用在getParameter或getParameterValues调用中。若当前请求中没有参数,getParameterNames返回空的Enumeration(不是null)。(Enumeration只是一个接口,确保实际的类实现了hasMoreElements和nextElement方法)它不会去报具体的实现采用何种次序。getParameterMap可以替代此方法。

    请求转发、重定向、包含

        参照http://www.blogjava.net/kxx129/archive/2006/09/07/68050.html

  • 相关阅读:
    eclipse快速给表达式生成对应变量的快捷键
    java截取字符串中的最后几个字符
    javascript删除数组元素的7个方法
    java构建树形列表(带children属性)
    elementui树表修改子节点不能实时更新的解决办法
    css3的user-select属性设置文本内容能否被选择
    javascript中for-in和for-of的区别
    计算机等级考试改革
    SQL分组查询
    Windows 8 快捷键
  • 原文地址:https://www.cnblogs.com/m-evan/p/4280098.html
Copyright © 2020-2023  润新知