1. 程式人生 > >javaweb前端表單請求路徑要和後端web.xml檔案配置一定要一致

javaweb前端表單請求路徑要和後端web.xml檔案配置一定要一致

這兩天跟著老師做一個小作品,作品裡面設定了登入功能和監聽器功能,其中在登入功能中使用了監聽器監聽功能監聽使用者的登入,下面是Servlet中判斷登入邏輯的一個方法:

private void login(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		
		// 1. 獲取引數
		String userName = request.getParameter("userName");
		String pwd = request.getParameter("pwd");
		// 封裝
		Admin admin = new Admin();
		admin.setUserName(userName);
		admin.setPwd(pwd);

		try {
			// 2. 呼叫service處理業務
			Admin loginInfo = adminService.findByNameAndPwd(admin);
			// 判斷:
			if (loginInfo == null) {
				// 登陸失敗
				uri = "/login.jsp";
			} else {
				// 登陸成功
				// 先,儲存資料到session
				request.getSession().setAttribute("loginInfo", loginInfo);
				//【線上列表: 1. 先從servletContext中拿到線上列表集合;  (onLineUserList)
				//           2. 當前使用者放入“線上列表集合中”】
				// 實現1:先得到servletContext物件
				ServletContext sc = getServletContext();
				// 實現2: 再獲取線上列表集合
				List<Admin> onlineList = (List<Admin>) sc.getAttribute("onlineList");
				// 判斷
				if (onlineList != null){
					// 實現3: 添加當前登陸者
					onlineList.add(loginInfo);
					//sc.setAttribute("onlineList", onlineList);  // 物件引用傳遞,不需要寫也可以
				}
				
				// 再,跳轉到首頁顯示servlet(/index)
				uri = "/index";
			}
		} catch (Exception e) {
			// 測試
			e.printStackTrace();
			// 錯誤
			uri = "/error/error.jsp";
		}
		// 3. 跳轉
		request.getRequestDispatcher(uri).forward(request, response);
	}
如果沒有使用監聽器在ServletContext裡頭設定onlinelist的話,Tomcat會報錯如下:
十一月 19, 2017 10:09:14 上午 org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/emp_sys] has started
十一月 19, 2017 10:09:14 上午 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
SEVERE: The web application [/emp_sys] registered the JDBC driver [com.microsoft.sqlserver.jdbc.SQLServerDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
十一月 19, 2017 10:09:14 上午 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/emp_sys] appears to have started a thread named [Timer-1] but has failed to stop it. This is very likely to create a memory leak.
十一月 19, 2017 10:09:14 上午 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/emp_sys] appears to have started a thread named [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0] but has failed to stop it. This is very likely to create a memory leak.
十一月 19, 2017 10:09:14 上午 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/emp_sys] appears to have started a thread named [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1] but has failed to stop it. This is very likely to create a memory leak.
十一月 19, 2017 10:09:14 上午 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/emp_sys] appears to have started a thread named [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2] but has failed to stop it. This is very likely to create a memory leak.
十一月 19, 2017 10:09:15 上午 org.apache.catalina.core.StandardContext listenerStart
SEVERE: Error configuring application listener of class 
[email protected]
java.lang.ClassNotFoundException: cn.toohoo.listener.OnlineAdminListener at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:527) at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:509) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:137) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4854) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3954) at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1270) at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1439) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:315) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1374) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1530) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1519) at java.lang.Thread.run(Thread.java:722) 十一月 19, 2017 10:09:15 上午 org.apache.catalina.core.StandardContext listenerStart SEVERE: Error configuring application listener of class
[email protected]
java.lang.ClassNotFoundException: cn.toohoo.listener.SessionListener at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:527) at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:509) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:137) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4854) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3954) at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1270) at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1439) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:315) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1374) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1530) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1519) at java.lang.Thread.run(Thread.java:722) 十一月 19, 2017 10:09:15 上午 org.apache.catalina.core.StandardContext listenerStart SEVERE: Skipped installing application listeners due to previous error(s) 十一月 19, 2017 10:09:15 上午 org.apache.catalina.core.StandardContext startInternal SEVERE: Error listenerStart 十一月 19, 2017 10:09:15 上午 org.apache.catalina.core.StandardContext startInternal SEVERE: Context [/emp_sys] startup failed due to previous errors 十一月 19, 2017 10:09:15 上午 org.apache.catalina.core.StandardContext reload INFO: Reloading Context with name [/emp_sys] is completed

這個是很自然的嘛,但是由於剛學javaweb,不懂得Servlet的配置,如我前臺的表單提交的路徑是

<form name="Login" action="${pageContext.request.contextPath }/admin?method=login" method="post">
		.............
</form>
然而後臺的web.xml的配置應該是這樣的:
<!-- 配置檔案  /admin! /admin! /admin! -->
	<servlet-mapping>
		<servlet-name>AdminServlet</servlet-name>
		<url-pattern>/admin</url-pattern>
	</servlet-mapping>
  
  <servlet-mapping>
    <servlet-name>IndexServlet</servlet-name>
    <url-pattern>/index</url-pattern>
  </servlet-mapping>
但是由於不懂原理,使用myeclipse在建立Servlet時自動生成的配置
<servlet-mapping>
		<servlet-name>AdminServlet</servlet-name>
		<url-pattern>/AdminServlet</url-pattern>
	</servlet-mapping>
  
  <servlet-mapping>
    <servlet-name>IndexServlet</servlet-name>
    <url-pattern>/IndexServlet</url-pattern>
  </servlet-mapping>
