在使用servlet之前我们需要先创建一个javaee的web项目,一个web项目通常包含下面一些文件:
src
web
WEB-INF
lib
classes
index.jsp
- src:存放java源代码
- web:存放静态资源和动态资源
- WEB-INF:该目录下的所有文件无法从浏览器中直接访问
- lib:存放相关的jar包
- classes:存放编译后的class文件
- index.jsp:web项目中默认访问的首页
application context(项目上下文),通过配置项目上下文可以在tomcat部署多个项目。
什么是servlet
servlet是一门用于开发动态web资源的技术,可以运行在Web服务器中的小型Java程序,有时也叫做服务器端的小应用程序,servlet是server applet两个单词的组合而成。servlet 可以通过 HTTP协议接收和响应来自 Web 客户端的请求。
servlet的语法跟JavaSE是一样的并且能够使用JavaSE中的API,要想创建一个servlet并使用的话可以分为以下几个步骤:
- 创建一个javaee的web项目
- 编写一个Java类,实现javax.servlet.Servlet接口,并重写该接口中的抽象方法
- 在web.xml文件中配置该servlet(如果使用注解方式的话,无需配置web.xml)
- 将该web项目部署到tomcat中并启动
web访问流程图:
如上图所示,服务器端程序其实就是实现了servlet接口的程序,servlet的主要作用其实就是处理和响应客户端的请求。
编写第一个servlet
创建一个web项目可以在创建项目时关联tomcat,这样eclipse会把相关的servlet-api.jar包拷贝到项目中,在项目创建一个Java类实现servlet接口并重写里面的方法。
记住导入tomcat中的 servlet-api.jar...你懒的话你就创建项目是关联tomcat即可自动导入包(Eclipse)
在Eclipse中选择2.5版本的动态网页项目 在WEB - INF 下才会自动生成web.xml文件. 这点要注意一下啊!
完成上面步骤 我们重写了他相关方法之后:
我们在service方法中写一行打印语句:
package servlent;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class servlent_main implements Servlet {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("你好!我的第一个servlet程序!");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
然后我们在WEB - INF 下 的 web.xml文件中添加代码(注意注释即可!!!)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>s1</display-name> <!-- 这个名字要和项目名一致! -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 创建一个servlet实例 -->
<servlet>
<!-- 这个名字可以随便去取 -->
<servlet-name>s1</servlet-name>
<!-- servlet的包名+类名-->
<servlet-class>s1.s1</servlet-class>
</servlet>
<!-- 给servlet一个可以访问的URI地址 -->
<servlet-mapping>
<!-- servlet的名字,与 servlet中的servlet-name一致-->
<servlet-name>s1</servlet-name>
<!-- URI地址:http://locahost:8080/s1/123 -->
<url-pattern>/123</url-pattern>
</servlet-mapping>
</web-app>
这里面用到了映射 就是说 :
允许tomcat服务器 => 输入网址 => 找到 <servlet-mapping> 里面的 <servlet-name> s1 映射到 <servlet> 中 然后找到对应的s1 然后允许对应包下的 s1.s1.java文件.
所以呢:包名千万别输错误!
具体流程最后的图和解析认真看看即可
即:
之后将该web项目部署到tomcat中,启动成功后访问:http://localhost:8080/s1/123
可以看到eclipse控制台中打印出了Hello Servlet
通过上面示例可以看出,servlet的需要部署在tomcat中才能运行,有时tomcat也被称为是servlet的容器。
我们看servlet的源码啊 他的源码包在tomcat的官网下载 具体: https://archive.apache.org/dist/tomcat/ 下载对应的版本好后
依次打开java - javax - servlet 就是啊
但你直接把源码包导入到Eclipse那个源码器中 他会自动解析
servlet执行流程
servlet执行流程序列图:
- 客户端向tomcat发送请求,http://localhost:8080/07-01-servlet/hello
- tomcat根据请求的URL找到名称为07-01-servlet的应用
- tomcat根据请求的URI"/hello"找到web.xml文件中url-pattern与之对应的标签
- tomcat根据url-pattern标签中的servlet-name定位到com.monkey1024.servlet.FirstServlet类。
- tomcat实例化FirstServlet类
- 调用FirstServlet类中的init方法
- 调用FirstServlet类中的service方法
- FirstServlet将数据响应给客户端
- 调用distroy方法销毁FirstServlet
作者:咸瑜