天天学,应该把这些根本spring底层概念理解下,更好的了解咱们罕用框架的套路。

1.Servlets是SUN公司指定的一套开发动静网页的技术。个别JavaEE相干的类,都是以javaX结尾

2. Servlet标准外围类图,他们之间的关系如图下:

1. 编写一个Servlet案例利用的根本过程:

a) 建设一个规范的JavaWeb利用目录:

比方:

|--MyWebApp:

|--WEB-INF

|--classes:用来寄存java运行的class文件

|--lib:寄存web利用中须要的jar包

web-xml:配置文件,通常配置servlet类的拜访映射

|--jsp css js等网页文件

b) 进入classes目录,建设一个java扩展名文件,这些java文件统称为Servlet,它们都必须间接或间接实现javax.servlet.Servlet接口。例如以下代码:

package com.lsh.itcast;import java.io.*;import javax.servlet.*;public class ServerletDemo extends GenericServlet{public void service(ServletRequest req,ServletResponse rep)throws ServletException, IOException{System.out.println("执行service办法");OutputStream out=rep.getOutputStream();out.write("hello my servlet".getBytes());out.close();}}

a) 进入classes目录,对咱们编写的类进行编译。

首先是Tomcat的lib目录下的servlet-api.jar,部署到以后的classpath环境变量中。在dos命令行的长期配置法是:

set classpath=%classpath%;C:apache-tomcat-6.0.35libservlet-api.jar

而后在dos命令行应用cd命令进入到classes目录下,编译Servlet类

编译命令:javac -d . 类名.java

b) 批改web利用中WEB-INF目录下的web.xml,对servlet类进行url地址映射,配置如下:

<?xml version="1.0" encoding="ISO-8859-1"?><web-app xmlns="http://java.sun.com/xml/ns/javaee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"    version="2.5">  <servlet><servlet-name>ServerletDemo</servlet-name><servlet-class>com.lsh.itcast.ServerletDemo</servlet-class>  </servlet><servlet-mapping><servlet-name>ServerletDemo</servlet-name><url-pattern>/test</url-pattern></servlet-mapping></web-app>

a) 把已建设好的web利用配属到Tomcat中,并启动服务器

b) 拜访地址是:http://localhost:8080/MyWebApp/test

看到写的Servlet类的输入后果,示意Servlet操作胜利

1. Servlet的生命周期:在内存中一个Servlet只有一个实例,针对不同的的用户申请,容器采纳多线程的机制来调用Service办法。容器什么时候开始装载Servlet呢?在以下四种状况下,Servlet被启动,容器装载Servlet的时刻。

a) 容器启动时会主动的装载某些须要的Servlet

b) 在容器启动后,客户首次向Servlet发出请求

c) Servlet的类文件被更新后,从新装载Servlet

d) Servlet被装载后,Servlet容器创立一个Servlet实例并调用init()办法进行初始化。在Servlet的整个生命周期中,init办法只会调用一次。

如果在web.xml中加上:<load-on-startup>2</load-on-startup>。作用在于:

某些Servlet在web.xml文件中只有<servlet>元素而没有<servley-mapping>元素,这样咱们就无奈通过url地址的形式拜访这个Servlet了,这种Servlet通常会在<servlet>元素中配置一个<load-on-startup>子元素,让容器在启动的时候主动加载该Servlet,并且调用其init办法实现一些全局性的初始化工作。

Servlet的生命周期的罕用办法:

a) public void init(ServletCOnfig config):对Servlet进行初始化,Servlet类被实例化后就执行,且执行一次。由容器调用。默认状况下,只有第一次方拜访时才执行,且执行一次。

b) public void destroy():在内存中销毁了Servlet对象。

1. Servlet的生命周期:在内存中一个Servlet只有一个实例,针对不同的的用户申请,容器采纳多线程的机制来调用Service办法。容器什么时候开始装载Servlet呢?在以下四种状况下,Servlet被启动,容器装载Servlet的时刻。

a) 容器启动时会主动的装载某些须要的Servlet

b) 在容器启动后,客户首次向Servlet发出请求

c) Servlet的类文件被更新后,从新装载Servlet

d) Servlet被装载后,Servlet容器创立一个Servlet实例并调用init()办法进行初始化。在Servlet的整个生命周期中,init办法只会调用一次。

如果在web.xml中加上:<load-on-startup>2</load-on-startup>。作用在于:

某些Servlet在web.xml文件中只有<servlet>元素而没有<servley-mapping>元素,这样咱们就无奈通过url地址的形式拜访这个Servlet了,这种Servlet通常会在<servlet>元素中配置一个<load-on-startup>子元素,让容器在启动的时候主动加载该Servlet,并且调用其init办法实现一些全局性的初始化工作。

Servlet的生命周期的罕用办法:

a) public void init(ServletCOnfig config):对Servlet进行初始化,Servlet类被实例化后就执行,且执行一次。由容器调用。默认状况下,只有第一次方拜访时才执行,且执行一次。

b) public void destroy():在内存中销毁了Servlet对象。

1. 对于web-xml文件的Servlet的配置:

a) 一个Servlet能够被映射到多个URL地址上,即配置两个URL去映射一个Servlet,这两个URl都能够去拜访这个Servlet。

b) URL地址映射反对通配符。即代表只有这个URL是字母,都能够去拜访映射的Servlet,

i. 以结尾,以扩展名结尾。比方<url-pattern>.do</url-pattern>

ii. 以/前缀结尾,以结尾。比方<url-pattern>/action/</url-pattern>

iii. 如果一个Servlet的映射为一个"/",就称之为默认的Servlet,它负责解决没有映射门路的URL申请的响应。

但当一个web.xml有多个应用通配符时,会遵循肯定的优先级规定。

a) 相对匹配:以"/"结尾(形式二)要比"*"结尾(形式一)优先级高

b) 都以"/"结尾,还是有多个匹配,找最匹配的

c) 以"/"结尾(形式二)要比"*"结尾(形式一)优先级高

2. Servlet的多线程同步问题:Servlet自身是单实例的,这样当有多个用户同时拜访某个Servlet时,会拜访该惟一的Servlet实例中的成员变量,如果对成员变量进行写入操作,那就会导致Servlet的多线程问题,即数据不统一。

解决办法:去除成员变量,应用局部变量.或者是应用同步代码块。

倡议:在Servlet中定义变量时,除非特殊要求,尽量应用局部变量,当如果有须要实例变量时,应做同步解决,且同步代码块尽量突围少的代码。

如果看到这里,阐明你喜爱这篇文章,请 转发、点赞。同时 标星(置顶)本公众号能够第一工夫承受到博文推送。

本文由博客群发一文多发等经营工具平台 OpenWrite 公布