javaweb
1. Basic concepts
1.1 Preface
web development:
-
Meaning of web page www.bilibili.com com
-
Static web
- html css
- The data provided to everyone will not change
-
Dynamic web
-
Everyone sees 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 java Web
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 somewhere in 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
-
html css js
-
jsp servlet
-
java program
-
jar package
-
configuration file
-
After the web application is written, if you want to provide access to the outside world, you need a server to manage it uniformly
1.3 static web
-
. html these are suffixes of web pages. If these things always exist on the server, we can read them
-
Disadvantages of static web
-
The web page cannot be updated. All users see the same page
- Rotation chart, click special effect: pseudo dynamic
- JavaScript
-
It cannot interact with the database (data cannot be persisted and users cannot interact)
-
1.4 dynamic web
The page will display dynamically: "the effect of web display varies from person to person";
Disadvantages:
- If there are errors in the dynamic web resources of the server, we need to rewrite our background program and publish it again
- Shutdown maintenance
advantage:
-
web pages can be updated, and all users don't see the same page
-
It can interact with the database (data persistence: registration, product information)
2. web server
2.1 technical explanation
ASP:
- ASP is the most popular in China
- Embedded VB script in HTML, ASP + COM;
- In the development of ASP, there are thousands of lines of business code in a basic page, and the page is very chaotic
- High maintenance cost!
PHP
- PHP has fast development speed, powerful functions, cross platform, and simple code (70%)
- Unable to carry large traffic
JSP/Servlet
- B/S: browser 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 three heights
- Syntax is like ASP, which strengthens the strength of the market
2.2 web server
Server is a passive operation, which is used to process some requests of users and give users some response information;
IIS:
- Microsoft
Tomcat:
- Free, stable performance
- Lightweight server
3. Tomcat
3.1 installation
3.2 startup and configuration
Start close
[the external link image transfer fails. The source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-wpmrvoro-162020428070) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210419102025812. PNG)]
Access test: http://localhost:80/
Possible problems:
- The java environment is not configured
- Flash back problem: compatibility needs to be configured
- Garbled code problem
3.3 configuration
[the external chain image transfer fails. The source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-pcppekcu-162020412872) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210419104207244. PNG)]
You can configure the default port number for startup
- My default port is 80cat, but it's 80cat here
- mysql: 3306
- http:80
- https:443
You can configure the name of the host
- The default host name is: localhost - > 127.0.0.1
- The default location of web apps is webapps
Difficult interview questions
Please talk about how the website is accessed:
-
Enter a domain name: Enter
-
Check whether there is a mapping of this domain name under the C:\Windows\System32\drivers\etc\hosts configuration file of this machine
- Yes: directly return the corresponding ip address. In this address, there are web programs we need to access, which can be accessed directly
- No: go to the DNS server to find it. If it is found, it will be returned. If it is not found, it will be returned. If it is not found, it will be returned
3.4 publish a web site
If not, imitate first
- The website written by yourself can be accessed by putting it under the folder of the specified web application in the server
The structure that a website should have
--webapps : tomcat Server web catalogue -ROOT -FIRST_WEB_TEST - WEB-INF - web.xml - lib:web Application dependent jar package - classes: java program - index.html Default home page - static -css -js -img - ...
4. HTTP
4.1 what is HTTP
HTTP is a simple request response protocol, which usually runs on TCP
- Text: html, string
- Hypertext: picture music video location map
- 80
HTTPS: Secure
- 443
4.2 two times
- http 1.0
- HTTP/1.0: after the client can connect with the web server, it can only obtain one web resource
- http 2.0
- HTTP/1.1: after the client can connect with the web server, it can obtain multiple web resources
4.3 HTTP request
- Client - > send request - > server
Baidu:
Request line
- Request method in request line: GET
- Request method: GET POST
- GET: the request can carry fewer parameters, and the size will be limited. 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, which is not safe and efficient
request URL: https://www.baidu.com / request address Request method: GET get method/post method Status code: 200 OK Status code: 200 Remote address: 14.215.177.39:443
Message header
Accept: text/html Tells the browser what data types are supported Accept-Encoding: gzip, deflate, br Coding format Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 Language environment Cache-Control: max-age=0 Connection: keep-alive Tell the browser whether to disconnect or remain connected when the request is completed
4.4 HTTP response
- Server - > response - > client
Baidu:
Bdpagetype: 2 Bdqid: 0xdfb748bb0000f142 Cache-Control: private Connection: keep-alive Content-Encoding: gzip Content-Type: text/html;charset=utf-8
Responder
Accept: text/html Tells the browser what data types are supported Accept-Encoding: gzip, deflate, br Coding format Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 Language environment Cache-Control: max-age=0 Connection: keep-alive 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 web pages
Response status code
200: request response succeeded
3 * *: request redirection
4xx: resource not found
5xx: server code error, 502 gateway error
Common interview questions
When you enter the address in the address bar of your browser and press enter, the page can show what happened back?
5. Maven
Why learn Maven?
- In Java Web development, we need to use a large number of jar packages, which we need to import manually
- How can I make something automatically import and configure jar packages for me
Thus maven was born
5.1 Maven project architecture management tool
We are currently using to import Jar packages
Maven's core idea: Convention is greater than configuration
Maven will specify how you should write our java code. You must follow this specification
5.2 download and install Maven
[the external chain image transfer fails. The source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-jjfxwes7-162020428073) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210420150408639. PNG)]
After downloading, unzip it
5.3 configuration environment
The configuration is as follows:
- M2_HOME: bin directory under maven directory
- MAVEN_HOME: directory of maven
- Configure Maven in the path of the system_ HOME
[the external link image transfer fails, and the source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-dgb25dh2-162020428074) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210420152454575. PNG)]
5.4 Alibaba cloud image
<mirror> <id>nexus-aliyun</id> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf> </mirror>
5.5 local warehouse
Local warehouse
<localRepository>G:\java_environment\apache-maven-3.8.1-bin\apache-maven-3.8.1\maven-repo</localRepository>
5.6 using Maven in IDEA
- Start IDEA
- Create a Maven project
[the external chain image transfer fails. The source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-xowuhyxw-162020428075) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210420161225584. PNG)]
[the external link image transfer fails. The source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-svitdswz-162020412876) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210420161453192. PNG)]
- The project was built successfully
[the external link image transfer fails. The source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-gdsljjgi-162020428076) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210420162924921. PNG)]
-
Watch what's in Maven's warehouse
-
Maven settings in IDEA
[the external link image transfer fails. The source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-vxtputs-162020428077) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210420163608630. PNG)]
-
At this point, maven's configuration in IDEA is completed
5.7 create a normal maven project
Clean maven project
[the external link image transfer fails. The source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-ldufreo0-162020428077) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210420164255419. PNG)]
5.8 marking folders in IDEA
5.9 configure TOMCAT in IDEA (refer to https://www.cnblogs.com/weixinyu98/p/9822048.html )
[the external chain image transfer fails, and the source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-zpfolncx-162020428078) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210420165015425. PNG)]
[the external chain image transfer fails. The source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-8a4ucquz-162020428078) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210420171608706. PNG)]
[the external chain image transfer fails. The source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-klkd1irh-162020428078) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210420171624927. PNG)]
5.10 pom documents
pom.xml is the core configuration file of maven
<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
5.11 IDEA operation
6. Servlet
6.1 introduction to Servlet
- Servlet is a technology for sun company to develop dynamic web
- Sun provides a structure called Servlet in these API s. If you want to develop a Servlet program, you only need two steps
- Write a class to implement the servlet interface
- Deploy the developed java classes to the web server
The java program that implements the Servlet interface is called Servlet
6.2 Hello Servlet
-
Build a Maven project, delete the src directory, and then create Moudle in this project
-
Understanding of Maven father son project:
There will be a moudle in the parent project
<modules> <module>servlet-01</module> </modules>
Sub projects will have
<parent> <artifactId>javaweb-02-servlet2</artifactId> <groupId>com.fan</groupId> <version>1.0-SNAPSHOT</version> </parent>
Update web xml
<?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>
-
Maven environment optimization
- Modify web XML is the latest
- Complete the structure of maven
-
Write a servlet program
Write a common class to implement the servlet interface. The servlet interface has two default implementation classes: HttpServlet and GenerateServlet
public class HelloServlet extends HttpServlet { //Because get or post are only different ways of request implementation, they can call each other, and the business logic is the same @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // ServletOutputStream outputStream = resp.getOutputStream(); PrintWriter writer = resp.getWriter();//Response flow writer.println("Hello servlet"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); } }
-
Write Servlet mapping
Why mapping is needed: we write java programs, but we need to access them through the browser, and the browser needs to connect to the web server, so we need to register the Servlet we write in the web service and give it a path that the browser can access;
<!-- register Servlet --> <servlet> <servlet-name>hello</servlet-name> <servlet-class>com.fan.servlet.HelloServlet</servlet-class> </servlet> <!-- servlet Request path for --> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
-
Configure Tomcat
-
Start test
6.3 Servlet principle
6.4 Mapping problems
-
A Servlet can specify a mapping path
-
A Servlet can specify multiple mapping paths
-
A Servlet can specify a common mapping path
-
Specify some suffixes or prefixes, etc
-
Priority issues
It specifies that the inherent mapping path has the highest priority. If it cannot be found, it will go to the default processing request;
6.5 ServletContext
When the web container starts, it will create a corresponding Servlet object for each web application, which represents the current web application
- 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 parameters // this.getServletConfig(); servlet configuration // this.getServletContext(); servlet context ServletContext context = this.getServletContext(); String username = "Qin Dynasty"; context.setAttribute("username", username);//Save a data in Servlet System.out.println("Hello"); } }
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().println( "name" + username); } }
<servlet> <servlet-name>hello</servlet-name> <servlet-class>com.fan.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.fan.servlet.GetServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Getc</servlet-name> <url-pattern>/Getc</url-pattern> </servlet-mapping>
- Get 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().println(url); }
-
Request forwarding
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext context = this.getServletContext(); System.out.println("Entered ServletDemo01"); // RequestDispatcher requestDispatcher = context.getRequestDispatcher("/gp"); // requestDispatcher.forward(req,resp); context.getRequestDispatcher("/gp").forward(req,resp); }
-
Read resource file
Properties
- Create new properties in java directory
- Create new properties in the resources directory
Discovery: they are all packaged in the same path: classes. We commonly call this path class path
Idea: need a file stream
username=qingjiang password=123456
public class ServletDemo02 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"); Properties properties = new Properties(); properties.load(is); String username = properties.getProperty("username"); String password = properties.getProperty("password"); resp.getWriter().println(username + ":" + password); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); } }
6.6 HttpServletResponse
The web server receives the HTTP request from the client and creates an object representing the request and response respectively for this request;
- If you want to get the parameter requested by the client: request
- If you want to respond to some requests to customers: response
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);
Response status code
2. Common applications
-
Output message to browser
-
Download File
- To get the path of the downloaded file
- What is the name of the downloaded file
- Set up a way to make the browser support what we download
- Gets the input stream of the downloaded file
- Create cache
- Get OutStream object
- Write FileStream to buffer
- Use outputStream to output the data of the cache to the client
public class FileServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1. To get the path of the downloaded file // String path = this.getServletContext().getRealPath("/1.jpg"); String path = "G:\\java_project\\javaweb-02-servlet2\\Ao Mei.jpg"; System.out.println("Path to download file" + path); // 2. What is the name of the downloaded file String fileName = path.substring(path.lastIndexOf("\\") + 1); // 3. Set the Chinese file name urlencoder to make the browser support what we download 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(path); // 5. Create cache int len = 0; byte[] buffer = new byte[1024]; // 6. Get the OutStream object ServletOutputStream out = resp.getOutputStream(); // 7. Write the FileOutStream to the buffer buffer while ((len = in.read(buffer)) > 0){ out.write(buffer,0,len); } in.close(); out.close(); // 8. Use outputStream to output the data of the cache to the client } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); } }
Verification code function
How did the verification come from?
- Front end implementation
- The back-end implementation needs to use the java picture class to generate a picture
public class ImageServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //How to refresh the browser every 5 seconds resp.setHeader("refresh","3"); //Create a picture in memory BufferedImage image = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB); //Get pictures Graphics2D graphics = (Graphics2D) image.getGraphics(); //Set picture background color graphics.setColor(Color.white); graphics.fillRect(0,0,80,20); //Write data to pictures graphics.setColor(Color.BLACK); graphics.setFont(new Font(null,Font.BOLD,20)); graphics.drawString(makeNum(),0,20); //Tell the browser to open the request as a picture resp.setContentType("image/jpg"); //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("program","no-cache"); //Write the picture to the browser ImageIO.write(image, "jpg", resp.getOutputStream()); } //Generate random number private String makeNum(){ Random random = new Random(System.currentTimeMillis()); String num = random.nextInt(9999999) + ""; StringBuffer buffer = new StringBuffer(); for(int i = 0; i < 7 - num.length(); i++){ buffer.append("0"); } num = buffer.toString() + num; return num; } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); } }
redirect
After a web resource is requested by the client, it will notify the client to access another web resource. This process is called redirection
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { /*resp.setHeader("Location","/r/img"); resp.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);*/ resp.sendRedirect("/r/img"); }
Interview question: can you talk about the difference between redirection and forwarding?
Similarities:
- The page will jump
difference:
- When the request is forwarded, the url will not change
- The url will change when redirecting
6.7 HttpServletRequest
[the external link image transfer fails. The source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-ylzmbo6y-162020418079) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210422213351792. PNG)]
Request forwarding
Get front-end parameters
[the external chain image transfer fails. The source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-zujw0syb-162020428079) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210422213526989. PNG)]
@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[] hobbies = req.getParameterValues("hobbies"); System.out.println("========================="); System.out.println(username); System.out.println(password); System.out.println(Arrays.toString(hobbies)); System.out.println("========================="); req.getRequestDispatcher("/success.jsp").forward(req,resp); }
7. Cookie Session
7.1 conversation
Session: the user opens the browser, creates many hyperlinks and accesses many web resources. This process is called a session
Stateful conversation: a classmate has been to the classroom. Next time we come back to the classroom, we will know that this classmate has been to the classroom
How can you prove that you are a student of Xikai?
-
I'll give you the invoice
-
Sign up for Xikai. You've been here
How does a website prove you've been here?
Client server
- The server sends a letter to the client, and the next time the client visits the server, it is enough to bring the letter next time; cookie
- The server registers that you have been here, and I will match you when you come next time;
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 the information in the Session
Common scenario: website login
7.3 Cookie
- Get cookie from request
- The server responds to the client cookie
Cookie[] cookies = req.getCookies(); cookie.getName() cookie.getValue() new Cookie("LastLoginTime", System.currentTimeMillis() + ""); cookie.setMaxAge(60); resp.addCookie(cookie);
cookie: generally saved in the local user directory appdata;
Whether there is an upper limit for a website cookie!
- A cookie can only hold one piece of information
- A web site can send more than 20 cookie s to the browser
- cookie size is limited
Delete cookie:
- Do not set the validity period, close the browser and take effect automatically
- Set the validity period to 0
7.4 Session (key)
What is Session:
- The server will create a Session object for each user
- A Session monopolizes a browser. As long as the browser is not closed, the Session exists
- After the user logs in, the whole website can be accessed
The difference between Session and cookie:
- cookie is to write the user's data to the user's browser, which saves it
- Session is to write the user's data into the user's exclusive session and save it on the server side (save important information and reduce the waste of server resources)
- The Session object is created by the server
Usage scenario:
- Save a user's login information
- Shopping cart information
- The data often used in the whole website is saved in Session
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //Solve garbled code req.setCharacterEncoding("utf-8"); resp.setContentType("text/html; charset=utf-8"); resp.setCharacterEncoding("utf-8"); //Get Session HttpSession session = req.getSession(); //Save things in Session session.setAttribute("name", new Person("Qin Jiang",24)); //Get the ID of the Session String id = session.getId(); //Judge whether the Session is newly created if(session.isNew()){ resp.getWriter().write("session Created successfully, ID: "+id); } else { resp.getWriter().write("session Already exists in the server, ID: "+id); } //What did the Session do when it was created // Cookie cookie = new Cookie("JSESSIONID",id); // resp.addCookie(cookie); }
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //Solve garbled code req.setCharacterEncoding("utf-8"); resp.setContentType("text/html; charset=utf-8"); resp.setCharacterEncoding("utf-8"); //Get Session HttpSession session = req.getSession(); Person person = (Person) session.getAttribute("name"); System.out.println(person.toString()); }
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { HttpSession session = req.getSession(); //Manual logoff session.removeAttribute("name"); session.invalidate(); }
Automatic session Expiration:
<!-- set up Session Default effective time of --> <session-config> <!-- 15 Automatic failure after minutes --> <session-timeout>1</session-timeout> </session-config>
8.JSP
8.1 what is JSP
java server pages: java server-side pages, like servlets, are used for dynamic page design
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
How does JSP execute
-
There are no problems at the code level
-
Server internal work
There is a work directory in tomcat;
Using Tomcat in IDEA will generate a work directory in Tomcat in IDEA
route:
C:\Users\11482\.IntelliJIdea2019.3\system\tomcat\Unnamed_javeweb-session-cookie\work\Catalina\localhost\ROOT\org\apache\jsp
The discovery page is transformed into a Java program
[the external link image transfer fails. The source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-m37skalb-162020428080) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210423203437157. PNG)]
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 java classes
JSP is essentially a Servlet
[the external chain image transfer fails. The source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-h0suwzg6-162020428080) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210423210852536. PNG)]
In a 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");
Front end output format
8.3 JSP basic syntax
Any language has its own syntax. JSP, as an application of java counting, has some expanded syntax (just understand it), which is supported by java syntax.
JSP expression
<%--JSP expression 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 = 0; 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
<%! %>
JSP declaration: it will be compiled into the java class generated by JSP, and others will be generated into_ jspServlet method
8.4 instructions of JSP
<%@page args...%> <%@include file = " "%> <jsp:include page = ""/>
8.5 9 built in objects
- PageContext store things
- Request to store things
- Response
- Session storage
- Application(ServletContext) stores things
- config(ServletConfig)
- out
- page
- 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 valid in the server, from opening the server to closing the server
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
EL expression: ${}
- get data
- Perform operations
- Get common objects of web Development
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api --> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/taglibs/standard --> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency>
JSP tag
<jsp:forward page="jspStag2.jsp"> <jsp:param name="name" value="bai"></jsp:param> <jsp:param name="age" value="24"></jsp:param> </jsp:forward>
JSTL expression
The use of JSTL tag library is to make up for the deficiency of HTML tags; It has customized many tags that can be used by us. The function of tags is the same as that of java code.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Core label
[the external chain image transfer fails. The source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-n2bkxahz-162020428080) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210425200935608. PNG)]
Format label
SQL tag
XML tag
JSTL tag usage steps
- Introduce the corresponding taglib
- Use one of the methods
- jst packages are also required in Tomcat
<html> <head> <title>Title</title> </head> <body> <h4>if test</h4> <hr> <form action="coreif.jsp" method="get"> <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="Administrator, welcome!"/> </c:if> <c:out value="${isAdmin}"/> </body> </html>
<c:set var="score" value="85"/> <c:choose> <c:when test="${score>=90}"> Your grades are excellent! </c:when> <c:when test="${score>=80}"> Your grades are good! </c:when> <c:when test="${score>=70}"> Your grades are average! </c:when> <c:when test="${score>=60}"> Your grade is pass! </c:when> </c:choose>
<% ArrayList<String> people = new ArrayList<>(); people.add("Zhang San"); people.add("Li Si"); people.add("Wang Wu"); people.add("Zhao Liu"); request.setAttribute("list",people); %> <%-- var : Variables traversed each time items: Traversal object begin: start end : end step : step --%> <c:forEach var="people" items="${list}"> <c:out value="${people}"/><br> </c:forEach> <hr> <c:forEach begin="1" end="3" step="2" var="people" items="${list}"> <c:out value="${people}"/><br> </c:forEach>
8.7 JavaBean
JavaBean s have specific ways of writing:
- There must be a parameterless construct
- Property must be privatized
- There must be a corresponding get method
It is generally used to map fields in the database: ORM
ORM: Object Relational Mapping
- Table - > class
- Fields - > Properties
- Row record - > object
index | name | age | address |
---|---|---|---|
1 | Qinjiang 1 | 3 | Xi'an |
2 | Qinjiang 2 | 18 | Xi'an |
3 | Qinjiang 3 | 100 | Xi'an |
class people{ private int idx; private String name; private int age; private String address; } class A{ new people(1, "Qinjiang 1", 3, "Xi'an"); }
9.JDBC
What is JDBC: java connection database
[the external chain image transfer fails. The source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-lr5qahoo-162020418081) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210425212153658. PNG)]
jar package support is required:
- java.sql
- javax.sql
- mysql-connector-java...
Construction of experimental environment
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-02-02'); INSERT INTO users(id, `name`, `password`, email, birthday) VALUES (3, 'Wang Wu', '123456', 'ww@qq.com','2000-03-03');
Import database dependencies
<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version> </dependency> </dependencies>
Connect to database in IDEA
[the external chain image transfer fails. The source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-q9dqv3cn-162020418081) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210425221023070. PNG)]
JDBC fixed steps
- Load driver
- Connect database
- Object Statement: CRUD to send SQL to database
- Write SQL
- Execute SQL
- Close connection
public class TestJDBC { public static void main(String[] args) throws ClassNotFoundException, SQLException { //configuration information String url = "jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characteoEncoding=utf-8"; String username = "root"; String password = "123"; //1. Load drive Class.forName("com.mysql.jdbc.Driver"); //2. Connect to the database Connection connection = DriverManager.getConnection(url, username, password); //3. Send SQL object Statement to the database Statement statement = connection.createStatement(); //4. Write SQL String sql = "select * from users"; //5. Execute SQL query and return a result set ResultSet resultSet = statement.executeQuery(sql); while (resultSet.next()){ System.out.println("id = " + resultSet.getObject("id")); System.out.println("name = " + resultSet.getObject("name")); System.out.println("password = " + resultSet.getObject("password")); System.out.println("email = " + resultSet.getObject("email")); System.out.println("birthday = " + resultSet.getObject("birthday")); } //6. Close the connection to release resources. Turn it on first and then turn it off resultSet.close(); statement.close(); connection.close(); } }
Precompiled SQL
public static void main(String[] args) throws ClassNotFoundException, SQLException { //configuration information String url = "jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characteoEncoding=utf-8"; String username = "root"; String password = "123"; //1. Load drive Class.forName("com.mysql.jdbc.Driver"); //2. Connect to the database Connection connection = DriverManager.getConnection(url, username, password); //3. Write SQL String sql = "insert into users (id, name, password, email, birthday) VALUES (?,?,?,?,?);"; //4. Precompile PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, 4);//For the first placeholder? The value of is assigned to 1 preparedStatement.setString(2, "Madness theory JAVA"); preparedStatement.setString(3, "123456"); preparedStatement.setString(4, "24736743@qq.com"); preparedStatement.setDate(5, 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 to release resources. Turn it on first and then turn it off preparedStatement.close(); connection.close(); }
affair
Either all succeed or all fail
Open transaction Transaction commit Transaction rollback Close transaction transfer accounts: A: 1000 B: 1000 A --100--> B
Junit unit test
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency>
Build an environment
@Test public void test() throws ClassNotFoundException, SQLException { //configuration information String url = "jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characteoEncoding=utf-8"; String username = "root"; String password = "123"; Connection connection = null; try { //1. Load drive Class.forName("com.mysql.jdbc.Driver"); //2. Connect to the database connection = DriverManager.getConnection(url, username, password); //3. Notify the database to start the transaction 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(); System.out.println("Submitted successfully~"); } catch (Exception e){ connection.rollback(); e.printStackTrace(); } finally { connection.close(); } }
10. MVC three-tier architecture
What is MVC: model view controller
[the external link image transfer fails. The source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-o8p3p8wu-162020412882) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210426145246418. PNG)]
model
- Business processing: business logic (Service)
- Data persistence layer: CRUD
view
- Display data
- Provide link to initiate Servlet request
Controller
-
Accept the user's request: req: request parameters, session information
-
Give it to the business layer to process the corresponding code
-
Control view jump
Sign in -------> Accept user login request -----> Handle the user's request (get the user login parameters, username,password) ------>Give it to the business layer to handle the login business (judge whether the user name and password are correct)-------->Dao Whether to query the user name and password of the layer -->database
11. Filter
Filter: filter, which is used to filter the data of the website
- Deal with Chinese garbled code
- validate logon
It is suggested to save the picture directly to the external link (javaassg-1625g-image. 2020203) (it is suggested to upload the picture directly to the external link: \ javaassg-1625g-image. 2020203)
Filter development steps
1. Guide Package
[the external chain image transfer fails. The source station may have an anti-theft chain mechanism. It is recommended to save the image and upload it directly (img-6s3rkss9-162020418082) (G: \ vscode_files \ blog \ JavaWeb. Assets \ image-20210426204447136. PNG)]
2. Write filter
public class CharacterEncodingFilter implements Filter { 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 peer filterchain doFilter */ public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { servletRequest.setCharacterEncoding("utf-8"); servletResponse.setCharacterEncoding("utf-8"); servletResponse.setContentType("text/html;charset=utf-8"); System.out.println("CharacterEncodingFilter Before execution..."); filterChain.doFilter(servletRequest,servletResponse);//Let our program go on System.out.println("CharacterEncodingFilter After execution..."); } public void destroy() { System.out.println("CharacterEncodingFilter Destroy"); } }
- On the web Configure Filter in XML
<filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>com.fan.filter.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/servlet/*</url-pattern> </filter-mapping>
12. Listener
Implement a listener interface
public class OnlineCountListener implements HttpSessionListener { public void sessionCreated(HttpSessionEvent httpSessionEvent) { ServletContext context = httpSessionEvent.getSession().getServletContext(); System.out.println(httpSessionEvent.getSession().getId()); Integer onlineCount = (Integer) context.getAttribute("OnlineCount"); if(onlineCount == null){ onlineCount = new Integer(1); } else { int count = onlineCount.intValue(); onlineCount = new Integer(count + 1); } context.setAttribute("OnlineCount",onlineCount); } public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { ServletContext context = httpSessionEvent.getSession().getServletContext(); Integer onlineCount = (Integer) context.getAttribute("OnlineCount"); if(onlineCount == null){ onlineCount = new Integer(0); } else { int count = onlineCount.intValue(); onlineCount = new Integer(count - 1); } context.setAttribute("OnlineCount",onlineCount); } }
<listener> <listener-class>com.fan.Listener.OnlineCountListener</listener-class> </listener>
13. Common applications of filters and monitors
Listener: often used in GUI programming
Users can enter the home page only after logging in. They can't enter the home page after logging out!
-
After the user logs in, put the user's data into the session
-
When entering the home page, judge whether the user has logged in
HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; if(request.getSession().getAttribute("USER_SESSION") == null){ response.sendRedirect("/error.jsp"); } filterChain.doFilter(request,response);
ated(HttpSessionEvent httpSessionEvent) {
ServletContext context = httpSessionEvent.getSession().getServletContext();
System.out.println(httpSessionEvent.getSession().getId()); Integer onlineCount = (Integer) context.getAttribute("OnlineCount"); if(onlineCount == null){ onlineCount = new Integer(1); } else { int count = onlineCount.intValue(); onlineCount = new Integer(count + 1); } context.setAttribute("OnlineCount",onlineCount); } public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { ServletContext context = httpSessionEvent.getSession().getServletContext(); Integer onlineCount = (Integer) context.getAttribute("OnlineCount"); if(onlineCount == null){ onlineCount = new Integer(0); } else { int count = onlineCount.intValue(); onlineCount = new Integer(count - 1); } context.setAttribute("OnlineCount",onlineCount); }
}
```xml <listener> <listener-class>com.fan.Listener.OnlineCountListener</listener-class> </listener>
13. Common applications of filters and monitors
Listener: often used in GUI programming
Users can enter the home page only after logging in. They can't enter the home page after logging out!
-
After the user logs in, put the user's data into the session
-
When entering the home page, judge whether the user has logged in
HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; if(request.getSession().getAttribute("USER_SESSION") == null){ response.sendRedirect("/error.jsp"); } filterChain.doFilter(request,response);