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

歡迎訪問 生活随笔!

生活随笔

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

java

JavaWeb(kuang)

發(fā)布時間:2024/3/12 java 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaWeb(kuang) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

5、Maven

5.1 Maven項目架構管理工具

5.2下載安裝Maven

5.3配置環(huán)境變量

5.4阿里云鏡像

5.5本地倉庫

5.6在IDEA中使用Maven

5.7 創(chuàng)建一個普通的maven項目

?5.8 標記文件夾功能

1.在打鉤的maven項目要自己建立這兩個目錄

2.項目結構配置1

3.項目結構配置2?

?4.maven的target目錄

?5.9 在IDEA中配置Tomcat

1. 點擊加號?

?2.使用本地tomcat

?3.tomcat相關配置?

4.解決警告問題、新建artifacts

?5.虛擬路徑配置?

?6.啟動路徑

?7.啟動成功

?5.10 pom文件

1.pom.xml是Maven的核心配置文件

2.Maven的高級之處在于,他會幫你導入這個JAR包所依賴的其他jar,我只導入一個包,他可以幫我導入這個jar所依賴的其他包

3.maven由于他的約定大于配置,我們之后可以能遇到我們寫的配置文件,無法被導出或者生效的問題,解決方

5.12 IDEA目錄樹

?6、Servlet

6.1、Servlet簡介

6.2、HelloServlet

6.2、HelloServlet

構建一個普通的Maven項目,清理里面的src目錄,以后我們的學習就在這個項目里面建立Moudel;這個空的工程就題Maven主工程;

關于Maven父子工程的理解;

3.Maven環(huán)境優(yōu)化

4.編寫一個Servlet程序

5.編寫Servlet的映射

6.配置Tomcat

?7.啟動測試,生成targer!

6.3、Servlet原理

?6.4、Mapping問題

一個Servlet可以指定一個映射路徑

?? 2.一個servlet可以指定多個映射路徑

3.一個servlet可以指定通用映射路徑

4.默認請求路徑

5.指定一些后綴或者前綴等等…

6.優(yōu)先級問題

6.5、ServletContext

1、共享數(shù)據(jù)

2、獲取初始化參數(shù)

3、請求轉發(fā)

?

4、讀取資源文件servlet讀取peoperties配置文件

6.6、HttpServletResponse(下載文件、驗證碼、重定向)

1、簡單分類

1.負責向瀏覽器發(fā)送數(shù)據(jù)的方法

2. 負責向瀏覽器發(fā)送響應頭的方法

2、下載文件

?? 1. 向瀏覽器輸出消息??? 2.瀏覽器下載文件要設置頭resp.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(fileName,"UTF-8"));

3、驗證碼功能

4.重定向(原理)

6.7、HttpServletRequest



5、Maven

