日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

尚硅谷最新版JavaWeb全套教程,java web零基础入门完整版(四)

發布時間:2025/3/19 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 尚硅谷最新版JavaWeb全套教程,java web零基础入门完整版(四) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文件的上傳和下載

文件上傳的介紹

<?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"><servlet><servlet-name>UploadServlet</servlet-name><servlet-class>com.atguigu.servlet.UploadServlet</servlet-class></servlet><servlet-mapping><servlet-name>UploadServlet</servlet-name><url-pattern>/uploadServlet</url-pattern></servlet-mapping> </web-app> package com.atguigu.servlet;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 UploadServlet extends HttpServlet {/*** 用來處理文件生成* @param req* @param resp* @throws ServletException* @throws IOException*/@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("文件上傳過來了");} } <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>Title</title> </head> <body><%-- form:post --%><form action="http://localhost:8080/jstl/uploadServlet" method="post" enctype="multipart/form-data">用戶名 :<input type="text" name="username"> <br>頭像 :<input type="file" name="photo"> <br><input type="submit" value="上傳"></form> </body> </html>


上傳的http協議介紹



  • 以流的形式上傳和接收
  • 所以如果用getPraramter沒有用
package com.atguigu.servlet;import javax.servlet.ServletException; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;public class UploadServlet extends HttpServlet {/*** 用來處理文件生成* @param req* @param resp* @throws ServletException* @throws IOException*/@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletInputStream inputStream = req.getInputStream();byte[] buffer = new byte[1024000];int read = inputStream.read(buffer);System.out.println(new String(buffer, 0, read));} }

上傳合用到的類和方法介紹



使用fileupload解析上傳的數據


選中整行以后 command + option + t 快捷鍵

然后選擇 try catch,然后手動改成Exception

