Crazy God - JavaWeb notes

JavaWeb

1. Basic concepts

1.1. Frontier

Java Web

  • Web, the meaning of web page, www.baidu.com

  • Static web

    • HTML,css
    • The data provided to everyone will never change!
  • Dynamic web

    • Taobao, almost all websites;
    • The data provided to everyone will always change, and everyone will see different information at different times and places!
    • Technology stack: servlet / JSP, ASP, PHP

In Java, the technology of dynamic web resource development is collectively referred to as JavaWeb;

1.2.Web application

web application: a program that can provide browser access;

  • a.html, b.html,... Multiple web resources, which can be accessed by the outside world and provide services to the outside world;

  • Any page or resource you can access exists on a computer in a corner of the world.

  • URL

  • This unified web resource will be placed in the same folder, Web Application > Tomcat: server

  • A web application consists of many parts (static web, dynamic web)

    • html,css,js
    • jsp,servlet
    • Java program
    • jar package
    • Configuration files (Properties)

After the Web application is written, if you want to provide external access, you need a server for unified management;

1.3. Static web

  • *. htm, *. html these are the background of network members. If these Dongsi exist on the server all the time, we can read them directly and need the network;

  • Disadvantages of static web
    • The Web page cannot be dynamically updated. All users see the same page
      • Rotation chart, click special effect: pseudo dynamic
      • JavaScript [in actual development, it is used most]
      • VBScript
    • It cannot interact with the database (data cannot be persisted, and users cannot interact)

1.4 dynamic web

The page will be displayed dynamically, "the display effect of web page varies from person to person"

Disadvantages:

  • There is an error in the dynamic web resources added to the server. We need to rewrite our background program and publish it again;
    • Shutdown maintenance

advantage:

  • Web pages can be updated dynamically, and all users see different pages

  • It can interact with the database (data persistence: registration, product information, user information...)

Novice Village: - devil training (analyze the principle and see the source code) - > PK field

2. web server

2.1 technical explanation

ASP:

  • Microsoft: ASP is the first popular in China;
  • Embedded VB script in HTML, ASP+COM;
  • In ASP development, there are several lines of business code in a page, and the page is extremely chaotic
  • High maintenance cost!
  • C#
  • IIS

php:

  • PHP has fast development speed, powerful functions, cross platform, and simple code (70%, WP)
  • Unable to carry large traffic (limitations)

jSP/Servlet:
B/S: browse and server

C/S: client and server

  • B/S architecture mainly promoted by sun company
  • Based on Java language (all large companies or some open source components are written in Java)
  • It can bear the impact of the three high problems;
  • Syntax like ASP, ASP - > JSP, strengthen market strength;

2.2. web server

Server is a passive operation, which is used to process some user requests and give users some response information;
lIS
Microsoft; ASP, built-in in Windows
Tomcat

Programming for Baidu:

Tomcat is the Apache Software Foundation (Apache Software Foundation) a core project in the jakarta project, the latest Servlet and JSP specification can always be reflected in Tomcat, because Tomcat technology is advanced, stable and free, so it is loved by lava enthusiasts and has been recognized by some software developers. It has become a popular Web application server.

Tomcat server is a free open source web application server. It is a lightweight application server. It is widely used in small and medium-sized systems and when there are not many concurrent access users. It is the first choice for developing and debugging JSP programs. For a Java novice who learns the web, it is the best choice

Tomcat actually runs JSP pages and serlets.

After working for 3-5 years, you can try to write Tomcat server;

Download tomcat:

  1. Install or unzip
  2. Understand the configuration file and directory structure
  3. The function of this thing

3,Tomcat

3.1 installing Tomcat

Official website: http://tomcat.apache.org/

3.2. Tomcat startup and configuration

Folder function:

Access test: http://localhost:8080/
Possible problems:

  1. Java environment variables are not configured
  2. Flash back problem: compatibility needs to be configured
  3. Garbled code problem: set in the configuration file

You can modify java.util.logging.ConsoleHandler.encoding = GBK in conf/logging.properties to solve the problem of garbled code

3.3 configuration

You can configure the port number for startup

  • The default port number of tomcat is 8080
  • mysql:3306
  • http:80
  • https: 443
<Connector port="8081" protocol="HTTP/1.1"
      connectionTimeout="20000"
      redirectPort="8443" />

You can configure the name of the host

  • The default host name is localhost - > 127.0.0.1
  • The default site application location is webapps
  <Host name="www.qinjiang.com"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">

Difficult interview questions:
Please talk about how the website is accessed!

  1. Enter a domain name; enter
  2. Check whether there is this domain name mapping under the C:\Windows\System32\drivers\etc\hosts configuration file of this machine;
    1. Yes: directly return the corresponding ip address. In this address, there are web programs we need to access, which can be accessed directly
 127.0.0.1 www.qinjiang.com

2. No: go to the DNS server and return if found. If not, return if not found;

4. You can configure the following environment variables (optional)

3.4. Publish a web site

If you don't, imitate first

  • Put the website written by yourself under the specified web application folder (webapps) in the server (Tomcat), and you can access it

The structure that a website should have

--webapps : Tomcat Server web catalogue
	-ROOT
	-kuangstudy : Directory name of the web site
		- WEB-INF
			-classes : java program
			-lib: web Application dependent jar package
			-web.xml : Site profile
		- index.html Default home page
		- static 
            -css
            	-style.css
            -js
            -img
         -.....

HTTP protocol: Interview
Maven: build tool

  • Maven installation package

Getting started with Servlet

  • HelloWorld!
  • Servlet configuration and principle

4,Http

4.1. What is HTTP

Hypertext Transfer Protocol (HTTP) is a simple request response protocol, which usually runs on TCP.

  • Text: html, string
  • Hypertext: picture, music, video, location, map
  • Port: 80

Https: Secure

4.2 two times

  • http1.0
    • HTTP/1.0: after the client can connect to the web server, it can only obtain one web resource and disconnect
  • http2.0
    • HTTP/1.1: after the client can connect with the web server, it can obtain multiple web resources.

