Servlet

Servlet

动态web资源

什么是servlet

实现Servlet接口,重写5个方法

servlet是一个小的java程序,运行再服务器中,接收和响应从客户端(浏览器)发送过来的请求

快速入门

编写一个类,实现Servlet接口,重写5个方法
	编写一个类,集成GenericServlet,重写一个方法	
public class HelloServlet extends GenericServlet{
	public void service(ServletRequest req,	ServletResponse res) throws ServletException,IOException{
		res.getWriter().write("hello servlet...");
	}
}

配置文件,配置Servlet信息(必须会)
<servlet>
	<servlet-name>HelloServlet</servlet-name>
	<servlet-class>cn.itcast.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>HelloServlet</servlet-name>
	<url-pattern>/hello</url-pattern>
</servlet-mapping>

Servlet的声明周期

什么是生命周期:实例被创建,对外提供服务,销毁。
Servlet中有一个方法区初始化Servlet
Servlet被创建后,然后调用init方法
	void init(ServletConfig config) 

从客户端发送的所有的请求是service方法进行处理
	void service(ServletRequest req, ServletResponse res) 

从服务器中移除Servlet服务,调用destroy方法
	 void destroy()  


 * Servlet实例被创建后,调用init方法进行初始化
 * 	什么时候创建?
 * 		不是服务器一启动就创建,第一次访问时才创建
 * 	init方法调用几次
 * 		只调用一次


 * service调用几次呢?
 * 	几个次请求就调用几次

 * Servlet实例什么时候被销毁呢?
 * 	服务器关闭,手动移除
 * 	destory调用几次?
 * 	一次

Servlet的关系

Servlet接口
	|
GenericServlet(重写5个方法)
	|
HttpServlet(继承了GenericServlet实现了Servlet接口)
	|
MyServlet

为什么会有GenericServlet?为什么有HttpServlet?
注意事项:
	以后重写无参的init()方法即可

开发步骤

	编写一个类,继承HttpServlet
	重写doGet()和doPost()方法 
		在doPost()方法中调用doGet()方法
		表单是get方法,调用doGet
		标点是post方法,调用doPost方法
		doGet和doPost互相调用
	在web.xml配置

修改Servlet模板

	先找到MyEclipse安装路径
myeclips\Common\pluginscom.genuitec.eclipse.wizards_9.0.0.XXX.jar

	千万别解压,右键--选择压缩工具打开--templates--Servlet.java
		修改Servlet.java
		关闭myeclipse的条件下,把Servlet.java拖回去

Servlet自动加载

	Servlet默认是第一次访问时候去创建实例。
	init做初始化非常耗费时间

	在<servlet>标签下
		<load-on-startup>3</load-on-startup>
	值是正整数
		如果值越小,优先级越高

配置虚拟路径(访问路径)

<servlet-mapping>
	<url-pattern>/demo5</url-pattern>
</servlet-mapping>

完全路径匹配
	以/开头		/demo5
	访问:http://localhost/day09/demo5
目录匹配
	以/开头		/*
	访问:http://localhost/day09/XXX
扩展名匹配
	不能以/开头	*.do	*.action	*.xxx
	访问:http://localhost/day09/demo5.do

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

WEB开发中路径的问题

相对路径
	一个文件相对于另一个文件的位置
	不能以/开头	写法:	./demo	demo ../demo
	访问1.html		http://localhost:8080/wday09/1.html
	访问demo5		http://localhost:8080/wday09/demo5

	从1.html中去访问	./demo5		demo5

绝对路径(推荐使用)
	以/开头
	简写方式:/day05/demo5

	客户端的绝对路径
		/day09/demo5
	服务端的绝对路径
		/demo5		不能写项目名

ServletConfig对象,和配置文件相关

配置初始化参数
	需要在<servlet></servlet>标签下配置
	如果要是配置在某个servlet的标签下,那么只能在该servlet中获取初始化参数
		<init-param>
	    	<param-name>username</param-name>
	    	<param-value>root</param-value>
	    </init-param>
	    <init-param>
	    	<param-name>password</param-name>
	    	<param-value>123</param-value>
	    </init-param>

String getServletName()  	获取<servlet-name>标签的名称
String getInitParameter(String name) 	获取初始化参数
Enumeration getInitParameterNames() 	获取初始化参数的名称们

ServletContext对象(域对象)

web容器在启动时,他会为每个web应用程序创建一个对应的ServletContext对象,它代表当前web应用
一个web应用对应一个ServletContext对象
一个web应用下有多个Servlet程序
所有的servlet程序都共享同一个ServletContext对象

demo1存入内容	ServletContext	demo2中取出来

作用:
	获取web应用的全局初始化参数
		在web.xml中配置
		 <context-param>
		  	<param-name>encoding</param-name>
		  	<param-value>UTF-8</param-value>
		  </context-param>
		 String getInitParameter(String name) 
		 Enumeration getInitParameterNames() 

	实现数据的共享
		 void setAttribute(String name, Object object)	存入数据
		 void removeAttribute(String name) 		删除数据
		 Object getAttribute(String name) 		获取数据	

	读取资源文件
		 InputStream getResourceAsStream(String path) 	通过文件的地址获取输入流
		 String getRealPath(String path) 		通过文件的地址获取文件的绝对路径

http的协议

请求

响应
	响应头


	location 和302一起来完成重定向
	refresh		页面的定时刷新
	last-modefied和if-modefied-since和304状态码一起来控制缓存

缺省的servlet(了解)

自己编写的servlet,不要配置/
在tomcat/conf/web.xml中的配置
 	<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值