package com.atguigu.servlet;import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload;import javax.servlet.ServletException; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.util.List;public class UploadServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 1、先判斷上傳的數據是否為多段數據(只有是多段數據,才是文件上傳的)if (ServletFileUpload.isMultipartContent((req))) {// 創建FileItemFactory工廠實現類FileItemFactory fileItemFactory = new DiskFileItemFactory();// 創建用于解析上傳數據的工具類 ServletFileUpload類ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);// 解析上傳的數據,得到每一個表單項FileItemtry {List<FileItem> list = servletFileUpload.parseRequest(req);// 循環判斷,每一個表單項,是普通類型,還是上傳的文件for (FileItem fileItem : list) {if (fileItem.isFormField()) {// 普通表單項System.out.println("表單項的name屬性值:" + fileItem.getFieldName());// 參數UTF-8,解決亂碼問題System.out.println("表單的value屬性值:" + fileItem.getString("UTF-8"));} else {// 上傳的文件System.out.println("表單項的name屬性值:" + fileItem.getFieldName());System.out.println("上傳的文件名:" + fileItem.getName());// fileItem.write((new File(("e:\\" + fileItem.getName()))));}}} catch (Exception e) {e.printStackTrace();}}} }

文件下載的實現


package com.atguigu.servlet;import org.apache.commons.io.IOUtils;import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream;public class Download extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 1、獲取要下載的文件名String downloadFileName = "1.png";// 2、讀取要下載的文件內容(通過ServletContext對象可以讀取)ServletContext servletContext = getServletContext();// 獲取要下載的文件類型String mimeType = servletContext.getMimeType("/file/" + downloadFileName);System.out.println("下載的文件類型:" + mimeType);// 4、在回傳前,通過響應頭告訴客戶端返回的數據類型resp.setContentType(mimeType);// 5、還要告訴客戶端收到的數據是用于下載使用(還是使用響應頭)// Content-Disposition響應頭,表示收到的數據怎么處理// attacjment表示附件,表示下載使用// filename= 表示指定下載的文件名resp.setHeader("Content-Disposition", "attachment;filename=" + downloadFileName);/*** /斜杠被服務器解析表示地址為http://ip:port/工程名/ 映射 到代碼的web目錄*/InputStream resourceAsStream = servletContext.getResourceAsStream("/file/" + downloadFileName);// 獲取響應的輸出流ServletOutputStream outputStream = resp.getOutputStream();// 3、把下載的文件內容回傳給客戶端// 讀取輸入流中全部的數據,復制給輸出流,輸出給客戶端IOUtils.copy(resourceAsStream, outputStream);} }



輸入后敲回車,直接就下載文件了

使用URLEncoder解決谷歌和IE瀏覽器中文下載名亂碼問題


可以和原文件名不同,下載下來顯示的名稱就是filename
如果filename=中國.jpg,文件名會無法識別
因此,要對中文進行URL編碼

Base64編解碼操作

如果是火狐瀏覽器不支持上面這種方式

發現這個類和URLEncode類不同,不是靜態方法,因此要先new

Base64編解碼操作 解決 火狐瀏覽器的附近中文名問題


將原先那個setHeader換成resp.setHeader("Content-Disposition", "attachment; filename==?UTF-8?B?" + new BASE64Encoder().encode("中國.jpg".getBytes("UTF-8")) + "?=");

使用User-Agent請求頭判斷,動態切換不同的方案解決所有瀏覽器附件中文亂碼問題


書城項目

  • command + shift + R 可以查找替換(可以先選中目錄)

動態的base標簽值

表單提交失敗的錯誤回顯


合并LoginServlet和RegistServlet程序為UserServlet程序



使用反射優化大量else if代碼

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String action = req.getParameter("action"); try {// 獲取 action 業務鑒別字符串,獲取相應的業務 方法反射對象 Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class); // System.out.println(method); // 調用目標業務 方法 method.invoke(this, req, resp); } catch (Exception e) {e.printStackTrace(); } }

抽取 BaseServlet 程序

public abstract class BaseServlet extends HttpServlet { protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String action = req.getParameter("action"); try {// 獲取 action 業務鑒別字符串,獲取相應的業務 方法反射對象 Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class); // System.out.println(method); // 調用目標業務 方法 method.invoke(this, req, resp); } catch (Exception e) { e.printStackTrace(); } } }

數據的封裝和抽取 BeanUtils 的使用

  • command + option + t 選擇代碼的環繞方式

MVC概念


Cookie

什么是Cookie

Cookie的創建

<!-- Cookie.html --> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="pragma" content="no-cache" /> <meta http-equiv="cache-control" content="no-cache" /> <meta http-equiv="Expires" content="0" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Cookie</title><!-- 因為是html頁面 --><base href="http://localhost:8080/cookie/"> <style type="text/css">ul li {list-style: none;}</style> </head> <body><iframe name="target" width="500" height="500" style="float: left;"></iframe><div style="float: left;"><ul><li><a href="cookieServlet?action=createCookie" target="target">Cookie的創建</a></li><li><a href="cookieServlet?action=getCookie" target="target">Cookie的獲取</a></li><li><a href="cookieServlet?action=updateCookie" target="target">Cookie值的修改</a></li><li>Cookie的存活周期</li><li><ul><li><a href="cookieServlet?action=defaultLife" target="target">Cookie的默認存活時間(會話)</a></li><li><a href="cookieServlet?action=deleteNow" target="target">Cookie立即刪除</a></li><li><a href="cookieServlet?action=life3600" target="target">Cookie存活3600秒(1小時)</a></li></ul></li><li><a href="cookieServlet?action=testPath" target="target">Cookie的路徑設置</a></li><li><a href="" target="target">Cookie的用戶免登錄練習</a></li></ul></div> </body> </html> package com.atguigu.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.lang.reflect.Method;public abstract class BaseServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 解決post請求中文亂碼問題// 一定要在獲取請求參數之前調用才有效req.setCharacterEncoding("UTF-8");// 解決響應中文亂碼問題resp.setContentType("text/html; charset=UTF-8");String action = req.getParameter("action");try {// 獲取action業務鑒別字符串,獲取相應的業務 方法反射對象Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class); // System.out.println(method);// 調用目標業務 方法method.invoke(this, req, resp);} catch (Exception e) {e.printStackTrace();}}} package com.atguigu.servlet;import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;public class CookieServlet extends BaseServlet{protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 1、創建Cookie對象Cookie cookie = new Cookie("key1", "value1");// 2、通知客戶端保存Cookieresp.addCookie(cookie);resp.getWriter().write("Cookie創建成功");} }


Cookie的獲取

package com.atguigu.servlet;import com.example.Cookie.CookieUtils;import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;public class CookieServlet extends BaseServlet{protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 1、創建Cookie對象Cookie cookie = new Cookie("key1", "value1");// 2、通知客戶端保存Cookieresp.addCookie(cookie);resp.getWriter().write("Cookie創建成功");}protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie[] cookies = req.getCookies();// getName方法// getValue方法for (Cookie cookie : cookies) {resp.getWriter().write("Cookie[" + cookie.getName() + " = " + cookie.getValue() + "] <br>");}Cookie iWantCookie = CookieUtils.findCookie("key1", cookies);if (iWantCookie != null) {resp.getWriter().write("找到了需要的Cookie");}} }

package com.atguigu.util;import javax.servlet.http.Cookie;public class CookieUtils {/*** 查找指定名稱的cookie對象* @param name* @param cookies* @return*/public static Cookie findCookie(String name, Cookie[] cookies) {if (name == null || cookies == null || cookies.length == 0) {return null;}for (Cookie cookie : cookies) {if (name.equals(cookie.getName())) {return cookie;}}return null;} } <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="pragma" content="no-cache" /> <meta http-equiv="cache-control" content="no-cache" /> <meta http-equiv="Expires" content="0" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Cookie</title><!-- 因為是html頁面 --><base href="http://localhost:8080/cookie/"> <style type="text/css">ul li {list-style: none;}</style> </head> <body><iframe name="target" width="500" height="500" style="float: left;"></iframe><div style="float: left;"><ul><li><a href="cookieServlet?action=createCookie" target="target">Cookie的創建</a></li><li><a href="cookieServlet?action=getCookie" target="target">Cookie的獲取</a></li><li><a href="cookieServlet?action=updateCookie" target="target">Cookie值的修改</a></li><li>Cookie的存活周期</li><li><ul><li><a href="cookieServlet?action=defaultLife" target="target">Cookie的默認存活時間(會話)</a></li><li><a href="cookieServlet?action=deleteNow" target="target">Cookie立即刪除</a></li><li><a href="cookieServlet?action=life3600" target="target">Cookie存活3600秒(1小時)</a></li></ul></li><li><a href="cookieServlet?action=testPath" target="target">Cookie的路徑設置</a></li><li><a href="" target="target">Cookie的用戶免登錄練習</a></li></ul></div> </body> </html><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="pragma" content="no-cache" /> <meta http-equiv="cache-control" content="no-cache" /> <meta http-equiv="Expires" content="0" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Cookie</title><!-- 因為是html頁面 --><base href="http://localhost:8080/cookie/"> <style type="text/css">ul li {list-style: none;}</style> </head> <body><iframe name="target" width="500" height="500" style="float: left;"></iframe><div style="float: left;"><ul><li><a href="cookieServlet?action=createCookie" target="target">Cookie的創建</a></li><li><a href="cookieServlet?action=getCookie" target="target">Cookie的獲取</a></li><li><a href="cookieServlet?action=updateCookie" target="target">Cookie值的修改</a></li><li>Cookie的存活周期</li><li><ul><li><a href="cookieServlet?action=defaultLife" target="target">Cookie的默認存活時間(會話)</a></li><li><a href="cookieServlet?action=deleteNow" target="target">Cookie立即刪除</a></li><li><a href="cookieServlet?action=life3600" target="target">Cookie存活3600秒(1小時)</a></li></ul></li><li><a href="cookieServlet?action=testPath" target="target">Cookie的路徑設置</a></li><li><a href="" target="target">Cookie的用戶免登錄練習</a></li></ul></div> </body> </html>

Cookie值的修改

protected void updateCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 方案一 : // 1、先創建一個要修改的同名的Cookie對象 // 2、在構造器,同時賦于新的cookie值Cookie cookie = new Cookie("key1", "newValue1"); // 3、調用resp.addCookie(cookie); ;通知 客戶端 保存修改resp.addCookie(cookie);resp.getWriter().write("key1的cookie已經修改好了");}

protected void updateCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie cookie = CookieUtils.findCookie("key1", req.getCookies());if (cookie != null) {cookie.setValue("newValue1");resp.addCookie(cookie);}}

  • 中文也是

谷歌和火狐瀏覽器如何查看Cookie


Cookie的生命設置

protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie cookie = new Cookie("defaultLife", "defaultLife");cookie.setMaxAge(-1); // 設置存活時間resp.addCookie(cookie);} protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 先找到要刪除的cookie對象Cookie cookie = CookieUtils.findCookie(("key1"), req.getCookies());if (cookie != null) {// 調用setMaxAge(0);cookie.setMaxAge(0); // 表示馬上刪除,都不需要等待瀏覽器關閉// 調用addCookieresp.addCookie(cookie);resp.getWriter().write("key1的cookie已經被刪除");}}

Cookie 有效路徑 Path 的設置

protected void testPath(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie cookie = new Cookie("path1", "path1");// getContextPath 得到工程路徑cookie.setPath( req.getContextPath() + "/abc" ); // 工程路徑/abcresp.addCookie(cookie);resp.getWriter().write("創建了一個帶有Path路徑的Cookie");}

Cookie 練習—免輸入用戶名登錄

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>login.jsp</title> </head> <body><form action="http://localhost:8080/cookie/loginServlet" method="get">用戶名:<input type="text" name="username" value="${ cookie.username.value }"> <br>密碼:<input type="password" name="password"> <br><input type="submit" value="登陸"></form> </body> </html> package com.atguigu.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;public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");String password = req.getParameter("password");if ("wzg168".equals(username) && "123456".equals(password)) {Cookie cookie = new Cookie("username", username);cookie.setMaxAge(60 * 60 * 24 * 7); // 當前Cookie一周內有效resp.addCookie(cookie);System.out.println("登陸成功");} else {System.out.println("登陸失敗");}} }

  • 在登陸成功一次,且在cookie消亡時間之前,再次訪問login.jsp用戶名會自動顯示
與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的尚硅谷最新版JavaWeb全套教程,java web零基础入门完整版(四)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美激情自拍偷拍 | 日日摸夜夜添夜夜添高潮喷水 | 欧美乱色 | 亲子乱子伦xxxx | xxxxx国产| 久久久久久五月天 | 国产伦精品一区二区三区高清版禁 | 青青青青草 | 韩国精品视频在线观看 | 成人免费福利视频 | 污污视频在线播放 | 国产不卡视频一区二区三区 | 天天插天天插 | 玖玖视频国产 | 97精品超碰一区二区三区 | 熟妇人妻久久中文字幕 | 丝袜五月天 | 国产91视频在线观看 | 蜜桃传媒一区二区亚洲av | 黄片毛片在线看 | 女人扒开屁股让我添 | 蜜臀久久99精品久久久久久宅男 | 91亚洲精品久久久蜜桃网站 | 中文字幕午夜 | 国产在线最新 | 天天伊人网 | 国产精品久久久久久妇女6080 | av电影免费在线播放 | 国产精品视频不卡 | 狠狠干导航 | 黄色中文字幕 | 羞羞动态图 | 91传媒入口| 色偷偷免费 | 男女激情啪啪 | 成人深夜网站 | 欧美亚洲在线 | 色综合av在线 | 三级小说视频 | 欧美巨乳美女 | 在线色站| 国产成人精品一区二区三区在线 | 麻豆久久精品 | 伊人春色影院 | av丝袜在线 | 免费日韩av| 69xav | 天堂…中文在线最新版在线 | 91国产丝袜播放在线 | 日本欧美一区二区三区不卡视频 | 99视频网站 | 午夜影院久久久 | 女生扒开腿让男生操 | 福利综合网 | 91色交视频| 中文字幕在线字幕中文 | 天天尻逼 | 欧美变态口味重另类 | 日本69视频 | 999xxxxx| 非洲黄色大片 | 五月在线 | 精品亚洲aⅴ无码一区二区三区 | 18精品爽国产白嫩精品 | 三级成人网 | 婷婷在线免费观看 | 91丨九色丨国产在线 | av成人在线播放 | 精品国产欧美 | 亚洲av日韩av高潮潮喷无码 | 日韩久久一区 | 一区二区三区欧美日韩 | 亚洲hhh| 天天色综合1 | 久久性色av| 国产成人精品一区二区三区视频 | 特大黑人巨交性xxxx | 电车痴汉在线观看 | 日韩福利视频在线观看 | 中文在线一区二区三区 | 天天草天天干 | 免费成人在线观看视频 | 久久精品国产免费看久久精品 | 欧美精品h | 影音先锋成人资源 | 黄色日批网站 | 国产精选久久久 | 精品人妻一区二区三区日产乱码卜 | 91中文字幕永久在线 | 欧美久久久久久久久久久久久久 | 神马午夜av | 摸一摸操一操 | 另类小说色综合 | av黄色影院 | 中文字幕第28页 | 国产欧美日韩综合精品一区二区三区 | 久久久久久久人妻无码中文字幕爆 | 可以直接看的无码av | 欧美成人一区二区三区片免费 |