Author Archives: Robins

[Solved] MAC Nginx Error: ginx.pid“ failed (2: No such file or directory)

(base) li@lideMacBook-Pro ~ % nginx -s reload
nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory)

The problem is that nginx.pid can’t be found, so there is an error in reload. It’s certain that the nginx service hasn’t started at this time. Start nginx, and then there is PID. This problem is solved.

IdentityServer4 Error: well-known/openid-configuration: HTTPS required

When the client sends a connection request to identityserver4, an error is reported: HTTPS required

Error connecting to http://192.168.20.6:5601/.well-known/openid-configuration: HTTPS required

Since the identity server 4 project does not enable HTTPS, the client does not write it well

It was written like this at the beginning, using WinForm

string AuthorityAddress = ConfigurationManager.AppSettings["AuthorityAddress"];

var client = new HttpClient() ; 
var disco = await client.GetDiscoveryDocumentAsync(AuthorityAddress);

if (disco.IsError)
{
    LogHelper.LogError(disco.Error);
    return false;
}

report errors

Later, you can set the request policy through discoverydocument request

string AuthorityAddress = ConfigurationManager.AppSettings["AuthorityAddress"];

var client = new HttpClient() ; 
// var disco = await client.GetDiscoveryDocumentAsync(AuthorityAddress);

var config = new DiscoveryDocumentRequest() { Address = AuthorityAddress, Policy = new DiscoveryPolicy() { RequireHttps = false } };
var disco = await client.GetDiscoveryDocumentAsync(config);

if (disco.IsError)
{
    LogHelper.LogError(disco.Error);
    return false;
}

In our development environment, sometimes we don’t care whether it’s HTTP or HTTPS. When we deploy, we find that there are many problems.

You need to issue a certificate to deploy HTTPS. If you use intranet, just deploy HTTP directly

[Solved] “Field pet in XXX.HelloController required a bean of type ‘XXX.Pet‘ that could not be found.“

abnormal

2021-06-22 14:10:56.860 ERROR 17884 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Field pet in com.demo.springboot.controller.HelloController required a bean of type 'com.demo.springboot.bean.Pet' that could not be found.

The injection point has the following annotations:
	- @org.springframework.beans.factory.annotation.Autowired(required=true)

The following candidates were found but could not be injected:
	- Bean method 'pet' in 'MyConfig' not loaded because @ConditionalOnBean (names: user01; SearchStrategy: all) did not find any beans named user01


Action:

Consider revisiting the entries above or defining a bean of type 'com.demo.springboot.bean.Pet' in your configuration.

reason

Let’s analyze the printed error log

Let’s look at the hellocontroller class, in which the bean component of pet type is injected, but an error is reported that the injection is not successful

Then, we click the arrow icon on the left to go to the method of injecting this component. We find that it is the pet () method of the myconfig class, where the @ bean annotation is used to inject the pet component.

However, we use @ conditionalonbean (name = user01) annotation above the @ bean annotation, which means that a component named “user01” must exist in the container before the pet component can be injected, otherwise it will not be injected.

solve

Cancel the @ conditionalonbean (name = user01) annotation, or inject a component named “user01”.

But what is the reason for this mistake?Note that the bean component to be used by the @ conditionalonbean annotation condition should be declared above the annotation, not below.

[Solved] K8s Install Error: docker-ce conflicts with 2:docker-1.13.1-208.git7d71120.el7_9.x86_64

Docker-CE

[root@localhost ~]#  yum list installed | grep docker
containerd.io.x86_64                       1.4.6-3.1.el7               @docker-ce-stable
docker-ce.x86_64                           3:20.10.7-3.el7             @docker-ce-stable
docker-ce-cli.x86_64                       1:20.10.7-3.el7             @docker-ce-stable
docker-ce-rootless-extras.x86_64           20.10.7-3.el7               @docker-ce-stable
docker-scan-plugin.x86_64                  0.8.0-3.el7                 @docker-ce-stable
[root@localhost ~]#  yum remove -y docker-ce*
Loaded plugins: fastestmirror, langpacks
Resolving Dependencies
--> Running transaction check
---> Package docker-ce.x86_64 3:20.10.7-3.el7 will be erased
---> Package docker-ce-cli.x86_64 1:20.10.7-3.el7 will be erased
--> Processing Dependency: docker-ce-cli for package: docker-scan-plugin-0.8.0-3.el7.x86_64
---> Package docker-ce-rootless-extras.x86_64 0:20.10.7-3.el7 will be erased
--> Running transaction check
---> Package docker-scan-plugin.x86_64 0:0.8.0-3.el7 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                    Arch    Version            Repository          Size
================================================================================
Removing:
 docker-ce                  x86_64  3:20.10.7-3.el7    @docker-ce-stable  115 M
 docker-ce-cli              x86_64  1:20.10.7-3.el7    @docker-ce-stable  156 M
 docker-ce-rootless-extras  x86_64  20.10.7-3.el7      @docker-ce-stable   24 M