我為什么要學習這個技術?

  • 在Javaweb開發(fā)中,需要使用大量的jar包,我們手動去導入;
  • 如何能夠讓一個東西自動幫我導入和配置這個jar包。
  • 由此,Maven誕生了!

    5.1 Maven項目架構管理工具

    我們目前用來就是方便導入jar包的!
    Maven的核心思想:約定大于配置

    • 有約束,不要去違反。

    Maven會規(guī)定好你該如何去編寫我們Java代碼,必須要按照這個規(guī)范來;

    5.2下載安裝Maven

    官網(wǎng):Maven – Welcome to Apache Maven

    ?下載完成后,解壓即可;

    5.3配置環(huán)境變量

    在我們的系統(tǒng)環(huán)境變量中配置如下配置:

    • M2_HOME maven目錄下的bin目錄
    • MAVEN_HOME maven的目錄
    • 在系統(tǒng)的path中配置%MAVEN_HOME%\bin

    測試Maven是否安裝成功,保證必須配置完畢!

    5.4阿里云鏡像

    • 鏡像:mirrors
    • 作用:加速我們的下載
    • 國內建議使用阿里云的鏡像
    <mirror><id>nexus-aliyun</id> <mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>

    5.5本地倉庫

    在本地的倉庫,遠程倉庫;

    建立一個本地倉庫:localRepository

    <localRepository>D:\qianfeng\maven\apache-maven-3.6.2\maven-repo</localRepository>

    5.6在IDEA中使用Maven

    1.啟動idea

    ?2.創(chuàng)建一個Maven項目

    ?

    3. 等待項目導入初始化完畢

    4.觀察maven倉庫中多了什么東西?

    5.IDEA中的Maven設置

    注意:IDEA項目創(chuàng)建成功后,看一眼Maven的配置

    ?6.到這里,Maven在IDEA中的配置和使用就OK了!

    5.7 創(chuàng)建一個普通的maven項目

    ?這是一個干凈的maven工程

    這個只有在web應用下才會有! 就是之前打上的√

    ?5.8 標記文件夾功能

    1.在打鉤的maven項目要自己建立這兩個目錄

    2.項目結構配置1

    ?

    3.項目結構配置2

    ?

    ?4.maven的target目錄

    ?5.9 在IDEA中配置Tomcat

    1. 點擊加號

    ?2.使用本地tomcat

    ?3.tomcat相關配置

    4.解決警告問題、新建artifacts

    必須要配置:為什么會有這個問題:我們訪問一個網(wǎng)站,需要指定一個文件夾名字;
    ?

    ?5.虛擬路徑配置

    ?6.啟動路徑

    ?7.啟動成功

    ?5.10 pom文件

    1.pom.xml是Maven的核心配置文件

    ?2.pom.xml數(shù)據(jù)結構

    <?xml version="1.0" encoding="UTF-8"?> <!--maven版本和頭文件--> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion> <!--這里是配置我們剛配置的GAV--><groupId>org.example</groupId><artifactId>javaweb-01-maven</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging> <!--package:項目的打包方式jar:java應用war:javaWeb應用 --><name>javaweb-01-maven Maven Webapp</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url> <!--配置--><properties> <!-- 項目的默認構建編碼--><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- 編碼版本--><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target></properties> <!--項目依賴--><dependencies> <!-- 具體依賴jar包配置文件--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency></dependencies><build><finalName>javaweb-01-maven</finalName><pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --><plugins><plugin><artifactId>maven-clean-plugin</artifactId><version>3.1.0</version></plugin><!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --><plugin><artifactId>maven-resources-plugin</artifactId><version>3.0.2</version></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>3.2.2</version></plugin><plugin><artifactId>maven-install-plugin</artifactId><version>2.5.2</version></plugin><plugin><artifactId>maven-deploy-plugin</artifactId><version>2.8.2</version></plugin></plugins></pluginManagement></build></project>

    2.Maven的高級之處在于,他會幫你導入這個JAR包所依賴的其他jar,我只導入一個包,他可以幫我導入這個jar所依賴的其他包

    3.maven由于他的約定大于配置,我們之后可以能遇到我們寫的配置文件,無法被導出或者生效的問題,解決方

    <resources><resource><directory>src/main/resources</directory><excludes><exclude>**/*.properties</exclude><exclude>**/*.xml</exclude></excludes><filtering>false</filtering></resource><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources>

    5.12 IDEA目錄樹

    ?6、Servlet

    6.1、Servlet簡介

    • Servlet就是sun公司開發(fā)動態(tài)web的一門技術
    • Sun在這些APi中提供一個接口叫做:Servlet,如果你想開發(fā)一個Servlet程序,只需要完成兩個小步驟:
      • 編寫一個類,實現(xiàn)Serlet接口
      • 把開發(fā)好java類部署到web服務器中。

    把實現(xiàn)了Servlet接口的Java程序叫做,Servlet

    6.2、HelloServlet

    Serlvet接口Sun公司有兩個默認的實現(xiàn)類:HttpServlet,GenericServled

    6.2、HelloServlet

  • 構建一個普通的Maven項目,清理里面的src目錄,以后我們的學習就在這個項目里面建立Moudel;這個空的工程就題Maven主工程;

  • 關于Maven父子工程的理解;

  • 父項目中會有

    <modules><module>servlet-01</module></modules>

    子項目會有

    <parent><artifactId>javaweb-02-servlet</artifactId><groupId>com.kuang</groupId><version>1.0-SNAPSHOT</version></parent>

    父項目中的java子項目可以直接使用

    3.Maven環(huán)境優(yōu)化

    • 修改web.xml為最新的
    • 將maven的結構搭建完整

    4.編寫一個Servlet程序

  • 編寫一個普通類
  • 實現(xiàn)Servlet接口,這里我們直接繼承HttpServlet
  • 有字符輸出就有字節(jié)輸出
  • public class HelloServlet extends HttpServlet {//由于get或者post只是請求實現(xiàn)的不同的方式,可以相互調用,業(yè)務邏輯都一樣;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//ServletOutputStream outputStream = resp.getOutputStream();PrintWriter writer = resp.getWriter(); //響應流writer.print("Hello,Serlvet");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}}

    5.編寫Servlet的映射

    ????????為什么需要映射:我們寫的是JAVA程序,但是要通過瀏覽器訪問,而瀏覽器需要連接web服務器,所以我們需要再web服務中注冊我們寫的Servlet,還需給他一個瀏覽器能夠訪問的路徑;

    <!--注冊Servlet--><servlet><servlet-name>hello</servlet-name><servlet-class>com.kuang.servlet.HelloServlet</servlet-class></servlet><!--Servlet的請求路徑--><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping>

    6.配置Tomcat

    注意:配置項目發(fā)布的路徑就可以了

    ?

    ?7.啟動測試,生成targer!

    6.3、Servlet原理

    Servlet是由Web服務器調用,web服務器在收到瀏覽器請求之后,會:

    ?6.4、Mapping問題

  • 一個Servlet可以指定一個映射路徑

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

    ?? 2.一個servlet可以指定多個映射路徑

    <servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello2</url-pattern></servlet-mapping><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello3</url-pattern></servlet-mapping><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello4</url-pattern></servlet-mapping><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello5</url-pattern></servlet-mapping>

    3.一個servlet可以指定通用映射路徑

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

    4.默認請求路徑

    <!--默認請求路徑--><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/*</url-pattern></servlet-mapping>

    5.指定一些后綴或者前綴等等…

    <!--可以自定義后綴實現(xiàn)請求映射注意點,*前面不能加項目映射的路徑hello/sajdlkajda.qinjiang--><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>*.qinjiang</url-pattern></servlet-mapping>

    6.優(yōu)先級問題

    ????????指定了固有的映射路徑優(yōu)先級最高,如果找不到就會走默認的處理請求;

    ????????只能以*或/開頭

    <servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping><!--404--><servlet><servlet-name>error</servlet-name><servlet-class>com.kuang.servlet.ErrorServlet</servlet-class></servlet><servlet-mapping><servlet-name>error</servlet-name><url-pattern>/*</url-pattern></servlet-mapping>

    6.5、ServletContext

    ????????web容器在啟動的時候,它會為每個web程序都創(chuàng)建一個對應的ServletContext對象,它代表了當前的web應用;

    1、共享數(shù)據(jù)

    servlet方法說明
    this.getInitParameter()初始化參數(shù)
    this.getServletConfig()?Servlet配置
    this.getServletContext()Servlet上下文
    this.getServletContext().getRealPath("文件")獲取文件路徑

    ?

    public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//this.getInitParameter() 初始化參數(shù)//this.getServletConfig() Servlet配置//this.getServletContext() Servlet上下文ServletContext context = this.getServletContext();String username = "文靜"; //數(shù)據(jù)context.setAttribute("username",username); //將一個數(shù)據(jù)保存在了ServletContext中,名字為:username 。值 username}} public class GetServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext context = this.getServletContext();String username = (String) context.getAttribute("username");resp.setContentType("text/html");resp.setCharacterEncoding("utf-8");resp.getWriter().print("名字"+username);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} } <servlet><servlet-name>hello</servlet-name><servlet-class>com.kuang.servlet.HelloServlet</servlet-class></servlet><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping><servlet><servlet-name>getc</servlet-name><servlet-class>com.kuang.servlet.GetServlet</servlet-class></servlet><servlet-mapping><servlet-name>getc</servlet-name><url-pattern>/getc</url-pattern></servlet-mapping>

    測試訪問結果;

    ServletContext context = this.getServletContext();說明
    context.getInitParameter獲得web.xml配置的初始化參數(shù)<context-param>
    context.getRequestDispatcher("/gp").forward(req,resp);//轉發(fā)的請求路徑、forward實現(xiàn)請求轉發(fā);
    this.getServletContext().getResourceAsStream()讀取資源文件servlet讀取peoperties配置文件

    2、獲取初始化參數(shù)

    <!--配置一些web應用初始化參數(shù)--><context-param><param-name>url</param-name><param-value>jdbc:mysql://localhost:3306/mybatis</param-value></context-param>

    3、請求轉發(fā)

    @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext context = this.getServletContext();System.out.println("進入了ServletDemo04");//RequestDispatcher requestDispatcher = context.getRequestDispatcher("/gp"); //轉發(fā)的請求路徑//requestDispatcher.forward(req,resp); //調用forward實現(xiàn)請求轉發(fā);context.getRequestDispatcher("/gp").forward(req,resp); }

    4、讀取資源文件servlet讀取peoperties配置文件

    Properties:根據(jù)target目錄那,要 / 開頭

    • 在java目錄下新建properties
    • 在resources目錄下新建properties

    發(fā)現(xiàn):都被打包到了同一個路徑下:classes,我們俗稱這個路徑為classpath:類路徑
    思路:需要一個文件流

    username=root12312 password=zxczxczxc public class ServletDemo05 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/com/kuang/servlet/aa.properties");Properties prop = new Properties();prop.load(is);String user = prop.getProperty("username");String pwd = prop.getProperty("password");resp.getWriter().print(user+":"+pwd);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }

    訪問測試即可ok;

    6.6、HttpServletResponse(下載文件、驗證碼、重定向)

    web服務器接收到客戶端的http請求,針對這個請求,分別創(chuàng)建一個代表請求的HttpServletRequest對象,代表響應的一個HttpServletResponse;

    • 如果要獲取客戶端請求過來的參數(shù):找HttpServletRequest
    • 如果要給客戶端響應一些信息:找HttpServletResponse

      1、簡單分類

    1.負責向瀏覽器發(fā)送數(shù)據(jù)的方法

    servletOutputstream getOutputstream() throws IOException;Printwriter getwriter() throws IOException;

    2. 負責向瀏覽器發(fā)送響應頭的方法

    void setCharacterEncoding(String var1);//常用 void setContentLength(int var1); void setContentLengthLong(long var1); void setContentType(String var1);//常用 void setDateHeader(String varl,long var2) void addDateHeader(String var1,long var2) void setHeader(String var1,String var2); void addHeader(String var1,String var2); void setIntHeader(String var1,int var2); void addIntHeader(String varl,int var2);

    響應的狀態(tài)碼

    2、下載文件

    ?? 1. 向瀏覽器輸出消息
    ??? 2.瀏覽器下載文件要設置頭resp.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(fileName,"UTF-8"));

    • ??????? 要獲取下載文件的路徑
    • ??????? 下載的文件名是啥?
    • ??????? 設置想辦法讓瀏覽器能夠支持下載我們需要的東西
    • ??????? 獲取下載文件的輸入流
    • ??????? 創(chuàng)建緩沖區(qū)
    • ??????? 獲取OutputStream對象
    • ??????? 將FileOutputStream流寫入到bufer緩沖區(qū)
    • ??????? 使用OutputStream將緩沖區(qū)中的數(shù)據(jù)輸出到客戶端!
    @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 1. 要獲取下載文件的路徑String realPath = "F:\\班級管理\\西開【19525】\\2、代碼\\JavaWeb\\javaweb-02-servlet\\response\\target\\classes\\秦疆.png";System.out.println("下載文件的路徑:"+realPath);// 2. 下載的文件名是啥?String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);// 3. 設置想辦法讓瀏覽器能夠支持(Content-Disposition)下載我們需要的東西,中文文件名URLEncoder.encode編碼,否則有可能亂碼resp.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(fileName,"UTF-8"));// 4. 獲取下載文件的輸入流FileInputStream in = new FileInputStream(realPath);// 5. 創(chuàng)建緩沖區(qū)int len = 0;byte[] buffer = new byte[1024];// 6. 獲取OutputStream對象ServletOutputStream out = resp.getOutputStream();// 7. 將FileOutputStream流寫入到buffer緩沖區(qū),使用OutputStream將緩沖區(qū)中的數(shù)據(jù)輸出到客戶端!while ((len=in.read(buffer))>0){out.write(buffer,0,len);}in.close();out.close(); }

    3、驗證碼功能

    驗證怎么來的?

    • 前端實現(xiàn)
    • 后端實現(xiàn),需要用到Java的圖片類,生產一個圖片
    package com.kuang.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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//如何讓瀏覽器3秒自動刷新一次;resp.setHeader("refresh","3");//在內存中創(chuàng)建一個圖片BufferedImage image = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);//得到圖片Graphics2D g = (Graphics2D) image.getGraphics(); //筆//設置圖片的背景顏色g.setColor(Color.white);g.fillRect(0,0,80,20);//給圖片寫數(shù)據(jù)g.setColor(Color.BLUE);g.setFont(new Font(null,Font.BOLD,20));g.drawString(makeNum(),0,20);//告訴瀏覽器,這個請求用圖片的方式打開resp.setContentType("image/jpeg");//網(wǎng)站存在緩存,不讓瀏覽器緩存resp.setDateHeader("expires",-1);resp.setHeader("Cache-Control","no-cache");resp.setHeader("Pragma","no-cache");//把圖片寫給瀏覽器ImageIO.write(image,"jpg", resp.getOutputStream());}//生成隨機數(shù)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;}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} } <servlet><servlet-name>ImageServlet</servlet-name><servlet-class>com.kuang.servlet.ImageServlet</servlet-class> </servlet> <servlet-mapping><servlet-name>Imageservlet</servlet-name><url-pattern>/img</url-pattern> </servlet-mapping>

    4.重定向(原理)

    常見場景:

    • 用戶登錄
    void sendRedirect(String var1) throws IOException;

    測試:

    @override protected void doGet(HttpservletRequest req, HttpservletResponse resp) throws ServletException, IOException {resp. sendRedirect("/r/img");//重定向/*resp. setHeader("Location","/r/img");resp. setstatus (302);* }

    ?index.jsp

    <html><body><h2>Hel1o World!</h2>《%--這里超交的路徑,需要尋找到項目的路徑--%><%--${pageContext. request, contextPath}代表當前的項目--%><form action="${pageContext. request.contextPath}/login" method="get">用戶名: <input type="text" name="username"> <br>密碼: <input type="password" name="password"> <br><input type="submit"></form></body> </html>

    RequestTest.java

    public class RequestTest extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//處理方求String username = req.getParameter( s: "username");String password rea.getParameter( s: "password");System.out.println(username+":"+password);resp.sendRedirect(s: "/r/success.jsp"); }

    重定向頁面success.jsp

    <%@ page contentType="text/html; charset=UTF-8" language="java" %> <html><head><title>Title</title></head><body><h1>success</h1></body> </html>

    web.xml配置

    <servlet><servlet-name>requset</servlet-name><servlet-class>com. kuang. servlet. RequestTest</servlet-class></servlet><servlet-mapping><servlet-name>requset</servlet-name><url-pattern>/login</url-pattern></servlet-mapping>

    導入依賴的jar包

    <dependencies><!-- https://mvnrepository. com/artifact/javax. servLet/javax. servlet-opi --><dependency><groupld>javax.servlet</grouptd><artifactId>javax. servlet-api</artifactId><version>4.0.1</version></dependency><!-- https://mvnrepository.com/artifact/javax. servLet.jsp/javax. servLet.jsp-opi --><dependency><groupId>javax.servlet.jsp</groupld><artifactId>javax. servlet.jsp-api</artifactId><version>2.3.3</version></dependency></dependencies></project>

    6.7、HttpServletRequest

    ????????HttpServletRequest代表客戶端的請求,用戶通過Http協(xié)議訪問服務器, HTTP請求中的所有信息會被封裝到HttpServletRequest,通過這個HttpServletRequest的方法,獲得客戶端的所有信息;

    方法說明
    req.getParameter通過參數(shù)獲得value
    req.getParameterValues通過參數(shù)獲得多個values值CheckBox
    req.getRequestDispatcher("/success.jsp").forward(req,resp);請求轉發(fā),這里的/表示當前項目了,不用加rep.getContextPath(),重定向就需要
    req.getContextPage()當前項目名,tomcat里配的路徑
    req.getServletPath()web映射配置的路徑

    自己創(chuàng)建類,且需要繼承HttpServlet類

    @Override protected void doGet(HttpservletRequest req. HttpservletResponse resp) throws ServletException, IOException {req. setcharacterEncoding("utf-8");resp.setcharacterEncoding("utf-8");String username = req.getParameter("username");String password = req.getParameter("password");String[] hobbys = req.getParameterValues("hobbys");System.out.println("==========");//后臺接收中文亂碼問題System. out.println(username);System. out.println(password);System. out.println(Arrays.tostring(hobbys));System. out.println("============");system. out.println(req.getContextPath());//通過請求轉發(fā)//這里的/代表當前的web應用req.getRequestDispatcher("/success.jsp").forward(req,resp); }

    14、JDBC

    1.什么是JDBC : Java連接數(shù)據(jù)庫

    ?

    2.需要jar包的支持:

    • java.sql
    • javax.sql
    • mysql-conneter-java… 連接驅動(必須要導入)

    3.實驗環(huán)境搭建

    CREATE TABLE users(id INT PRIMARY KEY,`name` VARCHAR(40),`password` VARCHAR(40),email VARCHAR(60),birthday DATE );INSERT INTO users(id,`name`,`password`,email,birthday) VALUES(1,'張三','123456','zs@qq.com','2000-01-01'); INSERT INTO users(id,`name`,`password`,email,birthday) VALUES(2,'李四','123456','ls@qq.com','2000-01-01'); INSERT INTO users(id,`name`,`password`,email,birthday) VALUES(3,'王五','123456','ww@qq.com','2000-01-01');SELECT * FROM users;

    4.導入數(shù)據(jù)庫依賴

    <!--mysql的驅動--> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version> </dependency>

    5.JDBC 固定步驟:

  • 加載驅動
  • 連接數(shù)據(jù)庫,代表數(shù)據(jù)庫
  • 向數(shù)據(jù)庫發(fā)送SQL的對象Statement : CRUD
  • 編寫SQL (根據(jù)業(yè)務,不同的SQL)
  • 執(zhí)行SQL
  • 關閉連接(先開的后關)
  • public class TestJdbc {public static void main(String[] args) throws ClassNotFoundException, SQLException {//配置信息//useUnicode=true&characterEncoding=utf-8 解決中文亂碼String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";String username = "root";String password = "123456";//1.加載驅動Class.forName("com.mysql.jdbc.Driver");//2.連接數(shù)據(jù)庫,代表數(shù)據(jù)庫Connection connection = DriverManager.getConnection(url, username, password);//3.向數(shù)據(jù)庫發(fā)送SQL的對象Statement,PreparedStatement : CRUDStatement statement = connection.createStatement();//4.編寫SQLString sql = "select * from users";//5.執(zhí)行查詢SQL,返回一個 ResultSet : 結果集ResultSet rs = statement.executeQuery(sql);while (rs.next()){System.out.println("id="+rs.getObject("id"));System.out.println("name="+rs.getObject("name"));System.out.println("password="+rs.getObject("password"));System.out.println("email="+rs.getObject("email"));System.out.println("birthday="+rs.getObject("birthday"));}//6.關閉連接,釋放資源(一定要做) 先開后關rs.close();statement.close();connection.close();} }

    6.預編譯SQL

    public class TestJDBC2 {public static void main(String[] args) throws Exception {//配置信息//useUnicode=true&characterEncoding=utf-8 解決中文亂碼String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";String username = "root";String password = "123456";//1.加載驅動Class.forName("com.mysql.jdbc.Driver");//2.連接數(shù)據(jù)庫,代表數(shù)據(jù)庫Connection connection = DriverManager.getConnection(url, username, password);//3.編寫SQLString sql = "insert into users(id, name, password, email, birthday) values (?,?,?,?,?);";//4.預編譯PreparedStatement preparedStatement = connection.prepareStatement(sql);preparedStatement.setInt(1,2);//給第一個占位符? 的值賦值為1;preparedStatement.setString(2,"狂神說Java");//給第二個占位符? 的值賦值為狂神說Java;preparedStatement.setString(3,"123456");//給第三個占位符? 的值賦值為123456;preparedStatement.setString(4,"24736743@qq.com");//給第四個占位符? 的值賦值為1;preparedStatement.setDate(5,new Date(new java.util.Date().getTime()));//給第五個占位符? 的值賦值為new Date(new java.util.Date().getTime());//5.執(zhí)行SQLint i = preparedStatement.executeUpdate();if (i>0){System.out.println("插入成功@");}//6.關閉連接,釋放資源(一定要做) 先開后關preparedStatement.close();connection.close();} }

    7.事務

    要么都成功,要么都失敗!

    ACID原則:保證數(shù)據(jù)的安全。

    開啟事務
    事務提交? commit()
    事務回滾? rollback()
    關閉事務

    轉賬:
    A:1000
    B:1000
    ?? ?
    A(900)?? --100-->?? B(1100)

    8.Junit單元測試

    依賴

    <!--單元測試--> <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version> </dependency>

    ?簡單使用

    @Test注解只有在方法上有效,只要加了這個注解的方法,就可以直接運行!

    @Test public void test(){System.out.println("Hello"); }

    ?失敗的時候是紅色:

    ?9.搭建一個環(huán)境

    CREATE TABLE account(id INT PRIMARY KEY AUTO_INCREMENT,`name` VARCHAR(40),money FLOAT );INSERT INTO account(`name`,money) VALUES('A',1000); INSERT INTO account(`name`,money) VALUES('B',1000); INSERT INTO account(`name`,money) VALUES('C',1000); @Testpublic void test() {//配置信息//useUnicode=true&characterEncoding=utf-8 解決中文亂碼String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";String username = "root";String password = "123456";Connection connection = null;//1.加載驅動try {Class.forName("com.mysql.jdbc.Driver");//2.連接數(shù)據(jù)庫,代表數(shù)據(jù)庫connection = DriverManager.getConnection(url, username, password);//3.通知數(shù)據(jù)庫開啟事務,false 開啟connection.setAutoCommit(false);String sql = "update account set money = money-100 where name = 'A'";connection.prepareStatement(sql).executeUpdate();//制造錯誤//int i = 1/0;String sql2 = "update account set money = money+100 where name = 'B'";connection.prepareStatement(sql2).executeUpdate();connection.commit();//以上兩條SQL都執(zhí)行成功了,就提交事務!System.out.println("success");} catch (Exception e) {try {//如果出現(xiàn)異常,就通知數(shù)據(jù)庫回滾事務connection.rollback();} catch (SQLException e1) {e1.printStackTrace();}e.printStackTrace();}finally {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}

    9、JavaBean

    實體類

    JavaBean有特定的寫法:

    • 必須要有一個無參構造
    • 屬性必須私有化
    • 必須有對應的get/set方法;

    一般用來和數(shù)據(jù)庫的字段做映射 ORM;

    ORM :對象關系映射

    • 表—>類
    • 字段–>屬性
    • 行記錄---->對象

    10、MVC模式和三層架構

    MVC 是一種分層開發(fā)的模式,其中:

    • M:Model,業(yè)務模型,處理業(yè)務

    • V:View,視圖,界面展示

    • C:Controller,控制器,處理請求,調用模型和視圖

    ?控制器(serlvlet)用來接收瀏覽器發(fā)送過來的請求,控制器調用模型(JavaBean)來獲取數(shù)據(jù),比如從數(shù)據(jù)庫查詢數(shù)據(jù);控制器獲取到數(shù)據(jù)后再交由視圖(JSP)進行數(shù)據(jù)展示。

    MVC 好處:

    • 職責單一,互不影響。每個角色做它自己的事,各司其職。

    • 有利于分工協(xié)作。

    • 有利于組件重用

    10.1、以前的架構

    用戶直接訪問控制層,控制層就可以直接操作數(shù)據(jù)庫;

    servlet--CRUD-->數(shù)據(jù)庫
    弊端:程序十分臃腫,不利于維護 ?
    servlet的代碼中:處理請求、響應、視圖跳轉、處理JDBC、處理業(yè)務代碼、處理邏輯代碼

    架構:沒有什么是加一層解決不了的!
    ????????????????程序猿調用
    ????????????????????????↑
    ????????JDBC (實現(xiàn)該接口)
    ????????????????????????↑
    Mysql Oracle SqlServer ....(不同廠商)

    10.2、MVC三層架構

    • ?數(shù)據(jù)訪問層:對數(shù)據(jù)庫的CRUD基本操作
    • 業(yè)務邏輯層:對業(yè)務邏輯進行封裝,組合數(shù)據(jù)訪問層層中基本功能,形成復雜的業(yè)務邏輯功能。例如 注冊業(yè)務功能 ,我們會先調用 數(shù)據(jù)訪問層 的 selectByName() 方法判斷該用戶名是否存在,如果不存在再調用 數(shù)據(jù)訪問層 的 insert() 方法進行數(shù)據(jù)的添加操作
    • 表現(xiàn)層:接收請求,封裝數(shù)據(jù),調用業(yè)務邏輯層,響應數(shù)據(jù)

    10.3 MVC 和 三層架構

    ?MVC 模式 中的 C(控制器)和 V(視圖)就是 三層架構 中的表現(xiàn)層,而 MVC 模式 中的 M(模型)就是 三層架構 中的 業(yè)務邏輯層 和 數(shù)據(jù)訪問層。

    可以將 MVC 模式 理解成是一個大的概念,而 三層架構 是對 MVC 模式 實現(xiàn)架構的思想。 那么我們以后按照要求將不同層的代碼寫在不同的包下,每一層里功能職責做到單一,將來如果將表現(xiàn)層的技術換掉,而業(yè)務邏輯層和數(shù)據(jù)訪問層的代碼不需要發(fā)生變化。

    總結

    以上是生活随笔為你收集整理的JavaWeb(kuang)的全部內容,希望文章能夠幫你解決所遇到的問題。

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