一、Tomcat配置

1.1 Tomcat下载

官网:https://tomcat.apache.org/

image.pngimage.png

1.2 Tomcat文件作用

image.png
image.png
image.png

1.3 Tomcat配置

1.3.1 导入Tomcat

image.png

image.png
image.png
image.png

1.3.2 新建Web项目

image.png
image.png
image.png
image.png

1.3.3 Web项目结构

image.png
image.png

1.3.4 在项目中配置Tomcat

image.png
image.png
image.png

二、Servlet

2.1 Servlet作用

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层
image.png

2.2 创建使用Servlet的web项目

2.2.1 项目结构

image.png

2.2.2 index.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Insert title here</title>
  6. </head>
  7. <body>
  8. <!-- action:指定数据提交到什么地方
  9. http://localhost:8080/wnm75/index.html
  10. http://localhost:8080/wnm75/login
  11. 通过input提交数据时需要给每一个数据都指定一个name key
  12. form请求方式默认是以get请求提交数据:get最大特征就是所有的数据都会以键值对的方式显示的拼接到url后面,如:http://localhost:8080/wnm75/login?account=张三&password=123,但是在提交一些敏感数据时,此种方式不安全
  13. http://localhost:8080/wnm75/login?account=%E5%BC%A0%E4%B8%89&password=123
  14. 在form提交数据还有一种使用非常多的提交方式:post请求,最大的特征是提交的数据不会出现在url上,而是将数据封装到请求体中,外界无法获取增加的安全性
  15. -->
  16. <form action="login" method="post">
  17. <input type="text" placeholder="账号" name="account"><br>
  18. <input type="password" placeholder="密码" name="password"><br>
  19. <input type="submit" value="登录">
  20. </form>
  21. <!-- http://localhost:8080/wnm75/detail.html -->
  22. <a href="detail.html">详情页</a>
  23. </body>
  24. </html>

2.2.3 LoginServlet类

package com.woniuxy.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    // 无参构造
    public LoginServlet() {
        super();
    }

    // 负责处理用户处理请求的方法
    // 参数:
    // request:请求,里面包含了用户提交的数据(账号、密码)、请求头的信息(http协议)
    // response:响应,主要用来返回用户需要的页面、数据
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 编写处理请求的代码:获取用户的提交数据、调用查询数据库的操作等等
        System.out.println("doGet()正在处理登录请求");
        // 获取用户提交的数据
        String account = request.getParameter("account");
        // account.getBytes("ISO-8859-1")    将字符串按照指定编码格式进行编码(二进制数据)
        // new String(byte[],charset)        将二进制的数据按照自定的编码进行解码,转换成指定编码的字符串
        account = new String(account.getBytes("ISO-8859-1"), "utf-8");

        String password = request.getParameter("password");
        System.out.println(account + ":" + password);
        // 通过账号到数据库中查询对应的账号信息,然后用查询出来的账号密码与提交的对比,如果一样则登录成功
        request.getParameterMap(); // 得到所有的参数
        request.getParameterNames(); // 得到所有参数的name
        request.getParameterValues("account"); // 用来获取复选框的数据 index checkbox
        /*
         * url:统一资源定位符(在互联网上找到想要的资源)
         *     http://ip:端口/项目名/...
         * 
         * uri:统一资源标识符
         *     /项目名/路径/...
         * 
         *     /wnm75/login
         *     后一个/:路径分隔符
         *     前一个/:标识当前服务器webapps的目录路径
         * 
         */
        System.out.println(request.getRequestURI());// 获取请求路径

        // 假设从数据库得到的账号密码
        String username = "zhangsan";
        String pwd = "123456";
        if(account.equals(username) && password.equals(pwd)) {
            // 登录成功
            // getRequestDispatcher(参数)
            // 获取请求转发器    参数:要跳转到的页面的路径
            // forward转发
            // 请求转发
//            request.getRequestDispatcher("success.html").forward(request, response);
            // 重定向
            response.sendRedirect("success.html");
        }else {
            // 登录失败:跳转到失败页面
//            request.getRequestDispatcher("fail.html").forward(request, response);
            response.sendRedirect("fail.html");
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("doPost()正在处理请求");
        doGet(request, response);
    }
}

2.2.4 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>wnm75</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  <!-- 主要配置处理请求的servlet信息 -->
  <servlet>
    <!-- servlet的名字(别名) -->
    <servlet-name>abc</servlet-name>
    <!-- servlet的全名 -->
    <servlet-class>com.woniuxy.servlet.LoginServlet</servlet-class>
  </servlet>
  <!-- servlet的映射关系 -->
  <servlet-mapping>
      <!-- servlet的名字(别名):注意此处别名应该与前一个别名一致 -->
    <servlet-name>abc</servlet-name>
    <!-- url匹配规则 -->
    <url-pattern>/login</url-pattern>
  </servlet-mapping>
</web-app>

2.2.5 类与html通过web.xml进行映射

image.png

1.通过 http://localhost:8080找到Tomcat服务器的webapps目录
2.通过wnm75找到项目
3.在该项目下寻找叫做login的文件,没有该文件,自动到web.xml中去进行匹配
4.在众多的servlet-mapping中用login与它的url-pattern进行比对,如果与到一样的得到servlet-name
5.通过servlet-name在众多的servlet标签中寻找名字与它一致的servlet,然后得到servlet的全名
6.通过反射的方式创建servlet对象,然后调用对应的方法处理请求

2.3 Servlet相关的方法、属性

2.3.1 Request与 Response

Request 请求:浏览器向服务器发送消息的过程叫做请求,里面包含了用户提交的数据(账号、密码)、请求头的信息(http协议)
Response 响应:服务器向浏览器发送消息的过程叫做响应,主要用来返回用户需要的页面、数据

2.3.2 HttpServletRequest核心API

    // 获取用户提交的数据
    String account = request.getParameter("account");
    // 得到所有的参数
    request.getParameterMap();
    // 得到所有参数的name
    request.getParameterNames();
    // 用来获取复选框的数据 index checkbox
    request.getParameterValues("account");

2.3.3 Request编码问题

servlet中使用的默认解码是ISO-8859-1,是外国编码,所以在解码中文时会出现问题
解决方法:将解码出来的字符串重新编码然后再解码

    // 获取用户提交的数据
    String account = request.getParameter("account");
    // 先编码再解码
    account = new String(account.getBytes("ISO-8859-1"), "utf-8");

2.3.4 URL与URI的区别

HttpServletRequest中有两个方法

    // 获取统一资源标识符(请求的路径)
    request.getRequestURI();
    // 获取统一资源定位符
    request.getRequestURL();

url:统一资源定位符(在互联网上找到想要的资源)
格式:http://ip:端口/项目名/

uri:统一资源标识符
格式:/项目名/路径/…
例如:/wnm75/login
后一个/:路径分隔符
前一个/:标识当前服务器webapps的目录路径