大发pk10_pk10破解_大发pk10破解 - 大发pk10,pk10破解,大发pk10破解为网友提供全面快捷权威的综合大发pk10,pk10破解,大发pk10破解信息报道,包括新闻、国内国际要闻、体育娱乐新闻、社会生活新闻、博览会新闻、房产、汽车、健康女性、IT等多类服务

Java Web(一) Servlet详解!!

  • 时间:
  • 浏览:0

    这篇文章到上一篇,距离的很重遥远呀,隔了合适有4个多多月把,上边在家过了个年,哈哈~ 现在重新开始英文英文拾起。

                                        --WZY

一、那此是servlet?

    防止请求和发送响应的过程是由并也有叫做Servlet的系统进程来完成的,许多 Servlet是为了防止实现动态页面而衍生的东西。理解你你这些 的前提是了解许多http协议的东西,许多 知道B/S模式(浏览器/服务器)。

    B/S:浏览器/服务器。 浏览器通过网址来访问服务器,比如访问百度,在浏览器中输入www.baidu.com,你你这些 那么 浏览器就会显示百度的首页,那么你你这些 具体的过程,步骤是怎么可不可以的呢?你你这些 就了解一下http请求和响应了

                  

    请求,响应:通过给的链接应该可不时要知道你你这些个多多具体的内容

二、tomcat和servlet的关系

    Tomcat 是Web应用服务器,是4个多多Servlet/JSP容器. Tomcat 作为Servlet容器,负责防止客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.而Servlet是并也有运行在支持Java语言的服务器上的组件. Servlet最常见的用途是扩展Java Web服务器功能,提供非常安全的,可移植的,易于使用的CGI替代品.

    从http协议中的请求和响应可不时要得知,浏览器发出的请求是4个多多请求文本,而浏览器接收到的也应该是4个多多响应文本。许多 在上边你你这些 图中,并他不知道是怎么可不可以转变的,只知道浏览器发送过来的请求也许多request,大家响应回去的就用response。忽略了其中的细节,现在就来探究一下。

              

      ①:Tomcat将http请求文本接收并解析,许多 封装成HttpServletRequest类型的request对象,所有的HTTP头数据读可不时要通过request对象调用对应的最好的土办法查询到。

      ②:Tomcat同都并不响应的信息封装为HttpServletResponse类型的response对象,通过设置response属性就可不时要控制要输出到浏览器的内容,许多 将response交给tomcat,tomcat就会将其变成响应文本的格式发送给浏览器

    Java Servlet API 是Servlet容器(tomcat)和servlet之间的接口,它定义了serlvet的各种最好的土办法,还定义了Servlet容器传送给Servlet的对象类,其中最重要的许多ServletRequest和ServletResponse。许多说大家在编写servlet时,时要实现Servlet接口,按照其规范进行操作。