4.3 Http request

  • Client – Request – server

Baidu:

Request URL:https://www.baidu.com/ request address
Request Method:GET    get method/post method
Status Code:200 OK    Status code: 200
Remote((remote) Address:14.215.177.39:443

Accept:text/html  
Accept-Encoding:gzip, deflate, br
Accept-Language:zh-CN,zh;q=0.9    language
Cache-Control:max-age=0
Connection:keep-alive

1. Request line

  • Request method in request line: GET
  • Request method: get, post, head, delete, put, trace
    • get: the request can carry few parameters with limited size. The data content will be displayed in the URL address bar of the browser, which is unsafe but efficient
    • post: the parameters that the request can carry are not limited, and the size is not limited. The data content will not be displayed in the URL address bar of the browser. It is safe but not efficient.

2. Message header

Accept: Tell the browser what data types it supports
Accept-Encoding: Which encoding format is supported  GBK   UTF-8   GB2312  ISO8859-1
Accept-Language: Tell the browser its locale
Cache-Control: Cache control
Connection: Tell the browser whether to disconnect or remain connected when the request is completed
HOST: host..../.

4.4 Http response

  • Server – response....... Client

Baidu:

Cache-Control:private    Cache control
Connection:Keep-Alive    connect
Content-Encoding:gzip    code
Content-Type:text/html   type  

1. Responder

Accept: Tell the browser what data types it supports
Accept-Encoding: Which encoding format is supported  GBK   UTF-8   GB2312  ISO8859-1
Accept-Language: Tell the browser its locale
Cache-Control: Cache control
Connection: Tell the browser whether to disconnect or remain connected when the request is completed
HOST: host..../.
Refresh: Tell the client how often to refresh;
Location: Repositioning the web page;

2. Response status code

200: request response succeeded 200
3xx: request redirection · redirection: you go back to the new location I gave you;
4xx: resource not found 404 · resource does not exist;
5xx: server code error 500 502: gateway error

Common interview questions:
When you enter the address in the address bar of your browser and press enter, what happened when the page can be displayed back?

5,Maven

Why should I learn this technology?

  1. In Java Web development, we need to use a large number of jar packages, which we import manually;
  2. How can I make something automatically import and configure this jar package for me.

Thus, Maven was born!

5.1 Maven project architecture management tool

We are currently used to facilitate the import of jar packages!
Maven's core idea: Convention is greater than configuration

  • There are constraints. Don't break them.

Maven will specify how you should write our Java code, which must be in accordance with this specification;

5.2 download and install Maven

Official website: https://maven.apache.org/

After downloading, unzip it;
Little crazy God friendly suggestion: all the environments on the computer are placed in one folder for easy management;

5.3 configuring environment variables

Configure the following configuration in our system environment variable:

  • M2_ bin directory under home Maven directory
  • MAVEN_HOME maven directory
  • Configure% Maven in the path of the system_ HOME%\bin

  • Test whether Maven is installed successfully and ensure that the configuration must be completed!

5.4 Alibaba cloud image

  • Mirroring: mirrors
  • Function: accelerate our download
  • Alibaba cloud image is recommended in China
<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>

D:Enmvironment\apache-maven-3.6.2conf\ettings.xml
(madness teacher configures the file location of source and warehouse)

5.5 local warehouse

Local warehouse, remote warehouse; Set up a local repository: localRepository

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

5.6. Using Maven in IDEA

1. Start IDEA

2. Create a Maven project

3. Automatically import the package and wait for the download to succeed (errors may be reported due to network speed and other reasons)

Show that the project has been built successfully!

4. Observe what's more in Maven's warehouse?

5. Maven settings in idea

Note: after the IDEA project is created successfully, take a look at Maven's configuration

6. Here, you can configure and use Maven in the IDEA

5.7. Create a common Maven project

This is only available in web applications!

5.8 marking folder function

5.9. Configure TOMCAT in IDEA

Resolve warning issues
Necessary configuration: why is this problem: when we visit a website, we need to specify a folder name;

5.10 pom documents

pom.xml is Maven's core configuration file

<?xml version="1.0" encoding="UTF-8"?>

<!--Maven Version and header files-->
<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>

<!--Here is what we just configured GAV-->
  <groupId>com.kuang</groupId>
  <artifactId>javaweb-01-maven</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!--Package: Packaging method of the project
  jar: java application
  war: JavaWeb application-->
  <packaging>war</packaging>

  <name>javaweb-01-maven Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <!--to configure  -->
  <properties>
  <!--Default build code for the project    -->
    <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>

  <!-- Project dependency-->
  <dependencies>
  <!-- Specific dependent jar Package configuration file   -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

<!--  Things for project construction-->
  <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>

maven's agreement is greater than the configuration, so we can encounter the problem that the configuration file we wrote cannot be exported or take effect. Solution:

<!-- stay bui1d Medium configuration resources,To prevent the failure of resource export-->
<build>
<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>
</build>

5.11. IDEA operation

5.12. Solve some problems encountered

  1. Maven 3.6.2

    Solution: reduce to 3.6.1 or use another version of Maven

  1. Tomcat flash back

  2. Maven must be configured repeatedly every time in the IDEA

    Configure in the global default configuration in IDEA

  3. Tomcat cannot be configured in Maven project

  4. web.xml version problem in Maven's default web project

  5. Replace with webapp version 4.0 to make it consistent with the version in TOMCAT

    <?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>
    
    1. Use of Maven warehouse
      Address: https://mvnrepository.com/

6,Servlet

6.1 introduction to Servlet

  • Servlet is a technology for sun company to develop dynamic web
  • Sun provides an interface called Servlet in these APIs. If you want to develop a Servlet program, you only need to complete two small steps:
    • Write a class to implement the Serlet interface
    • Deploy the developed java classes to the web server.

The Java program that implements the Servlet interface is called Servlet

6.2,HelloServlet

Servlet interface Sun has two default implementation classes: HttpServlet and genericservlet

  1. Build an ordinary Maven project and the sc directory of the management surface. In the future, we will build Moudel in this project; This empty project is called Maven main project;
  2. Understanding of Maven father son project;
    There will be in the parent project
<modules>
    <module>servlet-01</module>
</modules>

There will be in the subproject

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

java subprojects in the parent project can be used directly

son extends father
  1. Maven environment optimization

    1. Modify web.xml to the latest
    2. Complete the structure of maven
  2. Write a Servlet program

    1. Write a common class

    2. Implement the Servlet interface. Here we directly inherit HttpServlet

      package com.kuang.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.io.PrintWriter;
      
      public class HelloServlet extends HttpServlet {
          //Because get or post are only different ways of request implementation, they can be called each other, and the business logic is the same:
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              PrintWriter writer = resp.getWriter();
              writer.println("Hello World!");
          }
      
          @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              doGet(req, resp);
          }
      }
      
  3. Write the mapping of servlets
    Why mapping is needed: we write a JAVA program, but we need to access it through the browser, and the browser needs to connect to the web server, so we need to
    To register the Servlet we wrote in the web service, we also need to give it a path that the browser can access;

<!--    Register a Servlet-->
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.kuang.servlet.HelloServlet</servlet-class>
    </servlet>
<!--    Servlet Mapping request path for-->
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
  1. Configure Tomcat
    Note: just configure the project publishing path

6.3 Servlet principle

Servlet is called by the web server. After receiving the browser request, the web server will:

6.4. Mapping problem

  1. A Servlet can specify a mapping path
      <servlet-mapping>
          <servlet-name>hello</servlet-name>
          <url-pattern>/hello</url-pattern>
      </servlet-mapping>
  1. A servlet can specify multiple mapping paths
      <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>
  1. A servlet can specify a generic mapping path
      <servlet-mapping>
          <servlet-name>hello</servlet-name>
          <url-pattern>/hello/*</url-pattern>
      </servlet-mapping>
  1. Default request path
       <!--Default request path-->
       <servlet-mapping>
           <servlet-name>hello</servlet-name>
           <url-pattern>/*</url-pattern>
       </servlet-mapping>
  1. Specify some suffixes or prefixes, etc
  
  <!--You can customize the suffix to implement request mapping
      Be careful,*The path of the project mapping cannot be preceded
      hello/sajdlkajda.qinjiang
      -->
  <servlet-mapping>
      <servlet-name>hello</servlet-name>
      <url-pattern>*.qinjiang</url-pattern>
  </servlet-mapping>
  1. Priority issues
    It specifies the inherent mapping path with the highest priority. If it cannot be found, it will go to the default processing request;
  <!--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

When the web container starts, it will create a corresponding ServletContext object for each web application, which represents the current web application;

1. Shared data

The data I saved in this servlet can be obtained in another servlet;

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        
        //this.getInitParameter() initialization parameter
        //This. Getservletconfig() servlet configuration
        //This. Getservletcontext() servlet context
        ServletContext context = this.getServletContext();

        String username = "Qin Jiang"; //data
        context.setAttribute("username",username); //A data is saved in the ServletContext with the name username. Value username

    }

}
public class GetServlet extends HttpServlet {
    @Override
    protected 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("name"+username);

    }

    @Override
    protected 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>

Test access results;

2. Get initialization parameters

    <!--Configure some web Application initialization parameters-->
    <context-param>
        <param-name>url</param-name>
        <param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
    </context-param>
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ServletContext context = this.getServletContext();
    String url = context.getInitParameter("url");
    resp.getWriter().print(url);
}

3. Request forwarding

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ServletContext context = this.getServletContext();
    System.out.println("Entered ServletDemo04");
    //RequestDispatcher requestDispatcher = context.getRequestDispatcher("/gp"); // Forwarded request path
    //requestDispatcher.forward(req,resp); // Call forward to forward the request;
    context.getRequestDispatcher("/gp").forward(req,resp);
}

4. Read resource file
Properties

  • Create new properties in the java directory
  • Create new properties in the resources directory

Discovery: they are all packaged in the same path: classes. We commonly call this path classpath:
Idea: you need a file stream

username=root12312
password=zxczxczxc
public class ServletDemo05 extends HttpServlet {
    @Override
    protected 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);

    }

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

Access the test, ok;

6.6,HttpServletResponse

The web server receives the http request from the client. For this request, create an HttpServletRequest object representing the request and an HttpServletResponse representing the response;

  • If you want to get the parameters requested by the client: find HttpServletRequest

  • If you want to respond to the client with some information: find HttpServletResponse

    1. Simple classification

Method responsible for sending data to browser

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

Method responsible for sending response header to browser

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);

Response status code

2. Download File

  1. Output a message to the browser (keep talking, don't talk)
  2. Download File
    1. To get the path of the downloaded file
    2. What is the name of the downloaded file?
    3. Set up a way to make the browser support downloading what we need
    4. Gets the input stream of the downloaded file
    5. Create buffer
    6. Get OutputStream object
    7. Writes the FileOutputStream stream to the bufer buffer
    8. Use OutputStream to output the data in the buffer to the client!
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // 1. To get the path of the downloaded file
    String realPath = "F:\\Class management\\Xikai [19525]\\2,code\\JavaWeb\\javaweb-02-servlet\\response\\target\\classes\\Qin Jiang.png";
    System.out.println("Path to download file:"+realPath);
    // 2. What is the name of the downloaded file?
    String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
    // 3. Set up a way to make the browser support (content disposition) to download what we need. The Chinese file name is URLEncoder.encode, otherwise it may be garbled
    resp.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(fileName,"UTF-8"));
    // 4. Obtain the input stream of the downloaded file
    FileInputStream in = new FileInputStream(realPath);
    // 5. Create buffer
    int len = 0;
    byte[] buffer = new byte[1024];
    // 6. Get OutputStream object
    ServletOutputStream out = resp.getOutputStream();
    // 7. Write the FileOutputStream stream to the buffer, and use OutputStream to output the data in the buffer to the client!
    while ((len=in.read(buffer))>0){
        out.write(buffer,0,len);
    }

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

3. Verification code function

How did the verification come from?

  • Front end implementation
  • The back-end implementation needs to use the Java picture class to produce a picture
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 {

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

        //How to make the browser refresh automatically every 3 seconds;
        resp.setHeader("refresh","3");
        
        //Create a picture in memory
        BufferedImage image = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);
        //Get pictures
        Graphics2D g = (Graphics2D) image.getGraphics(); //pen
        //Set the background color of the picture
        g.setColor(Color.white);
        g.fillRect(0,0,80,20);
        //Write data to pictures
        g.setColor(Color.BLUE);
        g.setFont(new Font(null,Font.BOLD,20));
        g.drawString(makeNum(),0,20);

        //Tell the browser that the request is opened in the form of a picture
        resp.setContentType("image/jpeg");
        //There is a cache in the website. Do not let the browser cache
        resp.setDateHeader("expires",-1);
        resp.setHeader("Cache-Control","no-cache");
        resp.setHeader("Pragma","no-cache");

        //Write the picture to the browser
        ImageIO.write(image,"jpg", resp.getOutputStream());

    }

    //Generate random number
    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;
    }


    @Override
    protected 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. Redirect

Common scenarios:

  • User login
 void sendRedirect(String var1) throws IOException;

Test:

@override
protected void doGet(HttpservletRequest req, HttpservletResponse resp) throws ServletException, IOException {

    resp. sendRedirect("/r/img");//redirect
    /*
    resp. setHeader("Location","/r/img");
    resp. setstatus (302);
    *
}

Interview question: can you talk about the difference between redirection and forwarding?

Same point

  • The page will jump

difference

  • When the request is forwarded, the URL will not change
  • When redirecting, the URL address will change

index.jsp

<html>
	<body>
		<h2>Hel1o World!</h2>
		
		<%--Here is the path of intersection,You need to find the path to the project--%>
		<%--${pageContext. request, contextPath}Represents the current project--%>
		<form action="${pageContext. request.contextPath}/login" method="get">
			user name: <input type="text" name="username"> <br>
			password: <input type="password" name="password"> <br>
			<input type="submit">
		</form>
	
	</body>
</html>

RequestTest.java

public class RequestTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //Processing method
    String username = req.getParameter( s: "username");
    String password  rea.getParameter( s: "password");

    System.out.println(username+":"+password);

    resp.sendRedirect(s: "/r/success.jsp");
}

Redirect page 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 configuration

<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>

Import dependent jar packages

<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>

6.7,HttpServletRequest

HttpServletRequest represents the request of the client. The user accesses the server through the HTTP protocol. All the information in the HTTP request will be encapsulated in HttpServletRequest. All the information of the client will be obtained through this HttpServletRequest method;

Get parameters and request forwarding

Create your own class and inherit the HttpServlet class

@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("==========");
	//Background receiving Chinese garbled code
	System. out.println(username);
	System. out.println(password);
	System. out.println(Arrays.tostring(hobbys));
	System. out.println("============");
	system. out.println(req.getContextPath());
	//Forward by request
	/// here represents the current web application
	req.getRequestDispatcher("/success.jsp").forward(req,resp);
}

Interview question: can you talk about the difference between redirection and forwarding?

Same point

  • The page will jump

difference

  • When the request is forwarded, the URL will not change 307
    • When redirecting, the URL address will change 302

7,Cookie,Session

7.1 conversation

Session: users open a browser, click many hyperlinks, access multiple web resources, and close the browser. This process can be called session;

Stateful conversation: when a classmate comes to the classroom next time, we will know that the classmate has been here, which is called stateful conversation;

How can you prove that you are a student of Xikai?

You drive west

  1. I'll give you an invoice
  2. School registration mark Xikai. You've been here

A website, how to prove you've been here?

Client server

  1. The server sends a letter to the client, and the client can bring the letter to the server next time; cookie
  2. The server registers that you have been here. Next time you come, I will match you; seesion

7.2. Two techniques for saving sessions

cookie

  • Client Technology (response, request)

session

  • Server technology, which can save the user's Session information? We can put information or data in the Session!

Common: after you log in to the website, you don't need to log in again next time. You can go up directly for the second visit!

7.3,Cookie

  1. Get cookie information from the request
  2. The server responds to the client cookie
Cookie[] cookies = req.getCookies(); //Get cookies
cookie.getName(); //Get the key in the cookie
cookie.getValue(); //Get vlaue in cookie
new Cookie("lastLoginTime", System.currentTimeMillis()+""); //Create a new cookie
cookie.setMaxAge(24*60*60); //Set the validity period of the cookie
resp.addCookie(cookie); //Respond to a cookie to the client

example:

package com.kuang.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 Cookie01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

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

        PrintWriter out = resp.getWriter();

        //Cookie: the cookie obtained by the server from the client
        Cookie[] cookies = req.getCookies();

        //Determine whether the cookie exists
        if (cookies!=null){
            //What if it exists
            out.write("Your last visit was");
            for (int i = 0; i < cookies.length; i++) {
                Cookie cookie = cookies[i];
                //Gets the name of the cookie
                if (cookie.getName().equals("lastLoginTime")){
                    //Gets the value in the cookie
                    long lastLoginTime = Long.parseLong(cookie.getValue());
                    Date date = new Date(lastLoginTime);
                    out.write(date.toLocaleString());
                }
            }
        }else{
            out.write("This is your first visit to this site!");
        }

        //The server responds with a cookie to the client
        Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis()+"");
        //Set the cookie to be valid for one day
        cookie.setMaxAge(24*60*60);
        resp.addCookie(cookie);
    }

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

cookie: usually saved in the local user directory appdata;

Whether there is an upper limit for a website cookie! Talk about the details

  • A Cookie can only save one information;
  • A web site can send multiple cookies to the browser and store up to 20 cookies;
  • The Cookie size is limited to 4kb;
  • 300 cookie browser limit

Delete cookies;

  • If the validity period is not set, close the browser and it will automatically become invalid;
  • Set the validity time to 0;
//The deleted cookie s must be consistent with the key s
Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis()+"");
//Set cookie validity to 0
cookie.setMaxAge(0);
resp.addCookie(cookie);

Encoding and decoding:

URLEncoder.encode("Qin Jiang","utf-8")
URLDecoder.decode(cookie.getValue(),"UTF-8")

example:

package com.kuang.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.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Date;

public class Cookie03 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

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

        PrintWriter out = resp.getWriter();

        //Cookie: the cookie obtained by the server from the client
        Cookie[] cookies = req.getCookies();

        //Determine whether the cookie exists
        if (cookies!=null){
            //What if it exists
            out.write("The account you last visited is");
            for (int i = 0; i < cookies.length; i++) {
                Cookie cookie = cookies[i];
                //Gets the name of the cookie
                if (cookie.getName().equals("name")){
                    //Get the value in the cookie and decode it
                    out.write(URLDecoder.decode(cookie.getValue(),"UTF-8"));
                }
            }
        }else{
            out.write("This is your first visit to this site!");
        }
        //The server responds to a cookie to the client and encodes it
        Cookie cookie = new Cookie("name", URLEncoder.encode("Mad God","UTF-8"));
        resp.addCookie(cookie);
    }

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

7.4. Session (key)

What is a Session:

  • The server will create a Seesion object for each user (browser);
  • A Session monopolizes a browser. As long as the browser is not closed, the Session exists;
  • Once the user logs in, the entire website can be accessed! – > Save user information; Save cart information

...
...
...

The difference between Session and cookie:

  • Cookie is to write the user's data to the user's browser, and the browser saves it (multiple can be saved)
  • Session writes the user's data to the user's exclusive session and saves it on the server (saves important information and reduces the waste of server resources)
  • The Session object is created by the service;

Usage scenario:

  • Save the information of a login user;
  • Shopping cart information;
  • We save the data often used in the whole website in Session;

Using Session:

package com.kuang.servlet;

import com.kuang.pojo.Person;

import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;

public class Session01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //Solve the problem of garbled code
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");

        //Get a session object
        HttpSession session = req.getSession();

        //Store information into session
        session.setAttribute("name",new Person("Mad God",1));

        //Get sessionId
        String sessionId = session.getId();

        //Judge whether it is a newly created session
        if (session.isNew()){
            resp.getWriter().write("session Created successfully, ID Is:"+sessionId);
        }else{
            resp.getWriter().write("session Created, ID Is:"+sessionId);
        }
//        What did you do when creating a Session
//        Cookie cookie = new Cookie("JSESSIONID",sessionId);
//        resp.addCookie(cookie);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
//Get Session
HttpSession session = req.getSession();

Person person = (Person) session.getAttribute("name");

System.out.println(person.toString());
HttpSession session = req.getSession();
session.removeAttribute("name");
//Manually unregister Session
session.invalidate();

Automatic session Expiration: web.xml configuration

<!--set up Session Default expiration time-->
<session-config>
    <!--15 Minutes later Session Automatic failure, in minutes-->
    <session-timeout>15</session-timeout>
</session-config>

8,JSP

8.1. What is JSP

Java Server Pages: Java server-side pages, like servlets, are used for dynamic Web technology!

Biggest features:

  • Writing JSP is like writing HTML
  • difference:
    • HTML only provides users with static data
    • JAVA code can be embedded in JSP pages to provide users with dynamic data;

8.2 JSP principle

Idea: how to execute JSP!

  • There are no problems at the code level

  • Server internal work

    There is a work directory in tomcat;

    If Tomcat is used in the IDEA, a work directory will be produced in Tomcat of the IDEA

Found that the page has been transformed into a Java program!

The browser sends a request to the server. No matter what resources it accesses, it is actually accessing the Servlet!

JSP will eventually be converted into a Java class!

JSP is essentially a Servlet

//initialization
  public void _jspInit() {
      
  }
//Destroy
  public void _jspDestroy() {
  }
//JSPService
  public void _jspService(.HttpServletRequest request,HttpServletResponse response)
  1. Judgment request
  2. Built in some objects
final javax.servlet.jsp.PageContext pageContext;  //Page context
javax.servlet.http.HttpSession session = null;    //session
final javax.servlet.ServletContext application;   //applicationContext
final javax.servlet.ServletConfig config;         //config
javax.servlet.jsp.JspWriter out = null;           //out
final java.lang.Object page = this;               //page: current
HttpServletRequest request                        //request
HttpServletResponse response                      //response
  1. Code added before output page
response.setContentType("text/html");       //Set the page type of the response
pageContext = _jspxFactory.getPageContext(this, request, response,
       null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
  1. The above objects can be used directly in JSP pages!

In JSP page;

As long as it is JAVA code, it will be output intact;

If it is HTML code, it will be converted to:

out.write("<html>\r\n");

In this format, output to the front end!

8.3. JSP basic syntax

Any language has its own syntax, which is found in Java,. As an application of Java technology, JSP has its own extended syntax (understand, know!). All Java syntax supports!

JSP expression

  <%--JSP expression
  Function: used to output the program to the client
  <%= Variable or expression%>
  --%>
  <%= new java.util.Date()%>

jsp script fragment

  <%--jsp Script fragment--%>
  <%
    int sum = 0;
    for (int i = 1; i <=100 ; i++) {
      sum+=i;
    }
    out.println("<h1>Sum="+sum+"</h1>");
  %>

Re implementation of script fragments

  <%
    int x = 10;
    out.println(x);
  %>
  <p>This is a JSP file</p>
  <%
    int y = 2;
    out.println(y);
  %>

  <hr>


  <%--Embedding in code HTML element--%>
  <%
    for (int i = 0; i < 5; i++) {
  %>
    <h1>Hello,World  <%=i%> </h1>
  <%
    }
  %>

JSP declaration

  <%!
    static {
      System.out.println("Loading Servlet!");
    }

    private int globalVar = 0;

    public void kuang(){
      System.out.println("Entered the method Kuang!");
    }
  %>

JSP declaration: it will be compiled into the Java class generated by JSP! Others will be generated to_ jspService method!

In JSP, embed Java code!

<%%>
<%=%>
<%!%>

<%--notes--%>

JSP comments will not be displayed on the client, and HTML will!

8.4. JSP instruction

<%@page args.... %>
<%@include file=""%>

<%--@include The two pages will be combined into one--%>

<%@include file="common/header.jsp"%>
<h1>Web page subject</h1>

<%@include file="common/footer.jsp"%>

<hr>


<%--jSP label
    jsp:include: Splicing pages, the essence is still three
    --%>
<jsp:include page="/common/header.jsp"/>
<h1>Web page subject</h1>
<jsp:include page="/common/footer.jsp"/>

8.5 and 9 built-in objects

  • PageContext store

  • Request to store things

  • Response

  • Session storage

  • Application [servvetcontext] save things

  • config [SerlvetConfig]

  • out

  • page, don't understand

  • exception

pageContext.setAttribute("name1","Qinjiang 1"); //The saved data is only valid in one page
request.setAttribute("name2","Qinjiang 2"); //The saved data is only valid in one request, and the request forwarding will carry this data
session.setAttribute("name3","Qinjiang 3"); //The saved data is valid only in one session, from opening the browser to closing the browser
application.setAttribute("name4","Qinjiang 4");  //The saved data is only valid in the server, from opening the server to closing the server

Parental delegation mechanism:

Easy to understand parental delegation mechanism_ Wu Yanbao - CSDN blog_ Parental delegation mechanism

Request: the client sends a request to the server. The generated data is useless after the user reads it. For example, news is useless after the user reads it!

session: the client sends a request to the server, and the generated data is still useful when the user runs out, such as a shopping cart;

application: when the client sends a request to the server, the generated data is used up by one user and may be used by other users, such as chat data;

8.6. JSP tag, JSTL tag, EL expression

<!-- JSTL Dependency of expression -->
<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>1.2</version>
</dependency>
<!-- standard Tag library -->
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>

EL expression: ${}

  • get data
  • Perform operations
  • Get common objects for web development
<%--jsp:include--%>

<%--
http://localhost:8080/jsptag.jsp?name=kuangshen&age=12
--%>

<jsp:forward page="/jsptag2.jsp">
    <jsp:param name="name" value="kuangshen"></jsp:param>
    <jsp:param name="age" value="12"></jsp:param>
</jsp:forward>

JSTL expression

The use of JSTL tag library is to make up for the shortage of HTML tags; It can customize many tags for us to use. The function of tags is the same as that of Java code!

Format label

SQL tag

XML tag

Core label (master part)

Steps for using JSTL tag library

  • Introduce the corresponding taglib
  • Use one of the methods
  • In Tomcat, you also need to introduce the JSTL package, otherwise an error will be reported: JSTL parsing error

c: if

<head>
    <title>Title</title>
</head>
<body>


<h4>if test</h4>

<hr>

<form action="coreif.jsp" method="get">
    <%--
    EL Expression to get the data in the form
    ${param.Parameter name}
    --%>
    <input type="text" name="username" value="${param.username}">
    <input type="submit" value="Sign in">
</form>

<%--Judge that if the submitted user name is administrator, the login is successful--%>
<c:if test="${param.username=='admin'}" var="isAdmin">
    <c:out value="Welcome to the administrator!"/>
</c:if>

<%--Self closing label--%>
<c:out value="${isAdmin}"/>

</body>

c:choose c:when

<body>

<%--Define a variable score,The value is 85--%>
<c:set var="score" value="55"/>

<c:choose>
    <c:when test="${score>=90}">
        Your grades are excellent
    </c:when>
    <c:when test="${score>=80}">
        Your grades are average
    </c:when>
    <c:when test="${score>=70}">
        Your grades are good
    </c:when>
    <c:when test="${score<=60}">
        Your grade is a failure
    </c:when>
</c:choose>

</body>

c:forEach

<%

    ArrayList<String> people = new ArrayList<>();
    people.add(0,"Zhang San");
    people.add(1,"Li Si");
    people.add(2,"Wang Wu");
    people.add(3,"Zhao Liu");
    people.add(4,"Tian Liu");
    request.setAttribute("list",people);
%>


<%--
var , Variables traversed each time
items, Object to traverse
begin,   Where to start
end,     Where to go?
step,   step
--%>
<c:forEach var="people" items="${list}">
    <c:out value="${people}"/> <br>
</c:forEach>

<hr>

<c:forEach var="people" items="${list}" begin="1" end="3" step="1" >
    <c:out value="${people}"/> <br>
</c:forEach>

9,JavaBean

Entity class

JavaBean s have specific ways to write:

  • Must have a parameterless construct
  • Property must be privatized
  • There must be a corresponding get/set method;

It is generally used to map ORM with database fields;

ORM: Object Relational Mapping

  • Table - > class
  • Fields – > Properties
  • Line record - > object

people table

idnameageaddress
1Qinjiang 13Xi'an
2Qinjiang 218Xi'an
3Qinjiang 3100Xi'an
class People{
    private int id;
    private String name;
    private int id;
    private String address;
}

class A{
    new People(1,"Qinjiang 1",3,"Xi'an");
    new People(2,"Qinjiang 2",3,"Xi'an");
    new People(3,"Qinjiang 3",3,"Xi'an");
}
  • filter
  • File upload
  • Mail sending
  • jdbc review: how to use jdbc, jdbc crud, jdbc transaction

10. MVC three-tier architecture

  • What is MVC: Model view Controller

10.1 previous architecture

Users directly access the control layer, and the control layer can directly operate the database;

servlet--CRUD-->database
 Disadvantages: the program is very bloated, which is not conducive to maintenance  
servlet In the code: processing request, response, view jump, processing JDBC,Processing business code and processing logic code

Architecture: nothing can't be solved by adding one layer!
Program call
↑
JDBC ((implement this interface)
↑
Mysql Oracle SqlServer ....((different manufacturers)

10.2 MVC three-tier architecture

Model

  • Business processing: business logic (Service)
  • Data persistence layer: CRUD (Dao - data persistence object)

View

  • Display data
  • Provide link to initiate Servlet request (a, form, img...)

Controller (Servlet)

  • Receive user's request: (req: request parameters, Session information...)
  • Give it to the business layer to process the corresponding code
  • Control view jump

Login -- > receive the user's login request -- > process the user's request (get the user's login parameters, username, password) - -- > give it to the business layer to process the login business (judge whether the user name and password are correct: Transaction) - > Dao layer query whether the user name and password are correct -- > Database

11. Filter (key)

For example, Shiro security framework technology is implemented with Filter

Filter: filter, used to filter website data;

  • Deal with Chinese garbled code
  • Login authentication

(for example, it is used to filter swearing words and spam on the Internet)

Filter development steps:

  1. Guide Package
  2. Write filter
    1. Guide the package correctly (note)

  1. Implement the Filter interface and rewrite the corresponding method
package com.kuang.filter;

import javax.servlet.*;
import java.io.IOException;

public class CharacterEncodingFilter implements Filter {
    //Initialization: when the web server is started, it is initialized, waiting for the filter object to appear at any time!
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("CharacterEncodingFilter initialization");
    }
    //Chain: Chain
    /*
    *   1.All code in the filter will be executed when filtering specific requests
        2.The filter must continue to travel
        chain. doFilter(request, response);
    */
    public void doFilter(ServletRequest Request, ServletResponse Response, FilterChain Chain) throws IOException, ServletException {
        Request.setCharacterEncoding("utf-8");
        Response.setCharacterEncoding("utf-8");
        Response.setContentType("text/html;charset=UTF-8");

        System.out.println("CharacterEncodingFilter Before execution...");
        Chain.doFilter(Request,Response);//! Let our request continue. If we don't write, the program will be intercepted and stopped here!
        System.out.println("CharacterEncodingFilter After execution...");

    }
    //Destroy: when the web server is shut down, the filter will be destroyed
    public void destroy() {
        System.out.println("CharacterEncodingFilter Destroy");
    }
}
  1. Configure Filter in web.xml
