java服務器端開發-servlet:4_3、實現一個servlet處理多種請求_“增刪改查”員工信息

聲明:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!!

目錄

一、前言

二、如何讓一個servlet處理多種請求?

step1,使用後綴匹配模式

step2,分析請求資源路徑

1、新建一個ActionServlet

2、效果演示-匹配 url路徑

3、把6個 Servlet邏輯處理代碼放在 ActionServlet中

4、注意:重定向、表單提交等位置,需要修改爲點do


一、前言

上一篇文章我們介紹的內容:把 Servlet中jdbc 連接和操作(增刪改查)數據庫的代碼抽取出來,以及結合dao和工廠模式,優化實現了“增刪改查”員工信息的相關代碼。詳細可參考博文:原創 java服務器端開發-servlet:4_2、dao模式_工廠模式_“增刪改查”員工信息

這篇文章我們將繼續進行優化實現,之前的代碼寫了6個Servlet類進行“增刪改查”員工信息,接下來我們把它整合成一個Servlet,即實現一個servlet處理多種請求_“增刪改查”員工信息。

有關理論知識介紹,可參考博文:原創 java服務器端開發-servlet:4、dao 、一個servlet處理多種請求、servlet處理請求資源路徑、將中文數據插入數據庫

二、如何讓一個servlet處理多種請求?

step1,使用後綴匹配模式

我們可以把之前的,配置文件代碼: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/web-app_3_1.xsd"
	version="3.1">

	<display-name>web10</display-name>

	<servlet>
		<servlet-name>action</servlet-name>
		<servlet-class>web.ActionServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>action</servlet-name>
		<!-- 後綴匹配: 
		 (1)使用"*."開頭,後接任意的1個或者多個字符
		 (2)匹配所有以".do"結尾的請求。 
		 常見如下“url-pattern”標籤 -->
		<url-pattern>*.do</url-pattern>
		<!-- 之前是這樣寫的 -->
		<!-- <url-pattern>/show</url-pattern> -->
	</servlet-mapping>

</web-app>

step2,分析請求資源路徑

1、新建一個ActionServlet

之前的6個 Servlet代碼就不要啦,新建一個ActionServlet

package web;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * http://localhost:8080/web10/show.do 
 * http://localhost:8080/web10/add.do
 * http://localhost:8080/web10/del.do 
 * http://localhost:8080/web10/delAll.do
 * http://localhost:8080/web10/load.do 
 * http://localhost:8080/web10/update.do
 * 
 * @author luminal
 */
public class ActionServlet extends HttpServlet {

	public void service(HttpServletRequest request, 
			HttpServletResponse response) throws ServletException, IOException {

		// 步驟1:獲得請求資源路徑
		String uri = request.getRequestURI();
		System.out.println("uri--->" + uri);// /web10/show.do

		// 步驟2:把請求資源路徑簡化
		String action = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf("."));
		System.out.println("action--->" + action);// /show

		// 步驟3:匹配資源路徑
		if (action.equals("/show")) {
			System.out.println("查找員工列表...");
		} else if (action.equals("/add")) {
			System.out.println("添加員工信息...");
		} else if (action.equals("/del")) {
			System.out.println("刪除個人員工信息...");
		} else if (action.equals("/delAll")) {
			System.out.println("刪除所有員工信息...");
		} else if (action.equals("/load")) {
			System.out.println("查找一條員工信息,前端頁面可編輯,用於修改員工信息....");
		} else if (action.equals("/update")) {
			System.out.println("修改員工信息-操作修改數據庫...");
		}

	}
}

2、效果演示-匹配 url路徑

啓動tomact,部署web項目,在谷歌瀏覽器輸入:http://localhost:8080/web10/show

這時候會看到控制檯打印如下:

現在路徑可以匹配到了,那麼我們不妨把其他 6個 Servlet邏輯處理代碼,放在上面的條件語句當中

 

3、把6個 Servlet邏輯處理代碼放在 ActionServlet中

下面是把6個 Servlet邏輯處理代碼放在 ActionServlet中的具體代碼

package web;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dao.EmployeeDAO;
import entity.Employee;
import util.Factory;

/**
 * http://localhost:8080/web10/show.do
 * http://localhost:8080/web10/add.do
 * http://localhost:8080/web10/del.do
 * http://localhost:8080/web10/delAll.do
 * http://localhost:8080/web10/load.do
 * http://localhost:8080/web10/update.do
 * @author luminal
 */
public class ActionServlet extends HttpServlet{
	
