第四周预习

第四周预习-MVC+Servlet、jar包介绍、如何导包与使用

1.MVC

MVC:模型-视图-控制器(Model-View-Controller)
MVC 是一种先进的设计结构,其目的是以会话形式提供方便的GUI支持。

MVC是一种通过3个不同部分构造一个软件或组件的理想办法

  • 模型用于存储数据的对象,负责处理数据逻辑
  • 视图为模型提供数据显示的对象
  • 控制器处理用户的交互操作,对于用户的操作作出响应,让模型与视图进行必要的交互,即通过视图修改,获取模型中的数据;当模型中的数据变化时,让视图更新显示。

可以将某个对象看作“模型”,然后为“模型”提供恰当的显示组件,即“视图”。
为了对用户操作作出响应,可以选择某个组件做“控制器”,当触发事件时,通过“视图”修改或得到“模型”中维护着的数据,让“视图”更新显示。
MVC设计模式可以提高代码的可复用性,降低代码之间的耦合度

2. JavaWeb技术栈

  • B/S架构:Browser/Server,浏览器服务器架构模式,客户只需要浏览器,应用程序的逻辑和数据存储在服务器端。浏览器只需要请求服务器,获取 Web资源,服务器把Web资源发送给浏览器即可。好处是易于维护升级:服务器升级后,客户端无需任何部署就可以使用到最新的版本(对比C/S架构:服务器的软件和功能进行升级,客户端也必须升级,不利于维护)。
  • 静态资源:HTML、CSS、JavaScript、图片等。负责页面展现,所有人看到的页面内容相同
  • 动态资源:Servlet、JSP等。负责逻辑处理,指Web页面中供人们浏览的数据是由程序产生的,Web页面能够根据用户的请求和服务器上的数据动态生成内容,不同时间点,不同设备访问Web页面看到的内容 不同
  • 数据库:存储和管理应用程序所需的数据
  • HTTP协议:负责定义浏览器和服务器之间的通信规则
  • Web服务器:负责解析HTTP协议,解析请求数据,并发送响应数据

3.HTTP

HyperText Transfer Protocal,超文本传输协议,规定了浏览器和服务器之间数据传输的规则

HTTP协议特点:

  • 支持客户/服务器模式

  • 基于TCP协议:面向连接,安全

  • 基于请求-响应模型的:一次请求对应一次响应,HTTP1.1版本之后支持可持续连接

  • 无状态:对于事务处理没有记忆能力,每次请求-响应都是独立的。速度快,但多次请求之间不能共享数据(Java中使用会话技术(Cookie、Session)来解决这个问题)

HTTP报文

  • 请求报文
  1. 请求行:请求数据的第一行 例:GET / HTTP/1.1,GET表示请求方式, /表示请求资源路径,HTTP/1.1表示版本协议
  2. 请求头:第二行开始,格式为key:value形式。