<filter>
    <filter-name>filter01</filter-name>
    <filter-class>com.kuang.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>filter01</filter-name>
    <url-pattern>/servlet/*</url-pattern>
    <!--<url-pattern>*</url-pattern>-->
</filter-mapping>

12. Listener

Implement a listener interface; (there are n kinds of listeners)

  1. Write a listener

    Implement the listener interface

    Dependent jar package

//Count the number of people online: session
public class OnlineCountListener implements HttpSessionListener {

    //Create session monitor: watch your every move
    //This event will be triggered once the Session is created!
    public void sessionCreated(HttpSessionEvent se) {
        ServletContext ctx = se.getSession().getServletContext();

        System.out.println(se.getSession().getId());

        Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");

        if (onlineCount==null){
            onlineCount = new Integer(1);
        }else {
            int count = onlineCount.intValue();
            onlineCount = new Integer(count+1);
        }

        ctx.setAttribute("OnlineCount",onlineCount);

    }

    //Destroy session listening
    //This event will be triggered once the Session is destroyed!
    public void sessionDestroyed(HttpSessionEvent se) {
        ServletContext ctx = se.getSession().getServletContext();

        Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");

        if (onlineCount==null){
            onlineCount = new Integer(0);
        }else {
            int count = onlineCount.intValue();
            onlineCount = new Integer(count-1);
        }

        ctx.setAttribute("OnlineCount",onlineCount);

    }


    /*
    Session Destruction:
    1. Manually destroy getSession().invalidate();
    2. Automatic destruction
     */
}
  1. Register listeners in web.xml
