JavaWeb总结性笔记

JavaWeb总结性笔记

注:本篇文章总结自b站狂神javaweb教程

狂神b站教学地址

笔记地址

1、基本概念

1.1、静态web

无法动态更新的web页面,无法与数据库交互,可以通过js实现伪动态

在这里插入图片描述

1.2、动态web

可以动态更新的web页面,实现与数据库交互

在这里插入图片描述

2、Http

2.1、Http请求

客户端–>发请求–>服务器

请求行
  • 请求行中的请求方式:get,post,head,delete…
  • get:请求能携带的参数较少,大小受限,会在url地址栏显示内容,不安全
  • post:请求携带的参数没有限制,打小没有限制,不会在url地址栏显示数据内容,安全
消息头
Accept:告诉浏览器,它所支持的数据类型
Accept-Encoding:支持哪种编码格式  GBK   UTF-8   GB2312  ISO8859-1
Accept-Language:告诉浏览器,它的语言环境
Cache-Control:缓存控制
Connection:告诉浏览器,请求完成是断开还是保持连接
HOST:主机..../.

2.2、Http响应

服务器–>响应–>客户端

响应体
Accept:告诉浏览器,它所支持的数据类型
Accept-Encoding:支持哪种编码格式  GBK   UTF-8   GB2312  ISO8859-1
Accept-Language:告诉浏览器,它的语言环境
Cache-Control:缓存控制
Connection:告诉浏览器,请求完成是断开还是保持连接
HOST:主机..../.
Refresh:告诉客户端,多久刷新一次;
Location:让网页重新定位;
响应状态码

200:请求响应成功

3xx:请求重定向

4xx:找不到资源

5xx:服务器代码错误 502:网关错误

3、servlet

3.1、首先在maven里导入依赖,因为要继承httpservlet

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
</dependency>

<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.3</version>
    <scope>provided</scope>
</dependency>

3.2、实现helloservlet类

package com.zhage.servlet;

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

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //防止出现乱码
        //将响应和请求都转为utf8,响应格式设置为html
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");

        PrintWriter writer = resp.getWriter();
        writer.print("扎哥啦啦啦");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

3.3、映射helloservlet类

为什么需要映射:我们写的是JAVA程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以我们需
要再web服务中注册我们写的Servlet,还需给他一个浏览器能够访问的路径;

<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.zhage.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

3.4、配置tomcat

在这里插入图片描述

在这里插入图片描述

3.5、启动测试

在这里插入图片描述

3.6、servlet原理

在这里插入图片描述

3.7、关于mapping

一个servlet可以映射多个路径

制定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求

3.8、servletcontext

web在启动的时候,会为每个web程序创建一个对应的servletcontext对象,代表了当前的web应用

3.8.1、使用servletcontext共享数据

setservlet代码

package com.zhage.servlet;

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

public class SetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        String name = "扎哥";
        servletContext.setAttribute("name",name);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

getservlet代码

package com.zhage.servlet;

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

public class GetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //防止出现乱码
        //将响应和请求都转为utf8,响应格式设置为html
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");

        ServletContext servletContext = this.getServletContext();
        String name = (String) servletContext.getAttribute("name");
        resp.getWriter().print("name对应的值是:"+name);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

直接访问get

在这里插入图片描述

先访问set再访问get

在这里插入图片描述

3.8.2、实现请求转发

servletdemo01

public class ServletDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        System.out.println("进入01");
        servletContext.getRequestDispatcher("/sd2").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

servletdemo02

public class ServletDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");
        resp.getWriter().print("我是ServletDemo02哦,注意url还是sd1嗷");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

结果

在这里插入图片描述

在这里插入图片描述

3.8.3、更多

可以读取properties资源文件

重定向和请求转发区别

在这里插入图片描述

4、Cookie、Session

4.1、Cookie

在这里插入图片描述

从请求中拿到cookie

服务器响应给客户端cookie

实现使用cookie保存用户信息

代码

public class CookieServlet01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");
        //获得cookie
        Cookie[] cookies = req.getCookies();
        boolean isIn = false;
        //遍历cookie
        for (Cookie cookie : cookies) {
            if(cookie.getName().equals("username"))
            {
                resp.getWriter().print("您已经被保存了,您的名字是:"+cookie.getValue());
                isIn = true;
            }
        }
        //如果没找到
        if(!isIn)
        {
            resp.getWriter().print("您还没有进入过该页面");
            Cookie cookie = new Cookie("username", "扎哥");
            //添加cookie
            resp.addCookie(cookie);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

第一次进入c1

在这里插入图片描述

第二次进入c1

在这里插入图片描述

可以找到对应的cookie

在这里插入图片描述

这个name是之前存错了一次

4.2、Session

在这里插入图片描述
session是服务器给每个用户的

一个session对应一个浏览器

使用方法与context类似,就不写代码了

重点是在与区别,context作用域是整个web,session作用域是整个浏览器(这里是鄙人的简短总结,如有不对,请指出)

cookie与session的区别

  • cookie是用户存在本地的信息,只能保存字符串
  • session是存在服务器中,相当于一个用户独占,所以少写入,保存重要信息,减少服务器资源的浪费

5、jsp

没什么好讲的,语法用到的时候再去找都可以,主要是要懂原理,jsp实际上就是一个servlet,你在jsp里面写的内容,其实都是用servlet一个个写出来的

6、mvc三层架构

在这里插入图片描述

Model

  • 业务处理 :业务逻辑(Service)
  • 数据持久层:CRUD (Dao - 数据持久化对象)

View

  • 展示数据
  • 提供链接发起Servlet请求 (a,form,img…)

Controller (Servlet)

  • 接收用户的请求 :(req:请求参数、Session信息….)
  • 交给业务层处理对应的代码
  • 控制视图的跳转

7、Filter

直接用一个例子,用户没有登录就无法进入lalala页面

loginservlet,用来实现注入session,实际应用是表单传入的参数实现注册

public class LoginServlet 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 {
        //在这个页面将username注入session
        HttpSession session = req.getSession();
        session.setAttribute("username", URLEncoder.encode("扎哥","utf-8"));
        resp.sendRedirect("/filter/lalala");
    }
}

mainservlet,如果session里有用户信息,则可以进入的页面

在这里插入图片描述

过滤器

public class LoginFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse resp = (HttpServletResponse) response;

        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");
        HttpSession session = req.getSession();
        if(session.getAttribute("username")==null)
        {
            System.out.println("没有登录");
            resp.sendRedirect("/filter/index.jsp");
        }

        //让过滤器继续往下走
        chain.doFilter(request,response);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void destroy() {

    }
}

web.xml里实现filter的映射,将/lalala加入过滤器,每次访问lalala就会执行这个过滤器

<filter>
    <filter-name>loginFilter</filter-name>
    <filter-class>com.zhage.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>loginFilter</filter-name>
    <url-pattern>/lalala</url-pattern>
</filter-mapping>

若直接 进入/lalala,因为没注入session,所有过滤器会跳转到index

在这里插入图片描述

在这里插入图片描述

进入login之后

在这里插入图片描述

成功进入了lalala,这之后再尝试直接进入lalala,还是可以。

最后最后

其实我就只是跟着流程走了一遍,smbms也没有去做,主要是直冲springboot,前面的知识主要是要懂,理解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值