Removing for dependencies:
 docker-scan-plugin         x86_64  0.8.0-3.el7        @docker-ce-stable   13 M

Transaction Summary
================================================================================
Remove  3 Packages (+1 Dependent package)

Installed size: 309 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Erasing    : docker-ce-rootless-extras-20.10.7-3.el7.x86_64               1/4 
  Erasing    : 3:docker-ce-20.10.7-3.el7.x86_64                             2/4 
  Erasing    : docker-scan-plugin-0.8.0-3.el7.x86_64                        3/4 
  Erasing    : 1:docker-ce-cli-20.10.7-3.el7.x86_64                         4/4 
  Verifying  : 3:docker-ce-20.10.7-3.el7.x86_64                             1/4 
  Verifying  : 1:docker-ce-cli-20.10.7-3.el7.x86_64                         2/4 
  Verifying  : docker-ce-rootless-extras-20.10.7-3.el7.x86_64               3/4 
  Verifying  : docker-scan-plugin-0.8.0-3.el7.x86_64                        4/4 

Removed:
  docker-ce.x86_64 3:20.10.7-3.el7                                              
  docker-ce-cli.x86_64 1:20.10.7-3.el7                                          
  docker-ce-rootless-extras.x86_64 0:20.10.7-3.el7                              

Dependency Removed:
  docker-scan-plugin.x86_64 0:0.8.0-3.el7                                       

Complete!

Docker CE is a community version, which has not been verified by kubernetes. There may be compatibility problems!

@Controlleradvice exception [How to Solve]

ControllerAdvice

 @ControllerAdviceSpring 3.2 provides a new annotation, which is a Controller enhancer that adds some logic to the methods annotated by @RequestMapping in the controller. The most common one is exception handling

2: @controlleradvice with exception handler

When throwing exceptions to the controller, you can unify the exception handling by specifying the returned json format or jumping to an error page

3: Examples

@Slf4j
 @ControllerAdvice
 public class ExceptionHandlerAdvice {

     @ResponseStatus(HttpStatus.OK)
     @ResponseBody
     @ExceptionHandler({MethodArgumentNotValidException.class})
     public <T> ResponseEntity<ResultDTO<T>> handleBusinessException(MethodArgumentNotValidException method) {
         String defaultMessage = method.getBindingResult().getFieldError().getDefaultMessage();
         log.error("Error in parameters: {}", defaultMessage);
         return ResponseEntity.ok(ResultDTO.getErrorResult(defaultMessage));
     }

     @ResponseStatus(HttpStatus.OK)
     @ResponseBody
     @ExceptionHandler(ValidationException.class)
     public <T> ResponseEntity<ResultDTO<T>> handleBusinessException(ValidationException exception) {
         String defaultMessage = exception.getMessage();
         log.error("Error in parameters,{}", defaultMessage);
         return ResponseEntity.ok(ResultDTO.getErrorResult(defaultMessage));
     }
 }

The problem of date format conversion between springboot and front end

A unique experience of stepping on a pit

When there is a date of string type in the current page request, the Java backend needs to convert the string type to the date type. In springboot, the convertor interface is implemented through the custom dateconverterconfig class, which is put into the spring container for conversion.

! Here’s the key point:
when I knock step by step, there is still an exception * * here was an unexpected error (type = bad request, status = 400). * * *. Finally, I found that the converter’s package was wrong
remember: import org.springframework.core.convert.converter.converter;

package com.jiansheng.util;

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @Author: Jiansheng
 * @DateTime: 2021/6/27 10:35
 * @Description:Date
 */
@Component
public class DateConverterConfig implements Converter<String, Date> {

    private static final List<String> formarts = new ArrayList<>(4);
    static{
        formarts.add("yyyy-MM");
        formarts.add("yyyy-MM-dd");
        formarts.add("yyyy-MM-dd HH:mm");
        formarts.add("yyyy-MM-dd HH:mm:ss");
    }

