webapps
当项目存放于tomcat目录之外时,我们要对文件进行配置。
元素中添加 path="指定应用的名称" docBase="指定应用的存放位置"
。完成后,浏览器可根据http://localhost:8080/应用的名称 访问
。完成后,浏览器可根据http://localhost:8080/应用的名称 访问<Server>
<Service>
<Connector>Connector>
<Engine>
<Host>
<Context>
Context>
Host>
Engine>
Service>
Server>
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"/>
127.0.0.1 你想要访问的网址
<Host name="你想要访问的网址" appBase="项目位置"
unpackWARs="true" autoDeploy="true">Host>
servlet 是一项用于开发动态web资源的技术。在使用中,我们必须编写一个Java类并实现servlet接口,将开发好的Java类部署到web服务器上。
servlet程序由web服务器调用,在服务器接收到servlet访问请求时
创建servlet:idea先创建一个Java工程,选择右边的Web Application,创建完成后,在web/WEB-INF中创建classes文件夹用于存放class文件,创建lib文件用于存放jar包,在project sructure中的Modules的path中,修改class文件和test文件输出路径为web/WEB-INF/classes,在dependencies中添加web/WEB-INF/lib为jar Directory,Artifacts中修改output directory为tomcat webapps的与工程同名的文件夹。然后在src里选择创建servlet,在web.xml里添加servlet-mapping。然后就可以写servlet了。
URL映射配置(在web.xml中使用
和
完成)
用于注册servlet,包含两个主要子元素
和
设置servlet注册名称和完整类名
用于映射一个已经注册过的servlet的对外访问路径,包含
和
用于指定servlet的注册名称和servlet的对外访问路径<servlet>
<servlet-name>Servlet1servlet-name>
<servlet-class>test2.B_Servletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>Servlet1servlet-name>
<url-pattern>/Xurl-pattern>
servlet-mapping>
http://localhost:8080/servletDemo/X
http://localhost:8080/servletDemo/Y
http://localhost:8080/servletDemo/Z
<servlet>
<servlet-name>Servlet1servlet-name>
<servlet-class>test2.B_Servletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>Servlet1servlet-name>
<url-pattern>/Xurl-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>Servlet1servlet-name>
<url-pattern>/Yurl-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>Servlet1servlet-name>
<url-pattern>/Zurl-pattern>
servlet-mapping>
URL可以使用*通配符映射,可以使用任意URL访问该servlet
<servlet>
<servlet-name>Servlet1servlet-name>
<servlet-class>test2.B_Servletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>Servlet1servlet-name>
<url-pattern>/*url-pattern>
servlet-mapping>
的URL,统一交给缺省Servlet与servlet生命周期相关的方法(前三个)(test1/A_servlet)
servletConfig是什么?(test2/B_servlet)
通过servletConfig获取servlet的初始化参数。web容器在创建servlet实例对象是,会自动将这些初始化参数封装到servletConfig对象中,在调用init方法时,会将servletConfig对象传递给servlet,从而通过servletConfig对象得到初始化参数。
配置servlet初始化参数<servlet>
<servlet-name>Servlet1servlet-name>
<servlet-class>test2.B_Servletservlet-class>
<init-param>
<param-name>nameparam-name>
<param-value>noNameparam-value>
init-param>
<init-param>
<param-name>pwdparam-name>
<param-value>789456param-value>
init-param>
<init-param>
<param-name>encodingparam-name>
<param-value>utf-8param-value>
init-param>
servlet>
String fetServletName() : 获取的是标签内容
ServletContext getServletContext() : 获取servlet上下文
String getInitParameter(String name):获取相应名字的初始化参数值
Enumeration getInitParameterNames():获取所有初始化参数,返回一个迭代器
它是Servlet接口的实现类,我们可以通过继承GenericServlet来编写自己的Servlet。
关于init()方法的覆写
我们应当去覆盖无参的init()方法,因为在GenericServlet中,定义了一个ServletConfig的对象,在类中的许多方法会使用到该对象,在有参的init方法中,对config进行了初始化操作,所以一旦覆盖有参方法,后续可能会出现空指针异常。
void init(ServletConfig config){
this.config = config;
}
它也实现了servletConfig接口,可以调用getInitParameter()、getServletContext()等ServletConfig的方法。
(test4/F_Servlet、login.html)
HttpServlet extends GenderServlet{}
void service(ServletRequest,ServletResponse)–>一个生命周期方法
它会强制转换两个参数为http协议相关的类型
然后调用本类的service(HttpServletRequest,HttpServletResponse)
它会根据request得到当前请求的请求方式,例如:GET或POST
根据请求方式调用doGet()或者doPost()
所以我们要根据需求重写doGet/doPost
关于线程安全
由于一个类型的servlet只有一个实例化对象,造成线程不安全,所以我们
可以在服务器启动时创建Servlet
在web.xml里配置
,启动时由数字小到大依次创建。
它是
的子元素,用于指定Servlet访问路径,即URL,必须以/开头
绑定多个
web.xml文件的继承
所有工程里的web.xml文件都“继承”于tomcat下的conf/web.xml
(test5/G_Servlet、H_Servlet)
服务器为每个应用创建一个唯一的ServletContext对象,可以在web动态资源之间共享数据。在服务器启动时创建,在关闭时销毁。冥迷
获取ServletContext
ServletContext是四大域对象之一。
可以获取应用初始化参数
(web.xml & test5/I_Servlet)
getInitParameter(String) 方法
Servlet也可以获取初始化参数,但两者有所不同,Servlet获取到的是局部参数,只能获取自己的。
ServletContext可获取公共初始化参数,供所有servlet使用
<context-param>
<param-name>context-paramparam-name>
<param-value>context-valueparam-value>
context-param>
获取资源(test5/J_Servlet)
ServletContext.getRealPath() 获得一个带盘符的路径
ServletContext.getResourceAsStream()
ServletContext.getResourcePaths()
(example)
其实就是/WEB-INF/classes和/WEB-INF/lib下的每个jar包
(test5/K_Servlet)