JavaWeb—>Servlet初识

JavaWeb—>Servlet初识

一.认识Tomcat

1.Tomcat的安装

安装Tomcat

2.Tomcat的基本使用

<1>双击 bin\startup.bat 启动
在这里插入图片描述

<2>请求 http://127.0.0.1:8080/,访问的是 webapps\ROOT\ 文件夹下的应用
在这里插入图片描述
<3>webaaps下的文件结构

在这里插入图片描述
小结:
Tomcat 文件夹下的 webapps,是 web applications 的简称,意思是用来存放 web 应用的文件夹。文件夹的名称和 url 有对应关系,除了 ROOT 表示是根应用,不需要前缀外,其余都是跟着文件夹名称。如果 url 以文件夹结尾,默认访问的是 index.html 或者 index.jsp

3.Tomcat的作用及定位

在这里插入图片描述

4. Tomcat补充

<1>启动报错

检查:
在这里插入图片描述

<2>.Tomcat部署Web项目

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

二.初识Servlet

1.Servlet的简单介绍

1.概念:Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
2.定位:Java Servlet用Java编写的服务器端程序(web application)。
3.作用:其主要功能在于交互式地浏览和修改数据,生成动态Web内容。
4.理解:狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,我们将Servlet理解为后者。

2.Servlet常见方法与生命周期

<1>.生命周期

1.Servlet 通过调用 init () 方法进行初始化。
2.Servlet 调用 service() 方法来处理客户端的请求。
3.Servlet 通过调用 destroy() 方法终止(结束)。
4.最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
在这里插入图片描述

<2>Servlet和Tomcat的关系

Tomcat属于Web服务器,也成为Servlet容器

<3>Servlet的常见方法

1.Servlet的service()方法是请求的入口方法,HttpServlet实现service()方法在这个入口方法中根据不同的Http请求方法(如GET、POST请求)调用不同的方法。
2.大多数应用程序都是要于HTTP结合起来使用。这意味着可以利用HTTP提供的特性。 javax.servlet.http包是Servlet API中的第二个包,其中包含了用于编写Servlet应用程序的类和接口,并且许多类型都覆写了javax.servlet 中的类型。
3.HttpServlet类覆盖了 javax.servlet.GenericServlet 类。使用HttpServlet时,需要使用代表Servlet请求和Servlet响应的 HttpServletRequest 和 HttpServletResponse 对象。

子类继承HttpServlet类,重写以下方法:
在这里插入图片描述

<4>Servlet请求过程图

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

<5>.Servlet请求代码示例


//注解的使用:小括号包裹多个属性,属性名=属性值,多个之间逗号间隔
//属性名位value时可以缺省
//Servlet定义服务,注意服务路径必须是/开始,否则tomcat启动就会报错
@WebServlet("/login301")//服务路径
public class Login301 extends HttpServlet {

    /**
     * 每次http请求 映射到某个Servlet的资源路径,都会调用service生命周期方法
     * 如果请求方法没有重写,就会调用父类的doMethod(对应请求方法),返回405
     * 如果重写,会将请求数据包装为 ,Request对象,这时候虽然没有响应,但是也保障了一个Response响应对象
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //如果使用父类的doPost方法,父类方法里面逻辑会抛405或者400
        // super.doPost(req, resp);

        //设置请求,响应编码,以及响应数据类型(为响应体设置ContenType)
        req.setCharacterEncoding("UTF-8");//设置请求体编码
        resp.setCharacterEncoding("UTF-8");//设置请求体的编码
        resp.setContentType("text/html");//为响应体设置ContenType

        //解析请求数据(不一定有)
        //request.getParameter方法获取请求的数据:url和请求体,数据格式为k1=v1&k2=v2
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.printf("用户名(%s),密码(%s)\n", username, password);
        // 返回响应的数据
        if ("abc".equals(username) && "123".equals(password)) {
            //重定向,http响应状态码设置为301/302/307,响应头为location
            //参数为location ,跳转到该页面
            resp.sendRedirect("home.html");
        }else if ("abc".equals(username)){
            // 转发
            req.getRequestDispatcher("home.html").forward(req,resp);
        }
        else {


            PrintWriter Rpassword = resp.getWriter();//response获取io输出流
            Rpassword.println("登录失败");
            Rpassword.println("<h3>用户名: " + username + "或密码错误</h3>");
            Rpassword.flush();//有缓冲的io操作,需要刷新缓冲区,才会真正发送和接收数据
            Rpassword.close();//io流操作一定要记住关闭资源
        }
    }
}

<6>.重定向与转发

1.重定向:

//重定向,http响应状态码设置为301/302/307,响应头为location
            //参数为location ,跳转到该页面
            resp.sendRedirect("home.html");

2.转发:

// 转发
req.getRequestDispatcher("home.html").forward(req,resp);

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Serendipity sn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值