	public void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException,IOException{
		
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		//步驟1:獲得請求資源路徑
		String uri = request.getRequestURI();
		//步驟2:把請求資源路徑簡化
		String action = uri.substring(uri.lastIndexOf("/"),
				uri.lastIndexOf("."));
		
		//步驟3:匹配簡化後的資源路徑
		//依據分析結果,調用不同的分支進行處理
		//http://ip:port/appname/show.do
		if(action.equals("/show")){//查找員工列表
			System.out.println("查找員工列表...");
			try {
				out.println("<table border='1' width='60%' " +
						"cellpadding='0' cellspacing='0'>");
				out.println("<tr><td>ID</td><td>姓名</td>" +
						"<td>薪水</td><td>年齡</td>" +
						"<td>操作</td></tr>");
				EmployeeDAO dao = 
					(EmployeeDAO)Factory.getInstance(
							"EmployeeDAO");
				List<Employee> employees = 
					dao.findAll();
				for(int i=0;i<employees.size();i++){
					Employee e = employees.get(i);
					int id = e.getId();
					String name = e.getName();
					double salary = e.getSalary();
					int age = e.getAge();
					out.println("<tr><td>" + id 
							+ "</td><td>" + name 
							+ "</td><td>" + salary 
							+"</td><td>" + age 
							+ "</td><td>" +
									"<a href='del.do?id=" 
							+ id + "'>刪除</a>&nbsp;" +
									"<a href='load.do?id=" 
							+ id + "'>修改</a></td></tr>");
				}
				out.println("</table>");
				out.println("<a href='addEmp.html'>添加新員工</a>");
				out.println("<a href='delAll.do'>" + "刪除所有僱員</a>");
			} catch (Exception e) {
				e.printStackTrace();
				out.println("系統繁忙,稍後重試");
			}
		}else if(action.equals("/add")){//添加員工信息
			System.out.println("添加員工信息...");
			//讀請求參數
			String name = request.getParameter("name");
			String salary = request.getParameter("salary");
			String age = request.getParameter("age");
			//服務端驗證一定要有,此處省略...
			//將員工信息插入數據庫
			try {
				EmployeeDAO dao = 
					(EmployeeDAO)Factory.getInstance(
							"EmployeeDAO");
				Employee e = new Employee();
				e.setName(name);
				e.setSalary(Double.parseDouble(salary));
				e.setAge(Integer.parseInt(age));
				dao.save(e);
				response.sendRedirect("show.do");
			} catch (Exception e) {
				e.printStackTrace();
				out.println("系統繁忙,稍後重試");
			}
		}else if(action.equals("/del")){//刪除個人員工信息
			System.out.println("刪除個人員工信息...");
			/* 獲取請求的id */
			int id = Integer.parseInt(
					request.getParameter("id"));
			try {
				EmployeeDAO dao = 
					(EmployeeDAO)Factory.getInstance(
							"EmployeeDAO");
				dao.delete(id);
				
				response.sendRedirect("show.do");
			}catch(Exception e){
				e.printStackTrace();
				out.println("系統繁忙,稍後重試");
			}
		}else if(action.equals("/delAll")){//刪除所有員工信息
			System.out.println("刪除所有員工信息...");
			try {			
				//不要設計任何具體的實現: 具體實現類EmployeeDAOImpl
				EmployeeDAO dao = 
					(EmployeeDAO)Factory.getInstance(
							"EmployeeDAO");
				
				dao.deleteAllData();
				response.sendRedirect("show.do");
				
			}catch(Exception e){
				e.printStackTrace();
				out.println("系統繁忙,稍後重試");
			}
		}else if(action.equals("/load")){//查找一條員工信息,前端頁面可編輯
			System.out.println("查找一條員工信息,前端頁面可編輯,用於修改員工信息....");
			int id = Integer.parseInt(request.getParameter("id"));
			try {
				EmployeeDAO dao = 
					(EmployeeDAO)Factory.getInstance(
							"EmployeeDAO");
				Employee e = dao.findById(id);
				if(e != null){
					String name = e.getName();
					double salary = e.getSalary();
					int age = e.getAge();
					out.println("<form action='update.do?id=" + id + "' method='post'>");
					out.println("id:" + id + "<br/>");
					out.println("姓名:<input name='name' value='" 
							+ name + "'/><br/>");
					out.println("薪水:<input name='salary' value='" 
							+ salary + "'/><br/>");
					out.println("年齡:<input name='age' value='" 
							+ age + "'/><br/>");
					out.println("<input type='submit' value='提交'/>");
					out.println("</form>");
				}
			}catch(Exception e){
				e.printStackTrace();
				out.println("系統繁忙,稍後重試");
			}
		}else if(action.equals("/update")){//修改員工信息-操作修改數據庫
			System.out.println("修改員工信息-操作修改數據庫...");
			int id = Integer.parseInt(request.getParameter("id"));
			String name = request.getParameter("name");
			double salary = Double.parseDouble(request.getParameter("salary"));
			int age = Integer.parseInt(request.getParameter("age"));
			// 將員工信息插入數據庫
			try {
				EmployeeDAO dao = 
					(EmployeeDAO)Factory.getInstance("EmployeeDAO");
				Employee e = new Employee();
				e.setId(id);
				e.setName(name);
				e.setSalary(salary);
				e.setAge(age);
				dao.update(e);
				response.sendRedirect("show.do");
			} catch (Exception e) {
				e.printStackTrace();
				out.println("系統繁忙,稍後重試");
			} 
		}
	}
	
}



 

4、注意:重定向、表單提交等位置,需要修改爲點do

response.sendRedirect("show.do");

          

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章