javaweb 学习笔记

学习视频

老师又下了几个任务 先开个坑 把要学的视频先放在这里 以免以后找不到
Docker
fastDFS
Springboot+fastDFS
Nginx

随看随记

  • 默认端口号
    • tomcat默认端口号:8080
    • MySql默认端口号:3306
    • http默认端口号:80
    • https默认端口号:443
  • 网站是如何访问的
    • 首先检查本机的C:\Windows\System32\drivers\etc\hosts有没有域名映射
      • 如果有直接返回对应的ip,直接访问该网页
      • 如果没有,去DNS服务站中寻找,找到了就访问,找不到就找不到网页
  • 网页乱码问题的解决
    • 编码:URLEncoder.encoder(“学习”,“utf-8”)
    • 解码:URLDecoder.decoder(cookie.getvalue(),“utf-8”)

基本概念

在这里插入图片描述

WEB服务器

  • 三高问题:高并发,高可用,高性能
  • B/S:浏览器端和服务器端
  • C/S:客户端和服务器
  • JSP/Servlet: sun主推的B/S框架 其对应的位置就是上图的WebService位置

TomCat

tomcat配置

  • tomcat默认配置
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    
  • 可以配置的主机名称
    默认主机名为localhost—>127.0.0.1
    默认的网站存放位置为:webapps
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
    
    不要修改引擎
    	<Engine name="Catalina" defaultHost="localhost">
    
  • 将指定的web应用放置到tomcat中的webapps文件夹下就可以进行访问了
  • 发布网站时应该有的结构
    • webapps
      • myWeb
        • WEB-INFO
          • classes: java程序
          • lib:web应用所依赖的jar包
          • web.xml:网站的配置文件
        • index.html 默认的首页
        • static
          • css
            • style.css
          • js
          • img

Http

一种超文本传输协议,是一种简单的请求响应协议,通常运行在TCP之上

  • http/1.0 客户端和web服务器连接后只能获得一个web资源,断开连接
  • http/1.1 客户端和web服务器连接后,可以获得多个web资源。

Http请求

在这里插入图片描述

  • 客户端 – 发请求(request) – 服务器
  • 请求行
    • 请求方式
      • get:能够携带的参数少,大小有限制,会在url地址栏中显示数据内容,不安全,但高效。
      • post :能够携带的参数多,大小无限制,不会在url地址栏中显示数据内容,安全,但不高效。
  • 消息头

Http响应

  • 服务器 – 响应 – 客户端
  • 响应体
  • 响应状态码
    • 200: 响应成功
    • 3xx:请求重定向
    • 4xx:找不到资源
    • 5xx:服务器代码错误 502网关错误

Maven

maven中 注意加上以下代码 可以把资源加载成class

	<build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

Servlet

HelloServlet

  • 在父工程中建立maven项目,删除src,建立父maven项目。在父maven项目中建立子maven项目,可以继承父项目的依赖

     <dependencies>
            <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
            <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>
    
            </dependency>
    
    
        </dependencies
    
  • webapp.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"
             metadata-complete="true">
    
    </web-app>
    
  • 恢复maven结构

  • 编写servlet程序

    1. 编写一个普通类

    2. 实现一个接口,直接继承HttpServlet

    3. 对doget和dopost方法进行重写

      	 public class HelloServlet extends HttpServlet {
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              PrintWriter writer = resp.getWriter();
              writer.println("helloWorld!!!!!!!!!!");
          }
      
          @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              doGet(req, resp);
          }
      }
      
    4. 编写servlet的映射

       <?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"
               metadata-complete="true">
      
          <servlet>
              <servlet-name>helloServlet</servlet-name>
              <servlet-class>com.paleatta.servlet.HelloServlet</servlet-class>
          </servlet>
          <servlet-mapping>
              <servlet-name>helloServlet</servlet-name>
              <url-pattern>/hello</url-pattern>
          </servlet-mapping>
      </web-app>
      

      注意 url-pattern的/千万不要忘记 否则会出大问题,我就是找了半天才发现缺了一个/

    5. 配置Tomcat

Servlet原理

在这里插入图片描述

  • 我们主要通过重写service方法来进行请求和相应之间的达成关系

