狂神 JavaWeb笔记

转载引用https://blog.csdn.net/fanjianhai?spm=1011.2124.3001.5348

1. 基本概念

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2. Web服务器

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3. Tomcat

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

# 4. Http

在这里插入图片描述

4.3. Http请求

在这里插入图片描述

 

4.4. Http响应

在这里插入图片描述

5. Maven

https://github.com/fanjianhai/kuangshen/tree/master/0.IDEA%E5%B8%B8%E7%94%A8%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95

6. Servlet

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6.3. Servlet原理

在这里插入图片描述

 

在这里插入图片描述

  1. 一个 Servlet可以指定多个映射路径

  <servlet>
   <servlet-name>hello</servlet-name>
   <servlet-class>com.xiaofan.servlet.HelloServlet</servlet-class>
 </servlet>
 <servlet-mapping>
   <servlet-name>hello</servlet-name>
   <url-pattern>/hello</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
   <servlet-name>hello</servlet-name>
   <url-pattern>/hello1</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
   <servlet-name>hello</servlet-name>
   <url-pattern>/hello2</url-pattern>
 </servlet-mapping>
  1. 一个Servlet可以指定通用映射路径

  <servlet-mapping>
   <servlet-name>hello</servlet-name>
   <url-pattern>/hello/*</url-pattern>
 </servlet-mapping>

在这里插入图片描述

注意定义后缀,不用设置前面的路径,默认会匹配上

  1. 优先级问题

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

 

  • 共享数据

在这里插入图片描述

  • 获取初始化参数

    String url = this.getServletContext().getInitParameter("url");
  <context-param>
   <param-name>url</param-name>
   <param-value>www.baidu.com</param-value>
 </context-param>
  • 请求转发

  this.getServletContext().getRequestDispatcher("/index").forward(req, resp);

在这里插入图片描述

  • 读取资源文件Properties

  <!--静态资源导出-->
 <build>
   <resources>
     <resource>
       <directory>src/main/java</directory>
       <includes>
         <include>**/*.properties</include>
         <include>**/*.xml</include>
       </includes>
       <filtering>false</filtering>
     </resource>
     <resource>
       <directory>src/main/resources</directory>
       <includes>
         <include>**/*.properties</include>
         <include>**/*.xml</include>
       </includes>
       <filtering>false</filtering>
     </resource>
   </resources>
 </build>
// 注意路径的取法
InputStream inputStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
Properties properties = new Properties();
properties.load(inputStream);
String username = properties.getProperty("username");
String password = properties.getProperty("password");
System.out.println("username:" + username + "\npassword: " + password);

6.4. Response下载文件

public class FileServlet extends HttpServlet {

   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       String realPath = "D:\\JavaWebLocalProject\\javaweb-01-servlet\\servlet-01\\target\\servlet-01-1.0-SNAPSHOT\\WEB-INF\\classes\\abc.jpg";

       System.out.println(realPath);
       String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);

       resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName, "UTF-8"));

       FileInputStream in = new FileInputStream(realPath);

       ServletOutputStream out = resp.getOutputStream();

       int len = 0;

       byte[] buffer = new byte[1024];

       while ((len = in.read(buffer)) > 0) {
           out.write(buffer, 0, len);
      }

       in.close();
       out.close();

  }

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

6.5 验证码的生成

package com.xiaofan.servlet;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

public class ImageServlet extends HttpServlet {
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       resp.setHeader("refresh", "3");

       BufferedImage image = new BufferedImage(80, 20, BufferedImage.TYPE_INT_BGR);

       Graphics2D g = (Graphics2D) image.getGraphics();

       g.setColor(Color.white);
       g.fillRect(0,0, 80, 20);

       g.setColor(Color.BLUE);
       g.setFont(new Font(null, Font.BOLD, 20));
       g.drawString(makeNum(), 0, 20);

       resp.setContentType("image/jpeg");
       resp.setDateHeader("expires", -1);
       resp.setHeader("Cache-Control", "no-cache");
       resp.setHeader("Pragma", "no-cache");

       ImageIO.write(image, "jpeg", resp.getOutputStream());
  }

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

   private String makeNum() {
       Random random = new Random();
       String num  = random.nextInt(9999999) + "";
       StringBuffer sb = new StringBuffer();

       for (int i = 0;i < 7-num.length();i ++) {
           sb.append("0");
      }
       num = sb.toString() + num;
       return num;
  }
}

6.6. 转发重定向

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

7 Cookie和Session

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

package com.xiaofan.servlet;

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.io.PrintWriter;
import java.util.Date;

public class CookieServlet 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;charset=utf-8");

       PrintWriter out = resp.getWriter();

       // 服务器从客户端获取cookie
       Cookie[] cookies = req.getCookies();

       if (cookies != null) {
           out.write("您上一次的访问时间是:");

           for (int i = 0; i < cookies.length; i++) {
               Cookie cookie = cookies[i];
               if (cookie.getName().equals("lastLoginTime")) {
                   // 获取cookie中的值
                   long lastLoginTime = Long.parseLong(cookie.getValue());
                   Date date = new Date(lastLoginTime);
                   out.write(date.toLocaleString());
              }
          }
           
      } else {
           out.write("这是您第一次访问本站!");
      }

       Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");
       resp.addCookie(cookie);
  }

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

7.1. Session(重点)

在这里插入图片描述

 

在这里插入图片描述

package com.xiaofan.servlet;

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

public class SessionServlet 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 {
       // 解决乱码问题
       req.setCharacterEncoding("utf-8");
       resp.setContentType("text/html;charset=utf-8");
       resp.setCharacterEncoding("utf-8");

       // 得到session
       HttpSession session = req.getSession();
       session.setAttribute("name", "小李飞刀");

       // 获取sessionId
       String sessionId = session.getId();

       if (session.isNew()) {
           resp.getWriter().write("session 创建成功!ID:" + sessionId);
      } else {
           resp.getWriter().write("session已经在服务器中!!");
      }



  }
}
package com.xiaofan.servlet;

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

public class SessionServlet1 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 {
       // 解决乱码问题
       req.setCharacterEncoding("utf-8");
       resp.setContentType("text/html;charset=utf-8");
       resp.setCharacterEncoding("utf-8");

       // 得到session
       HttpSession session = req.getSession();

       String name = (String) session.getAttribute("name");

       System.out.println(name);


  }
}
package com.xiaofan.servlet;

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

public class SessionServlet2 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 {
       // 得到session
       HttpSession session = req.getSession();
       session.removeAttribute("name");
       session.invalidate();

  }
}
<!--设置session默认的失效时间-->
<session-config>
   <!--15分钟后session自动失效-->
   <session-timeout>15</session-timeout>
</session-config>

8 Jsp

在这里插入图片描述

在这里插入图片描述

 

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

    *Jstl表达式用到了查一下就可以*

9. MVC三层架构

在这里插入图片描述

在这里插入图片描述

10. Filter

在这里插入图片描述

 

 

posted @   codeSpiderMan  阅读(225)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示