javaweb-Servlet

* Servlet:server applet  运行在服务器端的小程序
* 概念:
* 定义了一个类被浏览器访问的规则。是一个接口。
* 功能:
* 接受请求
* 处理请求
* 作出响应
* 快速入门:
0.创建web项目
1.定义一个Java类,实现Servlet接口
2.重写所有未实现方法
3.配置Servlet,在web.xml
  <!-- 配置Servlet,为了配置Servlet的访问路径 -->
  <servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>cn.itcast.servlet.ServletDemo1</servlet-class>
  </servlet>
  
  <servlet-mapping>
<servlet-name>demo1</servlet-name>
<!-- 设置访问路径,以/开头  -->
<url-pattern>/demo</url-pattern>
  </servlet-mapping>
4.发布项目
5.访问/demo路径访问该Servlet
浏览器中:http://127.0.0.1:8080/项目名/web.xml中配置的虚拟路径名

* 原理:
* 服务器通过反射的方式 创建Servlet对象,调用其方法


* servlet生命周期:
* 被创建:默认情况下,Servlet第一次被访问时,被创建,调用init()方法。
  只执行一次。Servlet是单例的。可能会存在线程安全问题,尽量不要定义成员变量。
  可以配置Servlet的创建时机。在web.xml的<servlet>标签中配置<load-on-startup>
<!-- 修改servlet的创建时机:
* 负整数:默认值 -1,在第一次被访问时创建
* 非负整数:在服务器启动时创建
* 数字越小,优先级越高
-->
<load-on-startup>0</load-on-startup>

* 提供服务:每一次被访问时,会调用service()方法提供服务

* 被销毁:服务器关闭时,servlet被销毁。
  服务器正常关闭是,在销毁Servlet之前,会调用destory()方法



* ServletConfig对象:配置对象   ServletConfig是一个接口 在Servlet初始化的时候 有服务器创建其子类对象传递给 init()方法
* 功能
1.获取servlet初始化参数
*  String getInitParameter(String name)  
*  Enumeration getInitParameterNames()  
例子:
System.out.println(config.getInitParameter("src"));
System.out.println(config.getInitParameter("href"));
Enumeration<String> names = config.getInitParameterNames();
while (names.hasMoreElements()) {
String key = names.nextElement();
System.out.println(key);
System.out.println(config.getInitParameter(key));


}


初始化参数可在 web.xml中配置
<servlet>
    <servlet-name>demo3</servlet-name>
    <servlet-class>com.click369.servlet.ServletDemo3</servlet-class>
<!--配置一些初始话参数-->
    <init-param>
      <param-name>src</param-name>
      <param-value>c://a.txt</param-value>
    </init-param>
    <init-param>
      <param-name>href</param-name>
      <param-value>d://a.txt</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>demo3</servlet-name>
    <url-pattern>/demo3</url-pattern>
  </servlet-mapping>
2.获取ServletContext对象   因为 ServletContext对象是由服务器创建出来的 我们要获取其对象 得通过ServletConfig对象中的方法才能获取出来
* ServletContext getServletContext()  
3.获取servlet配置的名称 就是在web.xml中给servlet起的名字
* String getServletName()  
* Servlet中对应getServletConfig方法。要想使用该方法获取config对象。
则需要提升config对象的作用域。
1.声明成员变量ServletConfig 
2.在init方法中赋值
3.在getServletConfig方法中获取


* 创建方式:
1. 实现Servlet
2. 继承GenericServlet
1.适配器
2.对ServletConfig进行优化。提升config对象的作用域
3.实现了ServletConfig接口,简化对config对象的使用方式
3. 继承HttpServlet:对http协议的封装
* 重写doGet()和doPost()...方法      注意去掉super.doGet(); 和 super.doPost();


* 自动创建Servlet
* 修改模板:
1 D:\MyEclipse\Common\plugins
2 搜索wizards
3.找到.jar 修改templemnts/Servlet.java





* ServletContext:代表了整个web应用
* 特点:
* 由服务器创建
* 单例


* 功能:
* 域对象:在域的范围内共享数据
* 范围:整个web应用
* 存储所有用户共享的数据
* setAttribute():
* getAttribute():
* removeAttribute():


* JavaWeb中四大域对象:
* ServletContext:代表整个web应用
* HttpSession:会话域
* ServletRequest:请求域
* PageContext:页面域


* 获取文件mime类型:
* getMimeType(文件名称):
* 获取文件运行的真实路径:
* 真实路径:指服务器路径
* getRealPath():
* 1.webRoot下:项目根目录下
* 2.WEB-INF下: 项目根目录下/WEB-INF
* 3.src下: 项目根目录下/WEB-INF/classes
 
* *注意:如果getRealPath("/"),获取的路径是项目的根目录


//根目录
ServletContext context = this.getServletContext();
String rootpath = context.getRealPath("/");
//System.out.println(rootpath);
//1.webRoot
String b = context.getRealPath("/b.txt");
System.out.println(b);
//2.WEB-INF
String c = context.getRealPath("/WEB-INF/c.txt");
System.out.println(c);
//3.src
String a = context.getRealPath("/WEB-INF/classes/a.txt");
System.out.println(a);


* ServletContext只能用于web环境。如果是非web环境,则使用ClassLoader来获取真实路径


比如我web项目里有一个普通的java工具类 我想获取文件的真实路径 那我就用不了 ServletContext
//1.获取该类对应的类加载器对象
ClassLoader loader = this.getClass().getClassLoader();
//2.获取文件运行的真实路径
URL url = loader.getResource("a.txt");
String path = url.getPath();
//注意类加载器来获取路径也有局限性 只能获取src目录下的文件



































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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值