<!--Register listener-->
<listener>
    <listener-class>com.kuang.listener.OnlineCountListener</listener-class>
</listener>
  1. It depends on whether it is used!

13. Common applications of filters and listeners

Listener: often used in GUI programming;

public class TestPanel {
    public static void main(String[] args) {
        Frame frame = new Frame("Happy Mid-autumn Day ");  //Create a new form
        Panel panel = new Panel(null); //panel
        frame.setLayout(null); //Set the layout of the form

        frame.setBounds(300,300,500,500);
        frame.setBackground(new Color(0,0,255)); //Set background color

        panel.setBounds(50,50,300,300);
        panel.setBackground(new Color(0,255,0)); //Set background color

        frame.add(panel);

        frame.setVisible(true);

        //Listen for events. Listen for closing events
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e);
            }
        });

    }
}

Users can enter the home page only after logging in! Users cannot enter the home page after logging off!

  1. After the user logs in, put the user's data into Sison
  2. When entering the home page, judge whether the user has logged in; Requirements: implemented in the filter!
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;

if (request.getSession().getAttribute(Constant.USER_SESSION)==null){
    response.sendRedirect("/error.jsp");
}

chain.doFilter(request,response);

14,JDBC

What is JDBC: Java connection database!

jar package support is required:

  • java.sql
  • javax.sql
  • MySQL connector Java... Connection driver (must be imported)

Establishment of experimental environment

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,'Zhang San','123456','zs@qq.com','2000-01-01');
INSERT INTO users(id,`name`,`password`,email,birthday)
VALUES(2,'Li Si','123456','ls@qq.com','2000-01-01');
INSERT INTO users(id,`name`,`password`,email,birthday)
VALUES(3,'Wang Wu','123456','ww@qq.com','2000-01-01');


SELECT	* FROM users;

Import database dependencies

<!--mysql Drive of-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

Connect to the database in IDEA:

JDBC fixing steps:

  1. Load driver
  2. Connect to the database, representing the database
  3. Object statement to send SQL to database: CRUD
  4. Write SQL (different SQL according to business)
  5. Execute SQL
  6. Close the connection (open first and then close)
public class TestJdbc {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //configuration information
        //Useunicode = true & characterencoding = UTF-8 to solve Chinese garbled code
        String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";
        String username = "root";
        String password = "123456";

        //1. Load drive
        Class.forName("com.mysql.jdbc.Driver");
        //2. Connect to the database and represent the database
        Connection connection = DriverManager.getConnection(url, username, password);

        //3. Send SQL object statement to the database, Preparedstatement: CRUD
        Statement statement = connection.createStatement();

        //4. Write SQL
        String sql = "select * from users";