servlet-mapping

  • 一个Servlet可以指定一个映射路径
	 <servlet>
        <servlet-name>helloServlet</servlet-name>
        <servlet-class>com.paleatta.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>helloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
  • 一个Servlet可以指定多个映射路径
     <servlet>
        <servlet-name>helloServlet</servlet-name>
        <servlet-class>com.paleatta.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>helloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>helloServlet</servlet-name>
        <url-pattern>/hello1</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>helloServlet</servlet-name>
        <url-pattern>/hello2</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>helloServlet</servlet-name>
        <url-pattern>/hello3</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>helloServlet</servlet-name>
        <url-pattern>/hello4</url-pattern>
    </servlet-mapping>
  • 一个Servlet可以指定一个通用映射路径,可以通过添加通配符进行映射通用路径
   <servlet>
        <servlet-name>helloServlet</servlet-name>
        <servlet-class>com.paleatta.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>helloServlet</servlet-name>
        <url-pattern>/hello/*</url-pattern>
    </servlet-mapping>
  • 可以指定一些前缀或者后缀 切记不要加/, * 前面不能加映射通配符/

     <servlet>
        <servlet-name>helloServlet</servlet-name>
        <servlet-class>com.paleatta.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>helloServlet</servlet-name>
        <url-pattern>*.paleatta</url-pattern>
    </servlet-mapping>
    

ServletContext

  • 数据共享
    在这里插入图片描述
  • servlet是通过web容器生成的上下文,可以在一个web容器下的所有servlet中共用。
public class SetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        String username = "paleatta";
        servletContext.setAttribute("username",username);
    }
 }
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
     throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        String username = (String) servletContext.getAttribute("username");

        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");

        resp.getWriter().println("名字"+username);
    }
 <servlet>
        <servlet-name>helloServlet</servlet-name>
        <servlet-class>com.paleatta.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>helloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>setServlet</servlet-name>
        <servlet-class>com.paleatta.servlet.SetServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>setServlet</servlet-name>
        <url-pattern>/gets</url-pattern>
    </servlet-mapping>

HttpServletResponse

  • web服务器从客户端接受http请求,针对这个请求,会分别创建一个代表请求的HttpServletRequest对象,和一个代表响应的HttpServletResponse
    • 获取客户端请求的参数 : HttpServletRequest
    • 提供客户端需要的参数 : HttpServletResponse
  • 下载文件:
    1. 获取下载文件的路径
    2. 下载的文件名是啥
    3. 使得浏览器支持我们下载的内容
    4. 获取下载文件的输入流
    5. 创建缓冲区
    6. 获取OutputStream对象
    7. 将FileOutputStream写入buffer中
    8. 使用OutputStream将缓冲区的数据输出到客户端
 String realPath = "E:\\learn\\SpringMVC\\HelloServlet\\response\\src\\main\\resources\\nobug.jpg";
        System.out.println(realPath);
        String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
        resp.setHeader("Content-Disposition", "attachment;filename=" + fileName);
        FileInputStream inputStream = new FileInputStream(realPath);
        int len = 0;
        byte[] buffer = new byte[1024];
        ServletOutputStream outputStream = resp.getOutputStream();
        while ((len = inputStream.read(buffer)) > 0) {
            outputStream.write(buffer, 0, len);
        }

        inputStream.close();
        outputStream.close();
  • response实现重定向
    • resp.sendRedirect("/hello"); 将指定的路由重定向到/hello 上

    • 请求转发路径不会发生变化,但是页面会变化到重定向的页面

    • 如下图所示,在A访问B时,B将C的内容请求后返回给A,因此A仅仅需要访问B的路径就可以了,而不需要访问C的路径。在这里插入图片描述

    • 重定向是路径和页面都会发生变化的

    • 因为重定向是A在请求发给B后,B将请求返回给A,要求A请求C,因此A实际上是请求了C而不是B,因此路径和内容都是C的内容。在这里插入图片描述

HttpServletRequest

  • 代表了客户端的请求
  • 获取前端传递的参数
  • 请求转发

Cookie & Session

  1. 服务器给客户端一个令牌,客户端下次访问服务端时带上令牌就可以;Cookie
  2. 服务器登记用户曾经来过,客户端下次访问自动匹配对象;Session

Cookie 令牌 网站登录后,下次不用再登陆,直接进行访问

  • 处理cookie可以像处理键值对Str,Obj一样,进行处理,有特定的name值和value值
  • cookie可以通过设置setMaxAge参数来设置该条cookie的有效期。
  • cookie的细节问题
    1. 一个cookie只能保存一个信息;
    2. 一个web站点能给浏览器发送多个cookie,最多存放20个cookie
    3. Cookie的大小有4Kb的限制
    4. 浏览器的cookie上限是300个。

Session 会话

  • 什么是session
    1. 我服务器回给每一个用户创建一个Session对象
    2. 一个Session独占一格浏览器,只要浏览器没有关闭,这个session就会存在
    3. 用户登录后,整个网闸你都可以访问
  • Session和Cookie的区别
    1. Cooki是吧用户的数据写给用户的浏览器,浏览器保存
    2. Session把用户的数据写到用户独占的Session中,服务器中保存
    3. Session对象有服务创建
  • 使用场景
    1. 保存一个登陆用户的信息
    2. 在震哥哥网站中经常会使用过的数据,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值