    @Override
    public Date convert(String source) {
        String value = source.trim();
        if ("".equals(value)) {
            return null;
        }
        if(source.matches("^\\d{4}-\\d{1,2}$")){
            return parseDate(source, formarts.get(0));
        }else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")){
            return parseDate(source, formarts.get(1));
        }else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")){
            return parseDate(source, formarts.get(2));
        }else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")){
            return parseDate(source, formarts.get(3));
        }else {
            throw new IllegalArgumentException("Invalid boolean value '" + source + "'");
        }
    }

    /**
     * Formatting the date
     * @param dateStr String Character type date
     * @param format String Format
     * @return Date Date
     */
    public  Date parseDate(String dateStr, String format) {
        Date date=null;
        try {
            DateFormat dateFormat = new SimpleDateFormat(format);
            date = dateFormat.parse(dateStr);
        } catch (Exception e) {

        }
        return date;
    }

}

Jiansheng

[Solved] Doris StreamLoad Error: load by MERGE or DELETE need to upgrade table to support batch delete

Streamload error

load by MERGE or DELETE need to upgrade table to support batch delete

Refer to Doris batch delete function

resolvent

I set the parameters and restart Fe
to find that the table still does not support this function
it needs to be re created or manually executed to dynamically change the configuration.

Batch the unique test table_ Delete feature on (add hidden columns)

show create table csv_upload_test_unique
desc csv_upload_test_unique

set show_hidden_columns=true

alter table csv_upload_test_unique enable feature "BATCH_DELETE";

Then execute streamload

[Solved] Cannot find class: com.mysql.jdbc.Driver

When using mybatis to write the entry instance for the first time, I encountered the error of cannot find class: com.mysql.jdbc.driver database property configuration file content:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/exercise?serverTimezone=GMT%2B8
jdbc.user=root
jdbc.password=1996mysqlyue

Mybatis configuration part:

            <!--Four basic information for connecting to the database-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.user}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>

Confirm that there is no space in the quotation marks of the value value in the configuration file, and there is no space in the configuration information of the database property file, but still report an error
subsequent solution:
modified the dependency version of MySQL connector introduced by Maven.

Ng Zorro antd file stream upload, access to upload file path

HTML page

<nz-upload 
        nzAccept="application/pdf,image/jpeg,image/jpg,image/png"
        [(nzFileList)]="fileList"
        [(nzAction)]="UPLOAD_FILE"
        [nzShowButton]="fileList.length < 1"
        [nzBeforeUpload]="beforeUpload"
        (nzChange)="getFileUrl($event)" >
        <button nz-button>
            <i nz-icon nzType="upload"></i>
            <span>upload files</span>            
        </button>
</nz-upload>

TS file

 import { Component, OnInit } from '@angular/core';
 import { NzMessageService, NzModalService, UploadFile } from 'ng-zorro-antd';
    
 @Component({
     selector: 'app-detail',
     templateUrl: './detail.component.html',
     styleUrls: ['./detail.component.scss']
 })
 export class DetailComponent implements OnInit {
  	UPLOAD_FILE = ''; // File upload path
    constructor(
         private activeRoute: ActivatedRoute,
         private msg: NzMessageService,
         private router: Router,
         private message: NzModalService,
    ){ }
              
    fileList: UploadFile[] = [];
  	beforeUpload = (file: UploadFile): boolean => {
         // Judgment on the upload file type
         const type = file.type;
               
         const str = ['application/pdf', 'image/jpg', 'image/jpeg', 'image/png'];
              if (str.indexOf(type) < 0) {
                  this.message.warning({
                      nzTitle: 'Warning',
                      nzContent: 'Select file failed, only pdf, jpg, jpeg, png and other formats are supported'
                  });
                  return false;
              }
              // Limit on upload file size
              const isLt20M = file.size / 1024 / 1024 < 30;
              if (!isLt20M) {
                  this.message.warning({
                      nzTitle: 'Warning',
                      nzContent: 'The file must be less than 30M'
                  });
                  return false;
              }
              this.fileList = this.fileList.concat(file);
              // When the type and size meet the requirements, upload directly; if return false, then you need to call the upload method manually
              return true;
          }
          // Method to get the path when the file upload is finished     	 
      getFileUrl({ file, fileList }): void {
              const status = file.status;
              if (status === 'done') {
                this.zizhi_prove = file.response.data
              } else if (status === 'error') {
                this.msg.error(`${file.name} file upload failed.`);
              }
        }
  	}

Serverlet: How to Add, Delete, Modify and Query item code

Serverlet project code

Define database connection closure

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.*;

public class DBManager {
	
	private static final String DRIVERNAME = "com.mysql.jdbc.Driver";
	private static final String URL = "jdbc:mysql://127.0.0.1:3306/bbs?useUnicode=true&characterEncoding=utf8";
	private static final String USERNAME = "root";
	private static final String USERPWD = "123456";
	