        //5. Execute SQL query and return a ResultSet: result set
        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. Close the connection and release resources (be sure to do it) first on and then off
        rs.close();
        statement.close();
        connection.close();
    }
}

Precompiled SQL

public class TestJDBC2 {
    public static void main(String[] args) throws Exception {
        //configuration information
        //Useunicode = true & characterencoding = UTF-8 to solve Chinese garbled code
        String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";
        String username = "root";
        String password = "123456";

        //1. Load drive
        Class.forName("com.mysql.jdbc.Driver");
        //2. Connect to the database and represent the database
        Connection connection = DriverManager.getConnection(url, username, password);

        //3. Write SQL
        String sql = "insert into  users(id, name, password, email, birthday) values (?,?,?,?,?);";

        //4. Precompiling
        PreparedStatement preparedStatement = connection.prepareStatement(sql);

        preparedStatement.setInt(1,2);//For the first placeholder? The value of is assigned to 1;
        preparedStatement.setString(2,"Madness theory Java");//For the second placeholder? The value of is assigned to crazy God Theory Java;
        preparedStatement.setString(3,"123456");//For the third placeholder? The value of is assigned as 123456;
        preparedStatement.setString(4,"24736743@qq.com");//For the fourth placeholder? The value of is assigned to 1;
        preparedStatement.setDate(5,new Date(new java.util.Date().getTime()));//For the fifth placeholder? The value of is assigned as new Date(new java.util.Date().getTime());

        //5. Execute SQL
        int i = preparedStatement.executeUpdate();

        if (i>0){
            System.out.println("Insert successful@");
        }

        //6. Close the connection and release resources (be sure to do it) first on and then off
        preparedStatement.close();
        connection.close();
    }
}

