apache-tomcat-9.0.0.M26(Tomcat文件夹下):
bin:可执行文件(打开/关闭服务器的文件)
conf:服务器的配置信息
logs:服务器日志
temp:产生的临时文件
work:服务器自己的工作空间
lib:服务器使用的jar包
webapps:默认的存放工程(应用程序)文件夹
wtpwebapps:跟Eclipse关联后产生的存放工程的文件夹
从控制台启动Tomcat服务器 命令:
1.先去往Tomcat服务器下面的bin文件夹
2.获取文件夹权限(读写) sudo chmod 755 *.sh
3.执行打开服务器 sudo sh ./startup.sh
4.执行关闭服务器 sudo sh ./shutdown.sh
访问服务器网址(url):http://localhost:8080
协议://本地地址:端口号/项目名(应用程序名)/访问的资源
http://localhost:8080/sh-web-servlet01/1.html
servlet叫小服务程序是个java类、接口
注意:在浏览器上访问的每一个网页都是一个servlet,每个servlet都需要配置一个网址(在web.xml中配置)
1.用户用网址访问服务器(Tomcat)
2.服务器通过网址可以找到对应项目的web.xml文件
3.通过网址找到对应的servletname
4.通过servletname找到对应的servlet类
5.创建servlet对象
6.执行生命周期的几个方法
实例化 --> 初始化 --> service服务 --> destroy销毁
创建方式一
public class Demo01 implements Servlet{
// 实例化方法(无参构造方法)
public Demo01() {
System.out.println("我是实例化方法");
}
@Override
public void init(ServletConfig arg0) throws ServletException {
System.out.println("我是初始化方法init");
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
// servlet只创建了一个 多次访问 实际上就是多次调用服务的方法service
System.out.println("我是服务方法service");
}
@Override
public void destroy() {
// 1.删除该应用程序调用
// 2.停止服务器
System.out.println("我是销毁方法destroy");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
}
创建方式二(适配器模式创建)
使用哪个方法就重写哪个方法,用不上的方法可以不重写
public class Demo02 extends GenericServlet{
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("我是service");
}
}
创建方式三(模板设计模式 常用方式) 以及 获取ServletConfig方式一
public class Demo03 extends HttpServlet{
// 声明一个ServletConfig对象 当做成员变量
private ServletConfig config;
// 初始化方法(通过该方法的参数,获取ServletConfig对象)
// ServletConfig对象保存的是servlet中的配置信息
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
// 接收一下ServletConfig
this.config = config;
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*
* 调用父类的doGet方法 怎么都会报错
* 不是400 就是405
* 重写完doGet方法 注意不要调用父类的doGet方法
* super.doGet(req, resp);
*/
/*
* 获取ServletConfig方式一
* 参数是 配置时的name(相当于key)
* 用key获取对应的value
*/
String value = this.config.getInitParameter("encoding");
System.out.println(value);
}
// 接收post请求
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
获取ServletConfig方式二
public class Demo04 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 通过父类中的方法 获取ServletConfig对象
String parameter = this.getServletConfig().getInitParameter("encoding");
System.out.println(parameter);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>sh-web-servlet01display-name>
<welcome-file-list>
<welcome-file>1.htmlwelcome-file>
<welcome-file>index.htmwelcome-file>
<welcome-file>index.jspwelcome-file>
<welcome-file>default.htmlwelcome-file>
<welcome-file>default.htmwelcome-file>
<welcome-file>default.jspwelcome-file>
welcome-file-list>
<servlet>
<servlet-name>demo01servlet-name>
<servlet-class>com.lanou3g.Demo01servlet-class>
servlet>
<servlet-mapping>
<servlet-name>demo01servlet-name>
<url-pattern>/demo01url-pattern>
servlet-mapping>
<servlet>
<servlet-name>demo02servlet-name>
<servlet-class>com.lanou3g.Demo02servlet-class>
servlet>
<servlet-mapping>
<servlet-name>demo02servlet-name>
<url-pattern>/demo02url-pattern>
servlet-mapping>
<servlet>
<servlet-name>demo03servlet-name>
<servlet-class>com.lanou3g.Demo03servlet-class>
<init-param>
<param-name>encodingparam-name>
<param-value>UTF-8param-value>
init-param>
servlet>
<servlet-mapping>
<servlet-name>demo03servlet-name>
<url-pattern>/demo03url-pattern>
servlet-mapping>
<servlet>
<servlet-name>demo04servlet-name>
<servlet-class>com.lanou3g.Demo04servlet-class>
<init-param>
<param-name>encodingparam-name>
<param-value>UTF-8param-value>
init-param>
servlet>
<servlet-mapping>
<servlet-name>demo04servlet-name>
<url-pattern>/demo04url-pattern>
servlet-mapping>
web-app>
域对象(在一定范围内 存储信息的对象)
ServletContext 范围是整个程序中都可以访问到并且只有一个(单例对象)
每个servlet都可以访问到这个域对象
如何获取ServletContext对象?
1.从ServletConfig对象中获取
2.从父类中直接获取
注意:所有的域对象 都有设置/获取/删除的方法
从ServletConfig对象中获取
public class Demo05 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 从ServletConfig对象中获取
ServletContext application = this.getServletConfig().getServletContext();
// 添加一个数据到Context域中 相当于添加一个键值对 key和value
application.setAttribute("username", "SC");
}
}
从父类中直接获取
public class Demo06 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Object object = this.getServletContext().getAttribute("username");
System.out.println(object);
}
}
web.xml配置文件
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>sh-web-servlet01display-name>
<welcome-file-list>
<welcome-file>1.htmlwelcome-file>
<welcome-file>index.htmwelcome-file>
<welcome-file>index.jspwelcome-file>
<welcome-file>default.htmlwelcome-file>
<welcome-file>default.htmwelcome-file>
<welcome-file>default.jspwelcome-file>
welcome-file-list>
<servlet>
<servlet-name>demo05servlet-name>
<servlet-class>com.lanou3g.Demo05servlet-class>
servlet>
<servlet-mapping>
<servlet-name>demo05servlet-name>
<url-pattern>/demo05url-pattern>
servlet-mapping>
<servlet>
<servlet-name>demo06servlet-name>
<servlet-class>com.lanou3g.Demo06servlet-class>
servlet>
<servlet-mapping>
<servlet-name>demo06servlet-name>
<url-pattern>/demo06url-pattern>
servlet-mapping>
web-app>