java实习课堂笔记二

初识Servlet

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

Servlet架构

Http Protocal
Web Browser
Http Server
Servlet
DataBase

Servlet任务

Servlet 执行以下主要任务:

  • 读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
  • 读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
  • 处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
  • 发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
  • 发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。

Tomcat

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP(JavaServer Pages)程序的首选。
对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
同时,Tomcat还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。因此我们需要使用Tomcat服务器来学习Servlet。
链接Tomcat安装教程

Servlet入门实验

实验内容

利用Servlet架构实现用户登录判断。

实验过程

  1. 在IDEA中创建Web Application项目,并且添加Tomcat Server
    在这里插入图片描述
  2. 打开File中的Project Structure,添加mysql-connector-java-8.0.17.jar和servlet-api.jar这两个jar包
    在这里插入图片描述
  3. 使用MySql图形界面管理工具创建新表user
    在这里插入图片描述
  4. 创建model包,并在此包下创建User类,此类用于封装用户信息
public class User {

    private int id;
    private String name;
    private String password;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                '}';
    }
}
  1. 创建util包,并在此包下创建DBUtil类,此类用于连接数据库
public class DBUtil {

    public static Connection getConnection() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        //getConnection的三个参数分别为url,username,password,请替换为你的信息
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/dyh?urlSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC", "root", "1214");
        return conn;
    }

    public static void closeAll(ResultSet rs, Statement stmt, Connection conn) throws SQLException{
        if(rs != null){
            rs.close();
        }
        if(stmt != null){
            stmt.close();
        }
        if(conn != null){
            conn.close();
        }
    }
  1. 创建dao包,并在此包下创建UserDao,此类用于执行数据库信息的处理
public class UserDao {

    public static User selectByName(String name) {
        ResultSet rs = null;
        Connection conn = null;
        PreparedStatement pstmt = null;
        User user = new User();
        try{
            conn = DBUtil.getConnection();
            pstmt = conn.prepareStatement("select * from user where username=?");
            pstmt.setString(1, name);
            rs = pstmt.executeQuery();

            while(rs.next()){
                user.setId(rs.getInt(1));
                user.setName(rs.getString(2));
                user.setPassword(rs.getString(3));
                user.setAge(rs.getInt(4));
            }

        }catch (ClassNotFoundException | SQLException e){
            e.printStackTrace();
        }finally {
            try {
                DBUtil.closeAll(rs, pstmt, conn);
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        return user;
    }
}
  1. 创建service包,并在此类下创建UserService类,此类用于提供前台服务,我们可以看到此类的内容很少,其实根本不需要这个类,但是我们还是这样做了,这是为了更好地进行模块的划分、封装
public class UserService {

    public static User selectByName(String name){
        return UserDao.selectByName(name);
    }

}
  1. 创建servlet包,并在此包下创建LoginServlet类,此类用于实现用户登录判断
public class LoginServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name = req.getParameter("name");
        String password = req.getParameter("password");


		User user = UserService.selectByName(name);
        if(password.equals(user.getPassword())){
            resp.getWriter().write("success");
        }else{
            resp.getWriter().write("failure");
        }
    }
}
  1. 在WEB-INF下新建lib文件夹,并导入mysql-connector-java-8.0.17.jar和jstl-1.2.jar这两个jar包
    在这里插入图片描述
  2. 修改web文件夹下的index.jsp文件,用于形成网页页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$客户端$</title>
  </head>
  <body>
<h1>登录页面</h1>
  <form action="/login" method="post">
    name:<input name="name" type="text">
    password:<input name="password" type="password">
    <input type="submit" value="登录">
  </form>
  </body>
</html>
  1. 修改web文件夹下的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">

    <servlet>
        <servlet-name>loginServlet</servlet-name>
        <!--下一行中的servlet-class中请放入你建好的servlet包中的LoginServlet类-->
        <servlet-class>com.yeling.servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>loginServlet</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>
</web-app>
  1. 配置Tomcat Server并运行
    在这里插入图片描述

结果输出

在这里插入图片描述
在这里插入图片描述

实验小结

从上述实验中也可以看出,Servlet并不是什么很复杂的东西,事实上,Servlet就是一个Java接口,也就是一个interface。打开IDEA,ctrl + shift + n,搜索Servlet,就可以看到是一个只有5个方法的i接口。那Servlet是干嘛的?很简单,接口的作用是什么?规范。Servlet接口定义的是一套处理网络请求的规范,所有实现servlet的类,都需要实现它那五个方法。Servlet是一个规范,那实现了servlet的类,就能处理请求了吗?答案是,不能。Servlet不会直接和客户端打交道。那请求怎么来到Servlet呢?答案是Servlet容器,比如我们这次试验使用的Tomcat,这也是最常用的一种Servlet容器,任何一种使用Servlet的程序都需要部署到一个容器中,不然Servlet压根不会起作用。tomcat才是与客户端直接打交道的家伙,他监听了端口,请求过来后,根据url等信息,确定要将请求交给哪个servlet去处理,然后调用那个servlet的service方法,service方法返回一个response对象,tomcat再把这个response返回给客户端。

参考文献

An Introduction to Tomcat Servlet Interactions

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值