Servlet入门简介


(1)什么是servlet:运行在web服务器端的java程序(java类)
    作用:接收浏览器发送的请求,把相关数据响应给浏览器。
        (2)servlet实现方式:
* 实现Servlet接口
* 继承GenericServlet
* 继承HttpServlet(在开发中用的比较多)
     创建servlet类,步骤:
     1.创建一个普通类:HelloServlet, 让它继承HttpServlet
      public class HelloServlet extends HttpServlet{
      
      
      }

(3)servlet的入门案例:
    步骤:
   1.创建一个普通类,继承HttpServlet,重写里面的方法,service服务方法
     服务方法的作用:用来接收请求,并且响应的。
   2.配置用户访问的路径,在web.xml文件里配置路径
<!--1.配置servlet -->
 <servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>cn.itheima.demo1.HelloServlet</servlet-class>
 </servlet>
 <!--2.配置servlet的映射路径  -->
 <servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
 </servlet-mapping>
访问HelloServlet的路径:/hello


在浏览器地址完整访问路径:http://localhost:8080/day11_1/hello

(4)servlet的执行流程
*1.在浏览器地址栏:http://localhost:8080/day11_1/hello
*2.通过/hello访问servlet路径,找web.xml文件上<url-pattern>标签里面对应的路径
*3.根据/hello访问路径,找到了<url-pattern>标签对应的值,找<servlet-name>标签对应的servlet名称
*4.根<servlet-mapping>下的子标签<servlet-name>的名称,找<servlet>标签下的子标签<servlet-name>,
  去<servlet-class>标签对应的值:类的全路径。
  利用反射去执行服务方法:
  String className = "cn.itheima.demo1.HelloServlet";
  //根据全路径,得到HelloServlet对应的class对象
  Class clazz = Class.forName(className);
  //根据clazz对象,得到HelloServlet对象
  Object obj = clazz.newInstance();
  去执行它的service方法

(5)servlet的生命周期:
生命周期方法
* init方法:   第一次访问servlet,servlet对象被创建了,执行初始化方法,执行一次
* service方法:每次访问servlet时,都执行,执行多次
* destory方法:关闭tomcat服务器时,servlet对象销毁了,执行一次

(6)servlet的路径配置(了解)
    在web.xml文件的<servlet-mapping>下的<url-pattern>标签这里配置路径。
    配置路径有三种方式:
