Java学习之Servlet

servletJava语言编写的服务器端程序,其主要功能是交互式地浏览和修改数据,生成动态Web内容。

开发Servlet:

1定义一个类HelloServlet,并让该类去实现javax.servlet.Servlet接口;

2实现Servlet接口中的init,service,destory等方法.

3找到项目根下的WEB-INF下的web.xml文件,在根元素web-app中创建一个新的元素节点:servlet再创建一个对应的元素节点:servlet-mapping

Servlet执行流程构造器-->init方法--> 循环[ service方法 ]--->destory方法(正常关闭服务器)

1:浏览器发出请求;

2:解析请求信息;

3:找到服务根/config/server.xml文件.:解析该<Context/>元素,得到docBase属性,获取当期访问Web项目的根的绝对路径;

4:从Web项目根路径下的WEB-INF下找到web.xml文件,根据URL上的资源名对应的servlet-mapping可以获取该资源对应Servlet类的全限定名称;

5:判断Servlet实例缓存池中是否有这个资源的对象.若没有则使用反射调用构造器,创建对象.并存放在缓存之中,供下次使用;

6:创建ServletConfig对象,并调用init方法.obj.init(config)

7:创建ServletRequest对象和ServletResponse对象,并调用service方法: obj.service(req,resp)

8:在service方法中对浏览器做出响应操作。

Servlet初始化参数:

为了避免在Servlet中存在硬编码二维护困难的问题,我们往往把硬编码数据存放于配置文件中,Servlet提供初始化参数的机制。

现在的问题:如何在Servlet中获取自身的初始化参数信息:

String getInitParameter(String name):

根据指定的初始化参数名称,获取对应的参数值:

Enumeration<String> getInitParameterNames()

获取当期Servlet所有初始化参数的名字,返回Enumeration对象(古老Iterator对象)

Servlet继承体系

Servlet接口                   ServletConfig接口

   |实现                            |实现

               GenericServlet 

                    |继承

                HttpServlet

                    |继承

                BaseServlet类(自定义类)

HttpServletRequest常用方法:

String getContextPath():获取上下文路径,<Context path="上下文" ../>

String getHeader(String headName):根据指定的请求头获取对应的请求头的值。

String getRequestURI():返回当期请求的资源名称.  上下文路径/资源名。

StringBuffer getRequestURL():返回浏览器地址栏的内容。

String getRemoteAddr():返回请求服务器的客户端的IP

String getParameter(String name):根据参数名称,获取对应参数的值。

String[] getParameterValues(String name):根据参数名称,获取该参数的多个值。

Enumeration<String> getParameterNames():获取所有请求参数的名字。

Map<String,String[]> getParameterMap():返回请求参数组成的Map集合。

key:参数名称

value:参数值,封装在String数组中。

请求乱码的处理办法

POST方式:

request.setCharacterEncoding("UTF-8");//设置请求的编码方式。

注意:必须在获取第一个参数之前设置,只对POST方式有效。

GET方式:

重新设置Tomcat的编码方式,修改Tomcat的配置文件.

Tomcat/conf/server.xml(修改端口行一行).

注意:该方式只对于GET方式有效。

 

HttpPServletResponse常用方法:

OutputStream getOutputStream():获取字节输出流.  :文件下载

Writer getWriter():获取字符输出流.              :输出内容

注意:以上两个方法不能共存,只能使用其中一个。

Servlet的生命周期:

启动Tomcat-->第一次访问:  构造器-->init方法-->service方法.........

也就是说,Servlet对象构建和初始化操作是在第一次请求的时候执行的.

第一次发请求的用户倒霉,花很多时间去做Servlet对象构建和初始化操作.

在开发中,会专门地提供一个Servlet,用来做应用初始化准备操作,期望,在启动Tomcat的时候就完成初始化准备操作.

此时,只需要一个配置:

<load-on-startup>1</load-on-startup>

Servlet映射细节:

1):一个Servlet组件可以拥有多个映射,提供多个<servlet-mapping>即可.

 

2):Servlet的通配符映射.

   使用*来表示任意个数的任意字符.

      方式1:   /*       :任意的资源名称都可以访问该Servlet.

               /system/*:/system/任意字符都可以访问.

      方式2:   *.拓展名 :

               *.it:只要以.it结尾的资源名称都可以访问该Servlet.

 

3):自定义的Servlet组件的<servlet-name>的名称不能为default.

   若叫做default则不能访问静态资源了(Servlet资源,网页,图片等).

   在Tomcat中处理静态资源的Servlet的名称就叫做default.

4):Servlet的线程安全问题--Servlet是线程不安全的:

     Servlet是单例的,快些,不安全.  不要使用成员变量. SpringMVC,Struts1线程不安全的.


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值