	public Connection getconn() throws ClassNotFoundException, SQLException {
		Class.forName(DRIVERNAME);
		Connection conn=DriverManager.getConnection(URL,USERNAME,USERPWD);
		System.out.print("DB Success!!");
		return  conn;
		
	}
	
	public void closeAll(ResultSet rs,PreparedStatement pstmt,Connection conn) throws SQLException {
			if(rs!=null) {
				rs.close();
			}
			if(pstmt!=null) {
				pstmt.close();
			}
			if(conn!=null) {
				conn.close();
			}
	}	
}

Add, delete, change and search (BaseDao)

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
 * 
 * @author Administrator
 *General method of adding, deleting and checking
 */
public class BaseDao {

	public boolean insert_update_del(String sql,Object val[]) throws ClassNotFoundException, SQLException {
		boolean flag=false;
		Connection con=new DBManager().getconn();
		PreparedStatement pstmt=con.prepareStatement(sql);
		if(val!=null) {
			for(int i=0;i<val.length;i++) {
				pstmt.setObject(i+1, val[i]);
			}			
		}	
		if(pstmt.executeUpdate()>0) {
			flag=true;
		}
		return flag;
	}
	
	public ResultSet query(String sql,Object val[]) throws ClassNotFoundException, SQLException {
		boolean flag=false;
		Connection con=new DBManager().getconn();
		PreparedStatement pstmt=con.prepareStatement(sql);
		if(val!=null) {
			for(int i=0;i<val.length;i++) {
				pstmt.setObject(i+1, val[i]);
			}			
		}	
		ResultSet rs=pstmt.executeQuery();
		return rs;
	}
}

Inherit, add, delete, modify and query

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class StudentsDao extends BaseDao{
	
	public boolean regeditStudent(Student stu) throws ClassNotFoundException, SQLException {
		String sql="insert into students values (null,?,?)";
		Object[] val= {stu.getSname(),stu.getSpwd()};
		return insert_update_del(sql,val);
	}
	
	public List<Student> quaryAll() throws ClassNotFoundException, SQLException{
		List<Student> list=new ArrayList<Student>();
		String sql="select * from students";
		Object[] val= {};
		ResultSet rs=query(sql,val);
		while(rs.next()) {
			Student stu=new  Student();
			stu.setSid(rs.getInt("sid"));
			stu.setSname(rs.getString("sname"));
			stu.setSpwd(rs.getString("spwd"));
			list.add(stu);
		}
		return list;
	}
	public Student queryById(int sid) throws ClassNotFoundException, SQLException {
		Student stu=new Student();
		String sql="select * from students where sid=?";
		Object[] val= {sid};
		ResultSet rs=query(sql,val);
		while(rs.next()) {
			stu.setSid(rs.getInt("sid"));
			stu.setSname(rs.getString("sname"));
			stu.setSpwd(rs.getString("spwd"));
		}
		return stu;
	}
	public boolean updateStudent(Student stu) throws ClassNotFoundException, SQLException {
//		Student stu=new Student();
		String sql="update students set sname=?,spwd=?where sid=?";
		Object[] val= {stu.getSname(),stu.getSpwd(),stu.getSid()};
		if(insert_update_del(sql,val)) {
			return true;
		}
		else {
			return false;
		}
	}
}

RegeditServlet

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class RegeditServlet
 */