*1.完全路径匹配 :以/ 开始
例如: /ServletDemo4 , /aaa/ServletDemo5 , /aaa/bbb/ServletDemo6
*2.目录匹配:以/ 开始 需要以 * 结束.
例如: /*  (所有) ,/aaa/* (aaa目录下的所有) ,/aaa/bbb/*
*3.扩展名匹配:不能以 / 开始 以 * 开始的. 例如: *.do , *.action 、*.jsp 、*.jpg
 注意:扩展名匹配,/*.do错误的写法
 异常信息:Invalid <url-pattern> /*.action in servlet mapping


优先级:完全路径匹配>目录匹配>扩展名匹配

(7)servlet细节问题
* 1.在service方法里面的参数
   ServletRequest和HttpServletRequest
   ServletResponse和HttpServletResponse
* 2.servlet对象的创建
 第一种:在第一次访问servlet时,被创建。
 第二种:在服务器启动时创建servlet.<load-on-startup>2</load-on-startup>
*3.执行service服务方法时,其实底层代码执行的doGet,doPost方法等(掌握)
   在创建servlet时,不用重写service方法,因为service方法底层调用doGet和doPost
   浏览器发送get请求--->doGet方法
   浏览器发送post请求---->doPost方法
*4.方法的相互调用(掌握)
  需求:在doGet方法完成1加到100之间的和
       在doPost方法完成1加到100之间的和
  代码:
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("接受浏览器发送的get请求");
int sum=0;
for(int i=0;i<101;i++){
sum+=i;
}
System.out.println(sum);
 }


/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("接受浏览器发送的post请求");
doGet(request, response);
       }



(8)开发中的路径问题(掌握)
*1.java项目的路径:
  ==绝对路径:E:/javaweb2/day10_1/src/db.properties


  ==相对路径:src/db.properties
*2.web项目的路径
 * 相对路径:
    = 在同一级目录:直接写文件名称
    = 在上一级目录:../文件名称
    = 在下一级目录: 目录名称/文件名称
 * 绝对路径:
第一种方式:http://192.168.75.82:8080/day11_1/img/c.jpg

第二种方式:/day11_1/img/c.jpg



 ServletConfig:


(1)什么ServletConfig: 它是servlet的配置对象,可以获取servlet的配置参数
  配置servlet的初始化参数:
   <servlet>
<servlet-name>DemoServlet</servlet-name>
<servlet-class>cn.itheima.demo1.DemoServlet</servlet-class>
   <init-param>
<param-name>encode1</param-name>
<param-value>gbk</param-value>
   </init-param>
   </servlet>

(2)servletConfig的api
* 得到ServletConfig对象:ServletConfig config =  servlet.getServletConfig()  
* 获取配置参数:
 =String getInitParameter(String name) 
 =Enumeration er =  getInitParameterNames()  
 = String getServletName() ;获取servlet的名称
 代码:
//1.获取servlet的初始化参数
ServletConfig config = this.getServletConfig();
//2.根据初始化参数的名称获取值
String value = config.getInitParameter("encode1");
System.out.println(value);
String servletName = config.getServletName();
System.out.println("servlet的名称"+servletName);

ServletContext:


(1)servletContext:它是整个web项目的配置对象,是全局配置对象,获取全局的配置参数
<!-- 配置全局的初始化参数 -->
<context-param>
<param-name>username</param-name>
<param-value>zs</param-value>

</context-param>


(2)servletContext的api

* 得到servletContext对象
方式1:servletConfig.getServletContext();
方式2:servlet.getServletContext();
作用1:
* 获取全局的初始化参数
=String getInitParameter(String name)  
=Enumeration getInitParameterNames() 
作用2:
* 获取web项目路径
String path = getContextPath();
作用3:
理解:获取文件的扩展名
String type =getMimeType(String file) 
作用4:
获取的是真实路径,其实就是绝对路径

String getRealPath(String path)  


(3)serlvetContext域对象,域对象的方法
        *什么域对象:在一定的范围内,可以存值和取值,servletContext它的作用范围是整个web项目
==存值:void setAttribute(String ,Object);
==取值:Object obj = getAttribute(String);
    测试: 在servlet1里面存值, 在servlet2获取servlet1里面的存值
    结论:1.整个web项目对应一个servletContext对象,对象在服务器启动就创建了servletContext对象

     2.servletContext它的作用范围是整个web项目


(4)获取web项目的字节输入流
(0)工作空间的项目目录结构和把项目部署到tomcat服务器的目录结构:
    工作空间的项目目录: 都存在
    tomcat服务器的目录: src目录没有,src目录下面的java和配置文件,都部署到/WEB-INF/classes目录

(1) 传统方式获取文件的字节输入流
(2) ServletContext的getResourceAsStream(),获取文件的字节输入流
* 文件的相对位置:相对tomcat的bin目录(jdk虚拟机)
web项目里面获取文件的字节输入流:InputStream getResourceAsStream(String path)  
* 文件放在src下面:文件部署到服务器,部署到/WEB-INF/classes目录
 文件路径: /WEB-INF/classes/文件的名称
* 文件放在WebContent下面,部署到服务器,部署项目名称下面
 文件路径: /文件名称
* 文件放在WEB-INF下面,部署到服务器,部署到/WEB-INF下面
 文件路径:/WEB-INF/文件名称
* 文件存放的位置和WebContent同级,因为就部署不到服务器上面,所以无法获取文件的字节输入流

  (3)ServletContext的getRealPath ()获取文件的真实路径,获取字节输入流
      :getRealPath(),路径参照上面getResourceAsStream()方法的路径写法。
(5)ClassLoader
* 类加载器:加载类的一个类,称之为类加载器。
类加载的默认路径:class目录下面。
* 获取文件的字节输入流,如果文件在src下面,部署到服务器,在服务器classes下面
文件路径: 文件名称
代码
Class clazz = this.getClass();
ClassLoader loader = clazz.getClassLoader();
//2.获取src下面db.properties文件的字节输入流,文件路径?
InputStream in = loader.getResourceAsStream("db.properties");




























































































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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值