三、编写Servlet

    在前面,大家可能性知道了servlet是那此,为那此时要servlet?(为了实现动态网页,而也有显示静态网页,情况报告报告可不时要百度查查),tomcat和servlet的关系?等问題图片。现在来手动编写4个多多Servlet。

    3.1、手动编写servlet。

      1、创建4个多多MyServlet继承HttpServlet,重写doGet和doPost最好的土办法,也许多看请求的最好的土办法是get还是post,许多 用不同的防止最好的土办法来防止请求,

            

      2、在web.xml中配置MyServlet,为那此时要配置?让浏览器发出的请求知道到达哪个servlet,也许多让tomcat将封装好的request找到对应的servlet让其使用。

            配置八个东西。

                

            配置那么 ,浏览器是怎么可不可以通过大家配置的信息来找到对应的servlet的。

                

            按照步骤,首先浏览器通过http://localhost:500500/test01/MyServlet来找到web.xml中的url-pattern,这许多第一步,匹配到了url-pattern后,就会找到第二步servlet的名字MyServlet,知道了名字,就可不时要通过servlet-name找到第三步,到了第三步,也就都都还可不可以 知道servlet的位置了。许多 到其中找到对应的防止最好的土办法进行防止。

       3、实验,验证上边配置成功。

               

            

    3.2、利用向导新建MyServlet

        你你这些 就相对简单了,web.xml太久大家手动配置,工具直接帮大家自动配置了

            1、右击项目,在new选项蕴藏直接新建servlet的选项

            2、配置MyServlet类中的信息

                

          3、配置web.xml中的servlet信息

                  

        4、查看MyServle01类中的代码和web.xml,其中的配置跟手动的配置是一样的,许多用图形化界面,让大家更方便的创建servlet而产生的。

    3.3、详解创建servlet的原理

        1、servlet的生命周期是那此?

        2、为那此创建的servlet是继承自httpServlet,而也有直接实现Servlet接口?

        3、servlet的生命周期中,可不时要看出,执行的是service最好的土办法,为那此大家就只时要写doGet和doPost最好的土办法呢?

        等你你这些 系列的问題图片,大家都应该知道,而不应该就单纯的知道怎么可不可以配置和使用servlet?上边的问題图片,一一来解答。

        1、servlet的生命周期是那此?

          服务器启动时(web.xml中配置load-on-startup=1,默认为0)可能性第一次请求该servlet时,就会初始化4个多多Servlet对象,也许多会执行初始化最好的土办法init(ServletConfig conf)

          该servlet对象去防止所有客户端请求,在service(ServletRequest req,ServletResponse res)最好的土办法中执行

          最后服务器关闭时,才会销毁你你这些 servlet对象,执行destroy()最好的土办法。

              

        2、为那此创建的servlet是继承自httpServlet,而也有直接实现Servlet接口?

        3、servlet的生命周期中,可不时要看出,执行的是service最好的土办法,为那此大家就只时要写doGet和doPost最好的土办法呢?

          查看源码,httpServlet的继承型态。

             httpServlet继承GenericServlet。懂的人立马就应该知道,GenericServlet(通用Servlet)的作用是那此?合适的许多将实现Servlet接口的最好的土办法,复杂化编写servlet的步骤。具体下面详解

                

             GenericServlet的继承型态,实现了Servlet接口和ServletConfig接口,

                    

             Servlet接口内容

                  

                从这里可不时要看过,Servlet生命周期的4个多多关键最好的土办法,init、service、destroy。还有另外4个多多最好的土办法,4个多多getServletConfig()最好的土办法来获取ServletConfig对象,ServletConfig对象可不时要获取到Servlet的许多信息,ServletName、ServletContext、InitParameter、InitParameterNames、通过查看ServletConfig你你这些 接口就可不时要知道

             ServletConfig接口内容

                 

                其中ServletContext对象是servlet上下文对象,功能有许多,获得了ServletContext对象,就能获取大每段大家时要的信息,比如获取servlet的路径,等最好的土办法。

               到此,就知道了Servlet接口中的内容和作用,总结起来许多,4个多多生命周期运行的最好的土办法,获取ServletConfig,而通过ServletConfig又可不时要获取到ServletContext。而GenericServlet实现了Servlet接口后,也许多明大家可不时要直接继承GenericServlet,就可不时要使用上边大家所介绍Servlet接口中的那好多个最好的土办法了,能拿到ServletConfig,也可不时要拿到ServletContext,不过那样太麻烦,非要直接获取ServletContext,许多GenericServlet除了实现Servlet接口外,还实现了ServletConfig接口,那样,就可不时要直接获取ServletContext了。

              GenericServlet类的内容详解

                     

                看上图,用红色框框起来的许多实现Servlet和ServletConfig接口所实现的最好的土办法,有9个,这很正常,许多 大家可不时要发现,init最好的土办法有4个多多,4个多多是蕴藏参数ServletConfig的,4个多多否有参的最好的土办法,为那此那么 设计?这里时要知道其中做了那此事情,来看看你你这些个多多最好的土办法分别做了那此事?

                init(ServletConfig config)

                      

                init()

                      

                4个多多成员变量config

                      

                getServletConfig()

                      

                通过这好多个最好的土办法一块儿来讲解,首先看init(ServletConfig config)最好的土办法,可能性非要init(ServletConfig config)蕴藏高ServletConfig对象,为了方便都都还可不可以 在许多地方都还可不可以 直接使用ServletConfig对象,而不仅仅局限在init(ServletConfig config)最好的土办法中,许多创建4个多多私有的成员变量config,在init(ServletConfig config)最好的土办法中就将其赋值给config,许多 通过getServletConfig()最好的土办法就都都还可不可以 获取ServletConfig对象了,你你这些 可不时要理解,许多 在init(ServletConfig config)中,158行,还调用了4个多多init()最好的土办法,许多 你你这些 init()最好的土办法是空的,那此读那么,这是为那此呢?你你这些 原因是为了防止一件事情,当大家时要在init最好的土办法中做许多别的事情,大家想到的最好的土办法许多继承GenericServlet许多 重写了init(ServletConfig config)最好的土办法,那么 依赖,就破坏了那么 在GenericServlet类中init(ServletConfig config)写的代码了,也许多在GenericServlet类中的成员变量config会老会 是null,无法得到赋值,可能性被重写了,就太久在执行GenericServlet中init(ServletConfig config)最好的土办法中的代码。要想赋值,就时要在重写的init(ServletConfig config)最好的土办法中调用父类的init(ServletConfig config)最好的土办法,也许多super.init(ServletConfig config),那么 一来,就很不方便,怕有那么 会忘了写这句代码,许多在GenericServlet类中增加4个多多init()最好的土办法,那么 时要在init最好的土办法中时要初始化别的数据,只时要重写init()你你这些 最好的土办法,而不时要去覆盖init(ServletConfig config)你你这些 最好的土办法,那么 设计,就好许多,太久在管init(ServletConfig config)你你这些 其中的内容了。许多用出先许多的问題图片。

                service(ServletRequest req, ServletResponse res)

                      

                   4个多多抽象最好的土办法,说明在GenericServlet类中并那么实现该内容,那么大家想到的是,在它上边肯定还有一层,也许多还有4个多多子类继承它,实现该最好的土办法,许多让大家许多人写的Servlet继承GenericServlet,时要许多人写service最好的土办法,那你造累死,许多 大家可不时要看过,service最好的土办法中的参数还是ServletRequest,ServletResponse。并那么跟http相关对象挂钩,许多大家接着往下面看。

           HttpServlet类详解

               继承了GenericServlet类,通过大家上边的推测,你你这些 类主要的功能肯定是实现service最好的土办法的各种细节和设计。许多 通过类名可不时要知道,该类就跟http挂钩了。

                     

                关注service(HttpServletRequest req, HttpServletResponse resp)最好的土办法和service(ServletRequest req, ServletResponse res)最好的土办法。

                  service(ServletRequest req, ServletResponse res)最好的土办法

                        

                    该最好的土办法中就做一件事情,许多将ServletRequest和ServletResponse你你这些个多多对象强转为HttpServletRequest和HttpServletResponse对象。为那此能那么 转?

                      首那么知道req、res是那此类型,通过打印System.out.println(req),可不时要知道,req实际上的类型是org.apache.catalina.connector.RequestFacade                         Tomcat中的源码。

                        

                          

                    通过图可不时要得知,req的继承型态:RequestFacade、httpServletRequest、ServletRequest,大家知道并也有req是ServletRequest,那么从继承型态上看,它也可不时要看成HttpServletRequest,也可不时要看成ServletRequest,许多强转为HttpServletRequest是可不时要的,可能性不明白,我举个例子,ArrayList、List、Object 你你这些 ,Object obj = new ArrayList();  List list = new ArrayList();  4个多多ArrayList对象可不时要看成List对象, 也可不时要看成4个多多Object对象,现在obj是也有可不时要堪称List对象呢?答案是可不时要的,可能性obj许多ArrayList对象,既然是ArrayList对象,那么就可不时要看成是List对象。一样的道理,RequestFacade 对应 ArrayList、httpServleRequest对应 List、 ServletRequest 对应 Object。

                    转换为httpServletRequest和HttpServletResponse对象那么 ,在调用service(HttpServletRequest req, HttpServletResponse resp)最好的土办法。

                service(HttpServletRequest req, HttpServletResponse resp)

                    你你这些 最好的土办法许多判断浏览器过来的请求最好的土办法是哪种,每段的防止最好的土办法不一样,大家常用的许多get,post,许多 ,大家防止的最好的土办法可能性有许多的内容,许多,在该最好的土办法内会将get,post等许多5种请求最好的土办法提取出来,变成单个的最好的土办法,许多 大家时要编写servlet时,就可不时要直接重写doGet可能性doPost最好的土办法就行了,而也有重写service最好的土办法,更加有针对性。许多这里就回到了大家上边编写servlet时的情况报告,继承httpServlet,而倘若重写4个多多最好的土办法,4个多多doGet,4个多多doPost,嘴笨 许多service最好的土办法会调用你你这些个多多最好的土办法中的4个多多(看请求最好的土办法)。许多也就解答了大家一开始英文英文提的问題图片3。  

