访问官方网站。
下载 Tomcat 7 版本。
解压到任意路径(如C盘根目录)。
进入 bin 目录,运行 startup.bat。
然后在浏览器中访问 localhost:8080,访问成功则说明成功了。
修改 conf 目录下的 logging.properties 文件即可。
Tomcat运行需要依赖Java环境,因此要配置 JAVA_HOME 环境变量。
默认情况下,Tomcat端口号是8080。
修改端口号,只需要修改 conf 目录下的 server.xml 即可。
假如有一个项目 Website,其结构如下:
直接将项目复制到 webapps 文件夹。
例如,创建项目目录 aaa,在其中添加 index.html 文件,然后将整个目录复制到 webapps 文件夹下,启动 Tomcat 服务器。
在浏览器中访问的地址是:http://localhost:8080/hello-world/
在 conf 目录下的 server.xml 配置 Tomcat 的虚拟路径。
Q:什么是虚拟路径?
A:配置一个虚拟路径,与一个真实的路径绑定,然后访问这个虚拟路径就能找到真实路径。
例如,在C盘根目录创建项目文件夹 hello-world(同方式一)。
修改 conf 目录下的 server.xml 文件。
启动服务器,在浏览器中访问的地址是:
在 /conf/Catalina/localhost 下配置 Tomcat 的虚拟路径。
第二种方式官方并不推荐,因为需要修改 server.xml 核心配置文件,牵一发而动全身。下面演示第三种方式:
在 \conf\Catalina\localhost 目录下创建 haohao.xml 文件(xml的文件名即表示虚拟路径)。
启动 Tomcat 服务器,在浏览器中访问的地址为:
以下示例演示了如何制作一个钓鱼的“百度”页面。
在 C:\baidu\website 目录下创建 index.html 文件:
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>百度title>
head>
<body>
<h1>百度h1>
<p>假装我是一个百度qvqp>
body>
html>
修改 server.xml,创建虚拟主机。这里 baidu 是虚拟主机的目录,website 是项目名称。
hosts 文件路径:C:\Windows\System32\drivers\etc\hosts
在 hosts 文件末尾添加一行:
127.0.0.1 www.gengdu.com
启动服务器,然后在浏览器中进行测试:
http://www.gengdu.com:8080/
Servlet 是一个运行在 web 服务器上的小 Java 程序,用于处理 web 客户端发送的请求,并且做出响应,使用的是 HTTP 协议。
Servlet 是一个接口。
<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-name>HelloServletservlet-name>
<servlet-class>xyz.genghao.servlet.demo1.HelloServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>HelloServletservlet-name>
<url-pattern>/hellourl-pattern>
servlet-mapping>
web-app>
按正常启动 Java 项目的方法运行即可,此时 Tomcat 服务器启动,在浏览器中输入网址即可查看到页面。
第1、2步是在第一次访问的时候实例化Servlet类时会调用;
第3步每次访问都会调用;
第4步在Web工程停止的时候调用。
Servlet 对象是第一次被访问时被创建,init 方法就会执行。假设在 init 方法中做了比较耗时的操作,第一个用户等待的时间会较长。解决方案——启动时加载,即在服务器启动时创建 Servlet 对象。
创建 Servlet 类:
package xyz.genghao.servlet.demo1;
import javax.servlet.*;
import java.io.IOException;
public class ServletDemo implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("Servlet对象被初始化了!");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
修改 web.xml:
注意,这里的优先级不能高于 1 , 1 是 Tomcat 中默认的 Servlet 的优先级。可以在 conf 目录下的 web.xml 中进行查看:
配置 web.xml 中的 url-pattern 标签。有三种配置方式。
以“/”开始,比如 /aaa/servlet-demo 。
以“/”开始,以“/*”结束。比如 /aaa/bbb/* 。
例如,设置 url-pattern 为 /hello/* ,那么如下 URL 都可以匹配上:
http://localhost:8080/hello
http://localhost:8080/hello/
http://localhost:8080/hello/a/b/c/d/
不能以“/”开始,以“*”开始。比如 *.action *.jsp 。
完全路径匹配 > 目录匹配 > 扩展名匹配
ServletConfig 用来获得 Servlet 的相关配置的对象。
不是很重要,略。
ServletContext,即 Servlet 的上下文对象。这个对象一个 Web 项目只有一个,在服务器启动时为每个 Web 项目创建一个单独的 ServletContext 对象。
特点:
域对象:可以像Map一样存取数据的对象,这里的域指的是存取数据的操作范围。
三个方法:setAttribute()、getAttribute()、removeAttribute()
四个作用:
在 WEB-INF 目录中创建 info.properties 文件:
创建 Servlet 类:
注意,getServletContext().getResourceAsStream()方法是以 web 目录为根目录的。
package xyz.genghao.servlet.demo1;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Properties;
public class HelloServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
InputStream is = getServletContext().getResourceAsStream("/WEB-INF/info.properties");
Properties properties = new Properties();
properties.load(is);
String username = properties.getProperty("username");
String password = properties.getProperty("password");
PrintWriter responseWriter = response.getWriter();
responseWriter.println("Username: " + username);
responseWriter.println("Password: " + password);
}
}
通过 this.getServletContext() 方法获得对象,它有三个域对象的方法。
三个方法:
ServletContext 对象的作用范围:
从服务器启动,直到服务器关闭,ServletContext 对象才被销毁,其中的数据才会失效。
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置浏览器解析时采用的字符集
response.setHeader("Content-Type", "text/html;charset=UTF-8");
// 设置字符串转字节数组的编码
byte[] data = "我是中文".getBytes("UTF-8");
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(data);
}
}
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置浏览器解析时采用的字符集
response.setHeader("Content-Type", "text/html;charset=UTF-8");
// 设置response获得的字符流缓冲区的编码
response.setCharacterEncoding("UTF-8");
response.getWriter().println("我是中文");
}
}