@WebServlet("/RegeditServlet")
public class RegeditServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public RegeditServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
//		doGet(request, response);
		System.out.println("Welcome……");
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		
		String sname=request.getParameter("uname");
		String spwd=request.getParameter("upwd");
		Student stu=new Student();
		stu.setSname(sname);
		stu.setSpwd(spwd);
		try {
			if(new StudentsDao().regeditStudent(stu)) {
//				response.sendRedirect("success.jsp");
				response.sendRedirect("queryAllServlet");
			}else {
				response.sendRedirect("error.jsp");
			}
		} catch (ClassNotFoundException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

Registration page (regedit)

<%@ page language="java" contentType="text/html; charset=utf-8"
    %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>User registration page</h1>
	<form action="regeditservlet" method="post">
		<p>ursename:<input type="text" name="uname"/></p>
		<p>password:<input type="password" name="upwd"/></p>
		<input type="submit" value="register"/>
		
	</form>

</body>
</html>

Error page

<%@ page language="java" contentType="text/html; charset=utf-8"
    %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>Failed to register</h1>
</body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/Demo4.xsd" id="WebApp_ID" version="3.1">
  <display-name>Demo4</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>regeditservlet</servlet-name>
    <servlet-class>aaa.com.RegeditServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>regeditservlet</servlet-name>
    <url-pattern>/regeditservlet</url-pattern>
  </servlet-mapping>
  
  <!--Add additional content here -->

</web-app>

EditServlet

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class EditServlet
 */
@WebServlet("/EditServlet")
public class EditServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public EditServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(request, response);
//		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
//		doGet(request, response);
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		
		try {
			int sid=Integer.parseInt(request.getParameter("uid"));
			String sname=request.getParameter("uname");
			System.out.println(sname);
			String spwd=request.getParameter("upwd");
			System.out.println(spwd);
			Student stu=new Student();
			stu.setSid(sid);
			stu.setSname(sname);
			stu.setSpwd(spwd);
		
			if(new StudentsDao().updateStudent(stu)) {
				response.sendRedirect("queryallservlet");
			}else {
				response.sendRedirect("error.jsp");
			}
		} catch (ClassNotFoundException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

QueryAllServlet

import java.io.IOException;
import java.sql.SQLException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class QueryAllServlet
 */
@WebServlet("/queryAllServlet")
public class QueryAllServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public QueryAllServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		try {
			List<Student> list=new StudentsDao().quaryAll();
			request.setAttribute("list", list);
			request.getRequestDispatcher("show.jsp").forward(request, response);
		} catch (ClassNotFoundException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

Show page

<%@ page language="java" contentType="text/html; charset=utf-8"
    %>
<%@ page import="java.util.*" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>User Information Details</h1>
<table>
<tr>
	<td>num</td>
	<td>name</td>
	<td>password</td>
	<td>Operation</td>
<tr>

<c:forEach var="stu" items="${list}" step="1">
<tr>
	<td>${stu.sid}</td>
	<td>${stu.sname}</td>
	<td>${stu.spwd}</td>
	<td><a href="updateservlet?sid=${stu.sid}">修改</a>|<a href="delserverlet?sid=${stu.sid}">删除</a></td>
<tr>
</c:forEach>


</table>
</body>
</html>

web.xml

  <servlet>
    <servlet-name>editservlet</servlet-name>
    <servlet-class>aaa.com.EditServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>editservlet</servlet-name>
    <url-pattern>/editservlet</url-pattern>
  </servlet-mapping>

web.xml

  <servlet>
    <servlet-name>queryallservlet</servlet-name>
    <servlet-class>aaa.com.QueryAllServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>queryallservlet</servlet-name>
    <url-pattern>/queryallservlet</url-pattern>
  </servlet-mapping>

UpdateServlet

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class UpdateServlet
 */
@WebServlet("/updateServlet")
public class UpdateServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public UpdateServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
//		response.getWriter().append("Served at: ").append(request.getContextPath());
		doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		int sid=Integer.parseInt(request.getParameter("sid"));
		System.out.println(sid);
		Student stu=new Student();
		try {
			stu=new StudentsDao().queryById(sid);
			request.setAttribute("stu", stu);
			request.getRequestDispatcher("update.jsp").forward(request, response);
//			System.out.println(stu.sid);
		} catch (ClassNotFoundException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

Modify page

<%@ page language="java" contentType="text/html; charset=utf-8"
    %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>user update</h1>
	<form action="editservlet" method="post">
		<p>number:<input type="text" name="uid" readonly="readonly" value="${stu.sid}"/></p>
		<p>username:<input type="text" name="uname" value="${stu.sname}"/></p>
		<p>password:<input type="password" name="upwd" value="${stu.spwd}"/></p>
		<input type="submit" value="modify"/>
		
	</form>
</body>
</html>

web.xml

  <servlet>
    <servlet-name>updateservlet</servlet-name>
    <servlet-class>aaa.com.UpdateServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>updateservlet</servlet-name>
    <url-pattern>/updateservlet</url-pattern>
  </servlet-mapping>

SubServer

import java.io.IOException;
import java.sql.SQLException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class DeleteServlet
 */
@WebServlet("/DeleteServlet")
public class DeleteServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public DeleteServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
//		response.getWriter().append("Served at: ").append(request.getContextPath());
		doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		int sid = Integer.parseInt(request.getParameter("sid"));
		Student stu=new Student();
		stu.setSid(sid);
		try {
			if(new StudentsDao().deleteStudent(sid)) {
				response.sendRedirect("queryAllServlet");
			}else {
				response.sendRedirect("error.jsp");
			}
		} catch (ClassNotFoundException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

web.xml

  <servlet>
    <servlet-name> delserverlet</servlet-name>
    <servlet-class>aaa.com.DelServerlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>delserverlet</servlet-name>
    <url-pattern>/delserverlet</url-pattern>
  </servlet-mapping>