编写一个servlet
前言:关于Servlet
历史发展
https://blog.csdn.net/u010297957/article/details/51498018#commentBox
从CGI –> applet –> servlet(java) –> servlet1.1(jsp借鉴asp) –> servlet1.2(mvc思想) –> … –> Servlet3.1(稳定)
–> SpringMVC(本质也是Servlet)
Servlet规范
两个链接分别是Servlet官方文档和中文翻译版本。
狭义的看,Servlet就是一个interface,一个Java的接口,它有五个方法:
1 | public interface Servlet { |
13乎高赞回答,第一、二个回答醍醐灌顶了,爱了爱了。
功能
接受http请求,动态处理并返回结果给客户端。
Servlet与Tomcat
Tomcat是Servlet运行的容器。Servlet没有main方法,它受控于另一个Java应用,这个应用就成为容器(Container),而Tomcat就是Servlet的容器。而容器怎么处理用户的请求?我们来复现模拟这个过程:
- 客户端发起一个请求。
- 容器监听端口发现客户端的请求,创建
HttpServletRequest
和HttpServletResponse
两个对象 - 容器根据url判断把请求丢给哪个Servlet处理(根据映射规则),为这个请求创建一个线程,并把HttpServletRequest
和
HttpServletResponse`丢给相应Servlet - 线程调用Servlet的service(),service()根据请求调用doGet()或者doPost()方法
- Service()处理完成,通过
HttpServletResponse
把处理结果返回给Tomcat容器,Tomcat继续封装成http响应返回个客户端。
部署一个Servlet
安装Tomcat
本人在阿里云学生机安装Tomcat8,系统是ubuntu16.04,参考资料:
https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-8-on-ubuntu-16-04
编写和编译servlet
- 在
/opt/tomcat
目录下创建一个myapp
目录,接着在myapp
下创建images
(存放图片)、src
(存放java源码)、WEB-INF
,在WEB-INF
下创建classes
(存放字节码文件)和web.xml
,目录树如下:
myapp/
├── images
│ └── test.JPG
├── src
│ └── TestingServlet.java
└── WEB-INF
├── classes
│ └── TestingServlet.class
└── web.xml
写一个helloworld版的servlet,使用vim写java你就会发现ide确实方便了开发。
1 | import javax.servlet.*; |
- 编译此文件,字节码文件输出到WEB-INFO/classes下:
javac -d ../WEB-INF/classes/ TestingServlet.java
配置web.xml
1 | <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" |
当你访问 host:8080/test时,tomcat容器会根据web.xml文件映射,把请求丢给名为Testing的servlet,而Testing会找到/WEB-INFO/classes
下的TestingServlet
字节码文件,处理完成返回客户端。
https://www.tutorialspoint.com/servlets/servlets-first-example.htm
http://www.informit.com/articles/article.aspx?p=26920&seqNum=4