四、好多个重点的对象。ServletConfig、ServletContext,request、response

       讲解四大类,ServletConfig对象,ServletContext对象、request对象,response对象

    ServletConfig对象

        获取途径:getServletConfig(); 

        功能:上边合适提及了一下,能得到八个东西,

              

            getServletName();  //获取servlet的名称,也许多大家在web.xml中配置的servlet-name

            getServletContext(); //获取ServletContext对象,该对象的作用看下面讲解

            getInitParameter(String); //获取在servlet中初始化参数的值。这里注意与全局初始化参数的区分。你你这些 获取的许多在该servlet下的初始化参数

                

             getInitParameterNames(); //获取在Servlet中所有初始化参数的名字,也许多key值,可不时要通过key值,来找到各个初始化参数的value值。注意返回的是枚举类型

                

                

                

           注意:在上边大家所分析的源码过程中,大家就知道,嘴笨 可不时要太久先获得ServletConfig,许多 在获取其各种参数,可不时要直接使用其最好的土办法,比如上边大家用的ServletConfig().getServletName();可不时要直接写成getServletName();而太久在先获取ServletConfig();了,原因许多在GenericServlet中,可能性帮大家获取了那此数据,大家只时要直接拿就行。

      ServletContext对象

           获取途径:getServletContext(); 、getServletConfig().getServletContext();  //这并也有获取最好的土办法的区别就跟上边的解释一样,第并也有是直接拿,在GenericServlet中可能性帮大家用getServletConfig().getServletContext();拿到了ServletContext。大家只时要直接获取就行了,第二种就合适大家许多人在获取一遍,并也有读是一样的。

           功能:tomcat为每个web项目都创建4个多多ServletContext实例,tomcat在启动时创建,服务器关闭时销毁,在4个多多web项目中共享数据,管理web项目资源,为整个web配置公共信息等,通俗点讲,许多4个多多web项目,就地处4个多多ServletContext实例,每个Servlet读可不时要访问到它。

              1、web项目中共享数据,getAttribute(String name)、setAttribute(String name, Object obj)、removeAttribute(String name)

                  setAttribute(String name, Object obj) 在web项目范围内存放内容,以便让在web项目中所有的servlet读能访问到

                  getAttribute(String name) 通过指定名称获得内容

                  removeAttribute(String name) 通过指定名称移除内容   

                   

                     

                    

              2、整个web项目初始化参数 //你你这些 许多全局初始化参数,每个Servlet中都能获取到该初始化值

                  getInitPatameter(String name)  //通过指定名称获取初始化值

                  getInitParameterNames()  //获得枚举类型

                   web.xml 配置 整个web项目的初始化

                      

                      

                      

              3、获取web项目资源

                  3.1获取web项目下指定资源的路径:getServletContext().getRealPath("/WEB-INF/web.xml")

                    

                    

                  3.2获取web项目下指定资源的内容,返回的是字节输入流。InputStream getResourceAsStream(java.lang.String path)

                    前提知识:时要了解流。他不知道的可不时要去看看IO流总结的文章

                    

                    输出内容截图一每段

                    

               4、getResourcePaths(java.lang.String path)  指定路径下的所有内容。

                    

                    

                    

                5还有许多别的最好的土办法,暂时用到的就这好多个了,那么 时要在用的,就查看源码,看API。

      request对象

          大家知道,request许多将请求文本封装而成的对象,许多通过request能获得请求文本中的所有内容,请求头、请求体、请求行 。

                

            1、请求行内容的获取。

              

              

                

            2请求头的获取

                随便百度4个多多东西,许多 查看的请求头,包括以下那此内容,稍作了解。

                

                String getHeader(java.lang.String name) 获得指定头内容String【】

                  

                  

                long getDateHeader(java.lang.String name) 获得指定头内容Date

                int getIntHeader(java.lang.String name)  获得指定头内容int

                Enumeration getHeaders(java.lang.String name) 获得指定名称所有内容

            3请求体的获取 -- 请求参数的获取

               分并也有,并也有get请求,并也有post请求

               get请求参数:http://localhost:500500/test01/MyServlet?username=jack&password=1234

               post请求参数: <form method="post"><input type="text" name="username">

                String request.getParameter(String) 获得指定名称,4个多多请求参数值。

                String[] request.getParameterValues(String) 获得指定名称,所有请求参数值。相似:checkbox、select等

                Map<String , String[]> request.getParameterMap() 获得所有的请求参数  

            4请求转发

                request.getRequestDispatcher(String path).forward(request,response);  //path:转发后跳转的页面,这里不管用太久"/"开头,也有以web项目根开始英文英文,可能性这是请求转发,请求转发只局限与在同4个多多web项目下使用,许多这里老会 也有从web项目根下开始英文英文的,

                web项目根:

                    开发:G:\Workspaces\test01\WebRoot\..

                    运行时:D:\java\tomcat\apache-tomcat-7.0.53\webapps\test01\..

                 web站点根:

                    运行时:D:\java\tomcat\apache-tomcat-7.0.53\webapps\..

                从这里可不时要看出,web项目根许多从该web项目名开始英文英文,许多大家请求转发时,只时要接着项目名上边时要访问的路径写就行了,

                特点:浏览器中url太久改变,也许多浏览器他不知道服务器做了那此,是服务器帮大家跳转页面的,许多 在转发后的页面,都都还可不可以 继续使用那么 的request,可能性是那么 的request,许多request域中的属性都可不时要继续获取到。

      response对象

          

        常用的4个多多最好的土办法:response.setHeader(java.lang.String name, java.lang.String value) 设置指定的头,一般常用。

             相似:设置每隔3秒就自动刷新一次,

              response.setHeader("Refresh",3);

              

              

              那么 可不时要看过现在时间的秒数,会发现每隔三秒就会自动刷新一次页面。

        你你这些 最重要的4个多多许多重定向,许多的许多操作都被封装到response对象中了,重点讲解重定向

          重定向(页面跳转)

            最好的土办法一:手动方案

                response.setStatus(5002);  //情况报告码5002就代表重定向

                response.setHeader("location","http://www.baidu.com");

            最好的土办法二:使用封装好的,通过response.sendRedirect("http://www.baidu.com");

          特点:服务器告诉浏览器要跳转的页面,是浏览器主动去跳转的页面,浏览器知道,也浏览器的地址栏中url会变,是浏览器重新发起4个多多请求到另外4个多多页面,许多request是重新发起的,跟请求转发不一样。

            注意:response.sendRedirect(path);  //

            第并也有:response.sendRedirect("/test01/MyServlet01");  //使用了"/"开头,说明是从web站点根开始英文英文,许多时要写test01/MyServlet01

            第二种:response.sendRedirect("MyServlet01");  //那么使用"/"开头,说明是从web项目根开始英文英文,那么就太久写test01了。

            重定向那么任何局限,可不时要重定向web项目内的任何路径,也可不时要访问别的web项目中的路径,许多 这里就用"/"区分开来,可能性使用了"/"开头,许多明我时要重新开始英文英文定位了,不访问刚才的web项目,许多人写项目名,可能性那么使用"/"开始英文英文,那么就知道是访问刚才那个web项目下的servlet,就可不时要省略项目名了。许多那么 来区别。

五、总结

      你你这些 章节篇幅较长,不过理清许多知识点

          1、那此是servlet?可能性编写servlet?

          2、分析了servlet的每段源码,知道了其中的许多设计巧妙的东西,比如,那么 编写servlet是能看过其生命周期的,许多 在其设计下,大家只关注doGet和doPost最好的土办法,为那此能那么 呢?就可不时要通过源码中得知。

          3、servlet的生命周期,web.xml的配置

          4、servlet中的ServletConfig对象,ServletContext对象,request对象,response对象的完整讲解。包括其中的许多常用的最好的土办法。

          5、下一篇讲解一下request、response的中文乱码问題图片的防止