Host : 表示请求的主机名
User-Agent : 浏览器版本
Accept : 表示浏览器能接收的资源类型,text/* ,image/ *, * / *(表示所有)
Accept-Language : 表示浏览器偏好的语言,服务器可以据此返回不同语言的网页
Accept-Encoding : 表示浏览器可以支持的压缩类型,例如gzip,deflate等

  1. 请求体:POST请求的最后一部分,存放请求参数

GET请求和POST请求区别:

  1. GET请求请求参数在请求行中,没有请求体;POST请求请求参数在请求体中
  2. GET请求请求参数大小有限制,POST没有
  • 响应报文
  1. 响应行:例:HTTP/1.1 200 OK,HTTP/1.1表示协议版本,200表示状态码(状态码大全),OK表示状态描述
状态码分类说明
1xx响应中:临时状态码,表示请求已经接受,告诉客户端应该继续请求或者它已经完成则忽略它
2xx成功:表示请求已经被成功接收,处理已完成
3xx重定向:重定向到其它地方:它让客户端再发起一个请求以完成整个处理
4xx客户端错误:处理发生错误,责任在客户端,如客户端请求一个不存在的资源(404),客户端未被授权,禁止访问等
5xx服务器端错误:处理发生错误,责任在服务器,如服务端抛出异常,路由出错,HTTP版本不支持等
  1. 响应头:第二行开始,格式为key:value形式。

Content-Type :表示该相应内容的类型,例如text/html,image/jpeg
Content-Length :表示该相应内容的长度(字节数)
Content-Encoding :表示该相应压缩算法,例如gzip
Cache-Control :指示客户端应如何缓存,例如max-age=300表示最多可以缓存300秒

  1. 响应体:包含服务器返回给客户端的实际数据

4.Tomcat

  1. 对HTTP操作协议进行封装,不必直接对协议进行操作,简化开发
  2. 可以将web项目部署到服务器中,对外提供网上浏览服务

5. Servlet

Servlet时Java提供的一门动态web资源开发技术,Servlet接口是JavaEE规范之一,需要定义Servlet类实现Servlet接口,并由Web服务器运行Servlet
作用:接收客户端请求完成操作,生成动态网页,将包含操作结果的动态网页响应给客户端

方法说明
void init (ServletConfing config)初始化方法,在Servlet被创建时执行,只执行一次
void service(ServletRequst req,ServletResponse res)提供服务方法,每次Servlet被访问,都会调用该方法
void destory()销毁方法,当Servlet被销毁时,调用该方法。在内存释放或服务器关闭时销毁Servlet
ServletConfig getServletConfig()获取ServletConfig对象
String getServletInfo()获取Servlet信息

编写servlet

  1. 创建web项目,导入Servlet依赖坐标
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>5.0.0</version>
            <scope>provided</scope>
        </dependency>
  1. 创建:定义一个类,实现Servlet接口,并重写接口中的所有方法,并在service方法中输出一句话
  2. 配置:在类上使用@WebServlet注解,配置该Servlet的访问路径
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/demo1")
public class ServletDome implements Servlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("hello world!");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
}
  1. 访问:启动Tomcat,浏览器输入URL访问该Servlet
  • Servlet执行流程

URL:http://localhost:8080/web项目/Servlet的访问路径,由协议、主机、端口、资源路径四部分组成
Tomcat创建Servlet对象并调用方法

  • Servlet生命周期

Servlet运行在Servlet容器web服务器中,其生命周期由容器来管理

  1. 加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象
  2. 初始化:在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次
  3. 请求处理:每次请求Servlet时,Servlet容器就会调用Servletd的service()方法对请求进行处理
  4. 服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destory()方法完成资源的释放。在destory()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收
  • HttpServlet:Servlet接口的一个实现类,是一个抽象类,在servlet.http包中,专门用于处理采用HTTP通信协议的请求和响应。需要重写doGet()和doPost()等方法来处理GET和POST请求。

6.Cookie、Session

Cookie
服务器以响应的方式告诉浏览器将常用的数据存储起来,操作Cookie的类java.servlet.http.Cookie,在服务器端创建,随着服务器的响应发送给客户端,保存在浏览器,下次访问服务器时把Cookie带回服务器;存储数据不超过4KB,不适合大数据的存储;不安全,从浏览器中可以看到Cookie

方法说明
Cookie(name,value)构造方法
addCookie(cookie)添加Cookie
getCookies()获取请求发送时Cookie对象的数组
getName获取Cookie名称
getValue获取Cookie值
setMaxAge(int espiry)设置Cookie的有效期,以秒为单位,默认为-1,永久存活,在浏览器关闭时被删除,0为删除


import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("demo02")
public class SetCookieServlet 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 {
        Cookie cookie = new Cookie("fpl","fpl1116");
        cookie.setMaxAge(60*60*24);
        resp.addCookie(cookie);

    }
}

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
@WebServlet("demo03")
public class GetCookieServlet 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 {
        Cookie[] cookies = req.getCookies();
        for(Cookie cookie : cookies){
            System.out.println(cookie.getName());
            System.out.println(cookie.getValue());
        }


    }
}

Session
Session对象由服务器保存,基于Cookie实现,服务器会给每个用户的浏览器创建一个Session对象

方法说明
getSession()获取Session
setAttribute()给Session设置键值对数据
getAttribute()通过键获取session中的值
removeAttribute()通过键移除session中的值
getId()获取session的id
invalidate()session失败,再次进入会重置Session的值
import java.io.IOException;  
import java.io.PrintWriter;  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import javax.servlet.http.HttpSession;  
  @WebServlet("/demo04")
public class SessionExampleServlet extends HttpServlet {  
  
    protected void doGet(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        response.setContentType("text/html;charset=UTF-8");  
          
        try (PrintWriter out = response.getWriter()) {  
            // 获取Session对象  
            HttpSession session = request.getSession();  
              
            // 检查Session中是否存储了用户名  
            String username = (String) session.getAttribute("username");  
              
            if (username != null) { 
                out.println("<h1>欢迎回来," + username + "!</h1>");  
            } else {   
                out.println("<h1>请输入您的用户名:</h1>");  
                out.println("<form method='post' action='" + request.getContextPath() + "/set-session'>");  
                out.println("<input type='text' name='username' />");  
                out.println("<input type='submit' value='设置Session' />");  
                out.println("</form>");  
            }  
        }  
    }  
  
    protected void doPost(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        response.setContentType("text/html;charset=UTF-8");  
          
        try (PrintWriter out = response.getWriter()) {  
            // 获取用户输入的用户名  
            String username = request.getParameter("username");  
              
            // 获取Session对象  
            HttpSession session = request.getSession();  
              
            // 将用户名存储到Session中  
            session.setAttribute("username", username);   
        }  
    }  
}

7. jar包

JAR包(Java Archive)可以将多个Java类文件、相关的元数据和资源(如文本、图片等)文件聚合到一个文件中,以便于开发Java平台应用软件或库。JAR包本质上就是ZIP包,但JAR文件的内容中包含了一个META-INF/MANIFEST.MF文件。这个文件是在生成JAR文件时自动创建的,作为JAR包内的“详情单”,包含了该JAR包的版本、创建人和类搜索路径(Class-Path)等信息。如果是可执行JAR包,还会包含Main-Class属性,表明Main方法入口。它提供了一种有效的方式来组织和分发Java应用程序和库。通过将相关的类文件和资源文件打包到一个JAR文件中,可以简化项目的部署和分发过程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值