Tomcat&Servlet基本使用
Tomcat
介绍
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
下载安装和卸载
官网下载:http://tomcat.apache.org/
安装:解压压缩包即可
注意:安装目录建议不要有中文和空格
卸载:删除目录就行了
Servlet
首页
在web.xml中设置
<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">
<welcome-file-list>
<welcome-file>duGet.html</welcome-file>
</welcome-file-list>
</web-app>
首页为index.jsp
使用步骤
- 创建项目
- 创建class
- 实现 servlet接口
- 覆写对应的方法
- 注册和映射
- 请求/响应
public class _01_HelloServlet implements Servlet {
@Override
//用于初始化数据,只执行一次
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init--初始化数据");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
//每次请求都会执行
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
// 请求会执行service方法,每次请求都会执行
System.out.println("service--逻辑操作");
// 设置响应类型和编码
servletResponse.setContentType("text/html;charset=utf-8");
// 响应一个a标签
servletResponse.getWriter().write("<a href='http://www.baidu.com'>百度</a>");
}
@Override
public String getServletInfo() {
return null;
}
//销毁资源,最后执行,只执行一次
@Override
public void destroy() {
System.out.println("destroy--销毁");
}
}
Servlet注册和映射
web.xml中配置注册和映射
<?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">
<welcome-file-list>
<welcome-file>duGet.html</welcome-file>
</welcome-file-list>
<!-- servlet注册 说明你有这个类,这个类在,叫啥等 -->
<servlet>
<!-- servlet名字,随便写 -->
<servlet-name>HelloServlet</servlet-name>
<!-- 类全名(带有包名) -->
<servlet-class>com.tledu.zrz.controller._01_HelloServlet</servlet-class>
</servlet>
<!-- servlet和url的映射 -->
<servlet-mapping>
<!-- 名字,需要和servlet注册的name一致,才可找到 -->
<servlet-name>HelloServlet</servlet-name>
<!-- 当请求什么的时候,去执行HelloServlet -->
<!-- / 必须加,表示根目录,也就是WebContent -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
注解:
在类上面加上
@WebServlet("/名")
请求执行java代码
http://localhost:8080/Servlet_01/hello
Localhost 是当前电脑
8080 是tomcat容器,定位到webapps
/项目名/url 找到某个项目中的某个请求对应的java程序并执行
执行流程
声明周期
Servlet生命周期就是从创建Servlet对象开始一直到死亡的一个执行过程
- 先执行构造方法,用于创建Servlet对象
- 执行init()方法做初始化操作
- 执行service()/doGet()/doPost()方法处理真正的逻辑操作和数据交互
- 执行destroy()方法进行资源释放和销毁
默认是第一次请求的时候,创建对象调用init
但是 也可以指定,项目运行就立刻创建对象并初始化
<servlet>
<servlet-name>life</servlet-name>
<servlet-class>com.tledu.zrz.controller._02_ServletLife</servlet-class>
<!-- 设置该servlet的初始化时机,默认是 -1 第一次请求时创建对象初始化(init)
设置为 0 或者正整数 则是在启动tomcat的时候 就创建 对象初始化
-->
<load-on-startup>0</load-on-startup>
</servlet>
HttpServlet
Servlet可以相应任何类型的请求,但是绝大多数的情况下servlet只用来扩展基于HTTP协议的web服务器,所以使用Servlet可以继承HttpServlet。
- 把request和response对象进行了类型转换
- 请求转发到doGet/doPost方法中
获取请求行数据
如:
@WebServlet("/_03_RequestAPI")
public class _03_RequestAPI extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1. 获取请求方式
System.out.println(req.getMethod());
//2. 获取虚拟目录(根目录)
System.out.println(req.getContextPath());
//3. 获取请求路径
System.out.println(req.getServletPath());
//4. 获取get方式请求参数 name=123&pwd=root
System.out.println(req.getQueryString());
//5. 获取URI
System.out.println(req.getRequestURI());
//6. 获取URL
System.out.println(req.getRequestURL());
//7. 获取版本
System.out.println(req.getProtocol());
//8. 获取IP
System.out.println(req.getRemoteHost());
//9. 获取端口
System.out.println(req.getRemotePort());
}
}
获取请求头
@WebServlet("/_04_GetHead")
public class _04_GetHead extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取所有的请求头信息
Enumeration<String> head = req.getHeaderNames();
//遍历
while (head.hasMoreElements()){
String name = head.nextElement();
//根据name获取值
String value = req.getHeader(name);
System.out.println(name+" : "+value);
}
}