
Tomcat服务器是一个免费的开放源代码的Web应用服务器。
1.1 WebWEB,在英语中web即表示网页的意思,它用于表示Internet主机(服务器)上供外界访问的资源
Web资源分类
web通信
基于http协议的请求响应机制,请求一次响应一次,先有请求后有响应。
1.2 HTTP协议HTTP是HyperText Transfer Protocol(超文本传输协议)的简写,传输HTML文件。
HTTP作用:用于定义WEB浏览器与WEB服务器之间交换数据的过程和数据本身的内容
交互过程: 浏览器请求, 服务请求响应
请求:请求行,请求头,请求体
请求行
- 请求方式
- 请求路径
请求头:它是由键值对构成
请求体:只有post请求才有请求体,用于携带请求参数的
响应:响应行,响应头,响应体
响应行:包含响应状态码
- 常见的响应状态码:
- 200 OK
- 302 Redirect 重定向
- 304 Cache 读取缓存
- 400 BAD REQUEST 请求有问题(可能是请求参数等等不符合规定)
- 403 Forbidden 拒绝处理
- 404 NOT FOUND 找不到资源
- 500 SERVER ERROR 服务器异常
响应头: 由多个键值对构成,服务器指示浏览器的操作
- Location: http://www.it315.org/index.jsp指示新的资源的位置,通常和状态,码302一起使用,完成请求重定向
- Content-Type: text/html; charset=UTF-8; 设置服务器发送字符的编码类型
- Refresh: 5;url=http://www.baidu.com 指示客户端刷新频率。
- Content-Disposition: attachment; filename=a.jpg 指示客户端(浏览器)下载文件
响应体:
可以用于客户端页面的展示
可以用于下载
情况一: 已经关联成功的情况(因为我创建项目的时候, 已经选择了tomcat)
情况二: 如果之前没有选择tomcat, 现在就需要自己关联发布
Servlet 运行在服务端(tomcat)的Java小程序(对象),是sun公司提供一套规范,就是动态资源
Servlet与普通Java程序的区别
必须实现servlet接口
必须在servlet容器(服务器 tomcat)中运行
servlet程序可以接收用户请求参数以及向浏览器输出数据
实现Servlet接口
public class ServletDemo02 implements Servlet{
@Override
public void init(ServletConfig config) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("ServletDemo02执行了...");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
继承GenericServlet 类
GenericServlet 已经实现好了一些servlet接口所需的方法,只需要重写service方法即可
public class GenericDemoServlet extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("GenericDemoServlet执行.......");
}
}
继承HttpServlet类
HttpServlet继承GenericServlet适配HTTP协议下的开发。,根据Http不同的请求,只需重写doGet、doPost等方法中一个即可
public class ServletDemo02 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("编写很多代码处理这次post请求");
}
}
IDEA中可以直接创建继承HttpServlet的类,直接在IDEA里面new Servlet
2.2 映射路径路径配置的方式
配置文件配置:web/WEB-INF/web.xml文件
ServletDemo01 com.itheima.web.ServletDemo01 ServletDemo01 /demo01
注解方式配置
@WebServlet("/demo02") //添加注解配置映射路径
public class ServletDemo02 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
路径配置的范围
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 获取客户端提交的请求参数: 客户端携带过来的请求数据都在request对象中
String username = request.getParameter("username");
String password = request.getParameter("password");
//2. 校验客户端提交的用户名和密码是否正确
if ("jay".equals(username) && "123456".equals(password)) {
//登录成功
//将校验结果响应给客户端
response.getWriter().write("login success!!!");
}else {
//登录失败
response.getWriter().write("login failed!!!");
}
}
}
2.2 统计访问次数
@WebServlet("/count")
public class CountServlet extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
//往ServletContext中存储一个计数器,数值为0
getServletContext().setAttribute("count",0);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//每次有用户访问我们的CountServlet,我们就将ServletContext中存储的访问次数+1
//1. 取出count的值
Integer count = (Integer) getServletContext().getAttribute("count");
//数值++
count++;
//将count存入到ServletContext
getServletContext().setAttribute("count",count);
}
}
@WebServlet("/show")
public class ShowServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//目标:展示用户的访问次数
//1. 从ServletContext中取出count
Integer count = (Integer) getServletContext().getAttribute("count");
//2. 使用response将数据展示到页面上
response.getWriter().print(count);
}
}