1.端口被占用:BindeException
方式一:
找到占用的端口号,并且找到对应的进程,关闭该进程
* cmd -> netstat -ano
找到对应的PID,启动任务管理系统,找对应的PDID
方式二:修改自身的端口号
* conf -> server.xml
修改配置文件信息 -> <connector> 修改端口号
2.将项目部署到Tomcat服务器中的方式:
1)方式一:
直接将项目放到webapps目录下.
*优化 -> 将项目打包成 war文件
将war文件直接放在webapps目录下,该文件会自动解压
2)方式二: 配置conf -> server.xml文件
<Host>标签中设置
<Host>
<Context docbase="本地项目真实路径" path ="虚拟目录"/>
</Host>
3)方式三:
conf->Catalina -> localhost -> 在localhost下创建任意名称的xml文件.
在xml文件中编写:
<Context docbase="本地项目真实路径"/>
虚拟目录: xml文件的名称
3.web应用的目录结构 (完整结构)
|-应用的根目录
|-web静态资源
包含:html/css/js/图片…
|-WEB-INF - [受保护的,不可见,客户端不能直接访问的]
|-web.xml :web应用的核心配置文件
[针对的是:当前的web应用]
|-lib: 放jar包
[mysql,c3p0]
|-classes:放置字节码文件的目录
类路径 - src源码编译过来
|-MATE-INF - 元信息
4.web工程的目录结构
|-src: java源代码
|-web: web应用的根目录
|-WEB-INF
|-web.xml: web应用的核心配置文件
|-lib: 放置依赖的jar包
|- index.jsp (静态资源)
让web服务器访问到我们写的文件 -> javaEE规范
Servlet: server applet
1.概念:运行在服务器端的小程序
- servlet就是一个接口,定义了java类被浏览器访问到(tomcat所识别)的规则.
- 自定义一个类,实现Servlet接口,重写方法.
2.使用Servlet的步骤:
1).创建javaee项目
2).定义一个类,实现Servlet接口
3).实现接口中的抽象方法
4).配置Servlet
在web.xml中配置:
<servlet>
<!--给Servlet起的名字:随意-->
<servlet-name>ServletDemo01</servlet-name>
<!--servlet的类对应的完整类名-->
<servlet-class>web.b_servlet.ServletDemo01</servlet-class>
</servlet>
<servlet-mapping>
<!--名字必须和servlet-name的一致-->
<servlet-name>ServletDemo01</servlet-name>
<!--访问的资源路径:随意-->
<url-pattern>/demo01</url-pattern>
</servlet-mapping>
3.Servlet的执行过程:
1).当服务器接收到浏览器的请求后,会进行解析URL路径,获取到访问的Servlet的资源路径
2).查找web.xml文件,是否有对应的的标签体内容
3).如果有,则找到对应的全类名
4).tomcat会将字节码文件加载到内存中,并且创建对应的对象
5).调用该对象的service()
package Servlet_demo;
import javax.servlet.*;
import java.io.IOException;
public class servlet_day02 implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init已经执行......默认为servlet创建时,可修改为服务器创建时");
}
/*在这里进行验证密码等操作*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("访问成功!");
}
@Override
public void destroy() {
System.out.println("正常关闭服务器!");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public ServletConfig getServletConfig() {
return null;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<!--给Servlet的名字-->
<servlet-name>ServletDemo01</servlet-name>
<!--servlet类对应的完整路径-->
<servlet-class>Servlet_demo.servlet_day02</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<!--名字和上面一样-->
<servlet-name>ServletDemo01</servlet-name>
<!--访问路径,可以随便选-->
<url-pattern>/Demo01</url-pattern>
</servlet-mapping>
</web-app>
4.Servlet的实现原理:
5.Servlet的生命周期:
1)被创建: 执行init(),只执行一次
Servlet什么时候会被创建?
* 默认情况: 第一次访问时,Servlet被创建
* 可以在配置web.xml文件中设置
* 中设置
* 第一次被访问时创建
的值为负数
* 在服务器启动时创建
的值为0或者正整数
2)提供服务:执行service(),执行多次
说明servlet在内存中只有一个对象,servlet是单例
3)被销毁: 执行distroy(),只执行一次
* 服务器被关闭时,servlet被销毁
* 只有服务器在正常关闭时,才会执行distroy()
6.HttpServlet模板
Servlet的体系结构:
Servlet – 接口
|- GenericServlet – 抽象类
|- HttpServlet – 抽象类
* 实现service(),将请求和响应转换后 -> this.service() ->做相应的请求方式判断,从而决定调用的是doPost()/doGet()
- GenericServlet:将servlet接口中其他方法都做了默认空实现,只将service()作为抽象方法使用
GenericServlet:
public class b_servlet extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
}
HttpServlet:
package Servlet_demo;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/http003")
public class c_HttpServletDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
//super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost执行了......");
resp.getWriter().write("doPost执行了......");
//super.doPost(req, resp);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<!--给Servlet的名字-->
<servlet-name>ServletHttpDemo01</servlet-name>
<!--servlet类对应的完整路径-->
<servlet-class>Servlet_demo.c_HttpServletDemo</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<!--名字和上面一样-->
<servlet-name>ServletHttpDemo01</servlet-name>
<!--访问路径,可以随便选-->
<url-pattern>/http01</url-pattern>
</servlet-mapping>
</web-app>