affair

Either all succeed or all fail!

Atomicity, consistency, isolation, persistence

ACID principle: ensure data security.

Open transaction
 Transaction commit  commit()
Transaction rollback  rollback()
Close transaction

transfer accounts:
A:1000
B:1000
    
A(900)   --100-->   B(1100) 

Junit unit test

rely on

<!--unit testing -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

Simple use

@The Test annotation is only valid for methods. As long as the annotated method is added, it can be run directly!

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

Failure is red:

Build an environment

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);
    @Test
    public void test() {
        //configuration information
        //Useunicode = true & characterencoding = UTF-8 to solve Chinese garbled code
        String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";
        String username = "root";
        String password = "123456";

        Connection connection = null;

        //1. Load drive
        try {
            Class.forName("com.mysql.jdbc.Driver");
            //2. Connect to the database and represent the database
             connection = DriverManager.getConnection(url, username, password);

            //3. Notify the database to start the transaction and false to start it
            connection.setAutoCommit(false);

            String sql = "update account set money = money-100 where name = 'A'";
            connection.prepareStatement(sql).executeUpdate();

            //Manufacturing error
            //int i = 1/0;

            String sql2 = "update account set money = money+100 where name = 'B'";
            connection.prepareStatement(sql2).executeUpdate();

            connection.commit();//If the above two SQL statements are executed successfully, commit the transaction!
            System.out.println("success");
        } catch (Exception e) {
            try {
                //If an exception occurs, notify the database to roll back the transaction
                connection.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }finally {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
//6. Close the connection and release resources (be sure to do it) first on and then off
    preparedStatement.close();
    connection.close();
}

}

**affair**

Either all succeed or all fail!

Atomicity, consistency, isolation, persistence

ACID Principle: ensure data security.

```java
 Open transaction
 Transaction commit  commit()
Transaction rollback  rollback()
Close transaction

transfer accounts:
A:1000
B:1000
    
A(900)   --100-->   B(1100) 

Junit unit test

rely on

<!--unit testing -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

Simple use

@The Test annotation is only valid for methods. As long as the annotated method is added, it can be run directly!

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

[external chain picture transferring... (img-6c0B2JLx-1633069387800)]

Failure is red:

[external chain picture transferring... (img-YYAJsiMd-1633069387801)]

Build an environment

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);
    @Test
    public void test() {
        //configuration information
        //Useunicode = true & characterencoding = UTF-8 to solve Chinese garbled code
        String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";
        String username = "root";
        String password = "123456";

        Connection connection = null;

        //1. Load drive
        try {
            Class.forName("com.mysql.jdbc.Driver");
            //2. Connect to the database and represent the database
             connection = DriverManager.getConnection(url, username, password);

            //3. Notify the database to start the transaction and false to start it
            connection.setAutoCommit(false);

            String sql = "update account set money = money-100 where name = 'A'";
            connection.prepareStatement(sql).executeUpdate();

            //Manufacturing error
            //int i = 1/0;

            String sql2 = "update account set money = money+100 where name = 'B'";
            connection.prepareStatement(sql2).executeUpdate();

            connection.commit();//If the above two SQL statements are executed successfully, commit the transaction!
            System.out.println("success");
        } catch (Exception e) {
            try {
                //If an exception occurs, notify the database to roll back the transaction
                connection.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }finally {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

Keywords: Java

Added by FireDrake on Sat, 02 Oct 2021 01:58:58 +0300