導致頁面找不到對應的路徑,其實是應該是要對應的,然後兩個錯誤就混在一起得不到解決,後來經過認真排查,才發現這個錯誤,其實有時候使用myeclipse等整合開發工具的時候也一定要懂得原理,使用其自動生成的東西不一定是好的,進過改正配置後,兩個錯誤都得到了解決!啊,檢查浪費了好多時間。


相關推薦

javaweb前端請求路徑web.xml檔案配置一定一致

這兩天跟著老師做一個小作品,作品裡面設定了登入功能和監聽器功能,其中在登入功能中使用了監聽器監聽功能監聽使用者的登入,下面是Servlet中判斷登入邏輯的一個方法: private void login(HttpServletRequest request, HttpSer

laravel中的請求類型CSRF防護(六)

表單 pda pat http word route brush func pass laravel中為我們提供了綁定不同http請求類型的函數。 Route::get(‘/test‘, function () {}); Route::post(‘/test‘, f

nginx做反向代理web伺服器之間的互動

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

servlet---web.xml檔案配置路徑

Servlet的對映路徑: 在web.xml檔案中: <servlet-mapping>    <servlet-name>FirstServlet</servlet-name>//servlet的內部名稱   

添加ipurl 當前時間

() com rip http return date src cnblogs name <input name="url" type="hidden" id="url"> <input name="ip" type="hidden" id="

前端驗證常用的15個JS正則表達式

ntp html 正整數 手機號碼 表達式 浮點數 als 浮點 個數 在表單驗證中,使用正則表達式來驗證正確與否是一個很頻繁的操作,本文收集整理了15個常用的javaScript正則表達式,其中包括用戶名、密碼強度、整數、數字、電子郵件地址(Email)、手機號碼、身份證

<Ajax> 三. 前端通過單數據交互

數據交互 -- orm eth 通過 input cti 返回 style <!-- 前端代碼 --> <!DOCTYPE html> <html lang="en"> <head> <meta charset

layui點擊彈框頁面 請求

點擊 .post msg inline nbsp ces 相關 block mes $("#addSite").click(function () { layer.open({ title: ‘添加站點‘, type: 1,

JavaScript 驗證不為空獲取select下拉列表的值和文本

blog car form 是你 mys 獲取 document options 身份證 1.驗證表單不為空 var hasform = { "Name": "名字", "Id_card": "身份證", "PaySalary": "月工資",

js 監測from中的inputselect,時時監測,沒有輸入或選擇信息報錯,不允許提交數據

height ssss txt input OS 表達 tip eight html 1.html 代碼為 在input和select同級元素中添加 .error的標簽,用來存放報錯信息 <form action="" method="post" enctype="

laravel 的 請求

依賴 相同 AS tis 創建表 需要 文章 創建 font 在對文章、帖子等信息進行創建、更新的時候,需要進行表單驗證的時候,一般我們使用Request來獲取輸入的值來進行驗證,這樣需要在每一個方法中進行書寫驗證規則。 laravel 提供了創建表單請求,我們可以使用

Laravel 5.5 FormRequest 自定義請求驗證類

根目錄 use his extends 數據 不一致 不能 登錄模塊 能夠 1、把表單驗證邏輯寫在Controller中,這是最基礎的方法,但是不好維護,如: 1 namespace App\Http\Controllers\Admin; 2 3 use Illu

thinkPHP5.0使用form提交數據刪除文章,不用TP的提示頁面,使用彈出提示信息

javascrip splay CA tar typeof box php5 跳轉 sheet form表單提交數據和刪除文章時,TP的默認信息提示頁面的看起來不是很好看,想要實現彈窗提示怎麽做呢? 前端:可以使用前端的一個知識--iframe,iframe元素會創建包含另

整理前端驗證常用的15個JS正則表達式

包含 身份證號 表達 name 3-9 字母 pre neu htm 1 用戶名正則 //用戶名正則,4到16位(字母,數字,下劃線,減號) var uPattern = /^[a-zA-Z0-9_-]{4,16}$/; //輸出 true console.log(uPat

<form>()標簽常用的類型

form表單 用戶 服務 傳輸 以及 NPU 文本框 bubuko 圖片 1.定義和用法 <form> 標簽用於為用戶輸入創建 HTML 表單。 表單能夠包含 input 元素,比如文本字段、復選框、單選框、提交按鈕等等。 表單還可以包含 menus、tex

hvalidate vue前端驗證 驗證

hvalidate 專案介紹 自定義vue指令,前端表單校驗 安裝教程 專案地址 https://gitee.com/hcsy/hvalidate   在vue專案中引入 import hvalidate from './js/hvalida

JQuery修改formaction路徑

今天做form表單提交很煩一直修改$("#xxxx").action="xxxx.action"一直不對,後來找到了這篇文章,由此 轉發一下,幫助更多遇到這個問題的人。 ------------ 1.通常我們想到是使用$("#xxxx").action="xxxx.action";//但

【laravel】 複雜請求驗證類,實現一個類對應多個

一、序言 laravel 中提供了兩種驗證請求資料的方法,第一種方法適用於簡單的驗證,表單驗證和業務邏輯放在一起,顯得業務程式碼臃腫,而且重複的驗證規則基本也是複製貼上,程式碼也不好看,這是關鍵。本篇教程就不說這個了,需要了解的請戳這裡。第二種就是建立請求驗證類,下面就詳細說

前端提交資料~php獲取內容

上圖程式碼如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xml

前端提交數據~php獲取內容

發送 input email地址 str default char light for bubuko 上圖代碼如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww