1. 程式人生 > 其它 >【Javaweb】----狂神筆記(僅作為學習記錄使用)

【Javaweb】----狂神筆記(僅作為學習記錄使用)

1. 基本概念

2. Web伺服器

3. Tomcat

# 4. Http

4.3. Http請求

4.4. Http響應

5. Maven

https://github.com/fanjianhai/kuangshen/tree/master/0.IDEA常用配置記錄

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