MVC架構中的servlet層重定向404小坑

servlet層中的UserLoginServlet.java

package com.mhys.servlet; /*** ClassName: ${NAME}* Description:** @Author 數開_11* @Create 2024-05-29 20:32* @Version 1.0*/import com.mhys.pojo.User;
import com.mhys.service.UserService;
import com.mhys.service.impl.UserServiceImpl;import javax.naming.Name;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.lang.annotation.Repeatable;
import com.mhys.servlet.UserLoginServlet;
@WebServlet(name = "UserLoginServlet",value = "/UserLoginServlet")
public class UserLoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");String name = request.getParameter("name");String pwd = request.getParameter("pwd");// 創建userServletUserService service = new UserServiceImpl();User user = service.findByNameAndPassword(name, pwd);if (user != null) {request.getRequestDispatcher("/index.jsp").forward(request, response);
//            response.sendRedirect("/login.jsp");} else {request.setAttribute("msg", "user/pwd錯誤哦");request.getRequestDispatcher("/login.jsp").forward(request, response);
//            response.sendRedirect("login.jsp");}}
}

創建servlet映射對應到頁面表單的跳轉

login.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><style>.centered-element{margin: 300px auto ;width: 200px;display: block;}</style><meta charset="UTF-8" ><title>HadoopWebLogin</title>
</head>
<body><form action="/UserLoginServlet" class="centered-element">
<%--        使用外部css來居中這個table--%><table class="centered-element">
<%--            caption標簽定義了表格的標題--%><caption>用戶登錄</caption>
<%--            tr標簽表示的時表格的row--%><tr>
<%--                td標簽表示的是單元格cell--%><td>賬戶:</td>
<%--    input標簽是一個輸入的控件--%><td><input type="text" name="name"></td></tr><tr><td> 密碼: </td><td><input type="text" name="pwd"></td></tr><tr><td><input type="submit" value="登錄"></td><td><input type="reset" value="重置"></td></tr>
<%--    從request域中拿info--%><tr><td colspan="2"><span style="color: red;">${msg}</span></td></tr></table></form></body>
</html>

submit之后去找servlet層中的UserLoginServlet.java 進行邏輯判斷---> 重定向操作

注!: 這里必須要在web.xml中配置上!!!!!(我是在這里犯錯了,U小寫了,找了半天沒看出了,笑暈)

   <servlet>    <servlet-name>UserLoginServlet</servlet-name><servlet-class>com.mhys.servlet.UserLoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>UserLoginServlet</servlet-name><url-pattern>/UserLoginServlet</url-pattern></servlet-mapping>
 

這里的webservlet中的路徑是嚴格區分大小寫的,寫錯小個小點都會在登錄時重定向報404找不到資源!!!!

另一個注意點:就是創建對象獲取數據庫中的user/pwd時new 數據類型是UserService 父類

不要是接口的實現類

?utils 層中的JDBCUtils.java

package com.mhys.util;import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;/*** ClassName: JdbcUtils* Description:** @Author 數開_11* @Create 2024-05-29 17:46* @Version 1.0*/
public class JdbcUtils {public static Connection getConnection() throws Exception{Connection connection=null;try{//1-讀取db.properties文件Properties properties=new Properties();InputStream in=JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");properties.load(in);//2-讀取屬性String driver=properties.getProperty("driver");String url=properties.getProperty("url");String username=properties.getProperty("username");String password=properties.getProperty("password");//3-注冊驅動Class.forName(driver);//4-獲取連接connection= DriverManager.getConnection(url,username,password);//5-日志打印連接信息System.out.println("連接信息: " + url + " " + username + " " + password);} catch (Exception e) {e.printStackTrace();throw new RuntimeException("數據庫連接失敗,請檢查連接參數是否正確!");}return connection;}
}

和項目的資源目錄下配置db.properties文件

內容:
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:33306/javaweb?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
username=root
password=root

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19136.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19136.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19136.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Unix環境高級編程--8-進程控制---8.7函數waitid 8.8函數wait3 wait4

1、Single Unix Specification支持一個取得進程終止狀態的函數--waitid&#xff0c;此函數類似于waitpid&#xff1a; pid_t wait(int *status); pid_t waitpid(pid_t pid, int *status, int options); int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options); …

MySQL之創建高性能的索引(六)

創建高性能的索引 選擇合適的索引列順序 當使用前綴索引的時候&#xff0c;在某些條件值的基數比正常值高的時候&#xff0c;問題就來了。例如&#xff0c;在某些應用程序中&#xff0c;對于沒有登錄的用戶&#xff0c;都將其用戶名記錄為"guest"&#xff0c;在記錄…

【axios】的淺度分析

一、Axios的攔截器能干些什么&#xff1f; Axios攔截器的實現原理主要涉及兩個方面&#xff1a;請求攔截器和響應攔截器&#xff0c;它們分別在請求發送前和響應返回后進行預處理和后處理。 Axios內部維護了兩個數組&#xff0c;一個用于存儲請求攔截器&#xff0c;另一個用于…

數據庫基礎+增刪查改初階

數據庫基礎增刪查改初階 一。數據庫操作 1.概念&#xff1a; 一個mysql服務器上有很多的表&#xff0c;把有關系的表放在一起就構成了一個數據集合&#xff0c;此時稱為“數據庫”&#xff0c;一個mysql1服務器上可以有多個這樣的數據庫 2.創建數據庫&#xff1a; create …

穩住!一招制勝:打造JavaScript防抖函數的終極指南【含代碼示例】

穩住&#xff01;一招制勝&#xff1a;打造JavaScript防抖函數的終極指南【含代碼示例】 防抖函數&#xff1a;概念與作用基礎實現&#xff1a;案例一簡單防抖函數使用示例 進階功能&#xff1a;案例二 - 立即執行版本性能優化與安全考量實戰技巧與問題排查實際問題與解決方案結…

基于python flask的旅游數據大屏實現,有爬蟲有數據庫

背景 隨著旅游行業的快速發展&#xff0c;數據在旅游決策和規劃中的重要性日益凸顯。基于 Python Flask 的旅游數據大屏實現研究旨在結合爬蟲技術和數據庫存儲&#xff0c;為用戶提供全面、實時的旅游信息展示平臺。 爬蟲技術作為數據采集的重要手段&#xff0c;能夠從各種網…

錯誤記錄:從把項目從Tomcat8.5.37轉到Tomcat10.1.7

錯誤信息&#xff1a;在本地Servlet項目里沒有報錯&#xff0c;但是瀏覽器跳轉該servlet時報錯 型 異常報告 消息 實例化Servlet類[com.wangdao.lx.MyServlet1]異常 描述 服務器遇到一個意外的情況&#xff0c;阻止它完成請求。 例外情況 jakarta.servlet.ServletExceptio…

Generative Action Description Prompts for Skeleton-based Action Recognition

標題&#xff1a;基于骨架的動作識別的生成動作描述提示 源文鏈接&#xff1a;https://openaccess.thecvf.com/content/ICCV2023/papers/Xiang_Generative_Action_Description_Prompts_for_Skeleton-based_Action_Recognition_ICCV_2023_paper.pdfhttps://openaccess.thecvf.c…

解決文件傳輸難題:如何繞過Gitee的100MB上傳限制

引言 在版本控制和代碼托管領域&#xff0c;Gitee作為一個流行的平臺&#xff0c;為用戶提供了便捷的服務。然而&#xff0c;其對單個文件大小設定的100MB限制有時會造成一些不便。 使用云存儲服務 推薦理由&#xff1a; 便捷性&#xff1a;多數云存儲服務如&#xff1a; Dro…

現代操作系統上創建各類鏈接的方法匯總

文章目錄 現代操作系統上創建各類鏈接的方法匯總windows: cmd下的mklink創建鏈接示例 powershell 創建鏈接創建常規文件和目錄創建鏈接 linux shell 創建硬鏈接NAMESYNOPSIS詳細說明常用選項示例 檢查與辨識符號鏈接&#x1f388;linux下檢查ls -l 命令file 命令 windows下檢查…

零基礎學習圖生圖

目錄 一、圖生圖是什么二、安裝秋葉整合包2.1 秋葉包安裝2.2 秋葉包拓展安裝&#xff1a;2.3 ckpt配置&#xff1a;2.4 界面常用功能配置&#xff1a; 三、圖生圖基本功能展示3.1 圖生圖的界面3.2 重要的參數設置&#xff1a;3.3 涂鴉功能3.4 局部重繪功能3.5 涂鴉重繪3.6 上傳…

SQL 語言:存儲過程和觸發器

文章目錄 基本概述創建觸發器更改和刪除觸發器總結 基本概述 存儲過程&#xff0c;類似于高階語言的函數或者方法&#xff0c;包含SQL語句序列&#xff0c;是可復用的語句&#xff0c;保存在數據庫中&#xff0c;在服務器中執行。特點是復用&#xff0c;提高了效率&#xff0c…

網絡智能化的發展對仿真環境的需求

1. 網絡智能化背景介紹 1.1 什么是網絡智能化 網絡智能化是指利用人工智能&#xff08;AI&#xff09;、機器學習&#xff08;ML&#xff09;、優化算法等技術來實現網絡的信息化、自動化和智能化。相對5G、6G、算力網絡等領域&#xff0c;網絡智能化是針對網絡全場景、全要素…

使用C語言openssl庫實現 RSA加密 和 消息驗證

Q&#xff1a;什么是RSA&#xff1f; A&#xff1a;RSA&#xff08;Rivest-Shamir-Adleman&#xff09;是一種非對稱加密算法&#xff0c;是最早的一種用于公開密鑰加密和數字簽名的算法。它使用一對公鑰&#xff08;public key&#xff09;和私鑰&#xff08;private key&…

去掉macOS終端命令行前的(base)

macOS在安裝了Anaconda&#xff08;或miniconda&#xff09;后&#xff0c;每次打開terminal都會默認打開名為base的虛擬環境。 默認不啟動base conda config --set auto_activate_base false默認啟動base conda config --set auto_activate_base true

IEEE Latex模版踩雷避坑指南

參考文獻 原Latex模版 \begin{thebibliography}{1} \bibliographystyle{IEEEtran}\bibitem{ref1} {\it{Mathematics Into Type}}. American Mathematical Society. [Online]. Available: https://www.ams.org/arc/styleguide/mit-2.pdf\bibitem{ref2} T. W. Chaundy, P. R. Ba…

【前端每日基礎】day27——小程序開發

小程序開發詳細介紹 基本概念 小程序&#xff1a;小程序是一種無需下載安裝即可使用的應用。用戶通過微信搜索或掃描二維碼即可打開小程序。小程序具有觸手可及、用完即走、體驗良好的特點。 組成部分&#xff1a; WXML&#xff1a;用于描述頁面的結構。 WXSS&#xff1a;用于…

2022職稱繼續教育--深入實施新時代人才強國戰略 加快建設世界重要人才中心和創新高地

單選題&#xff08;共7題&#xff0c;每題5分&#xff09; 1、&#xff08;&#xff09;實行職位職級制工資為主。 D、中長線科研重要崗位人員 2、建設世界重要人才中心和創新高地有&#xff08;&#xff09;個階段目標。 B、三 3、綜合國力競爭說到底是&#xff08;&#xf…

基于 FastAI 文本遷移學習的情感分類(93%+Accuracy)

前言 系列專欄:【深度學習&#xff1a;算法項目實戰】?? 涉及醫療健康、財經金融、商業零售、食品飲料、運動健身、交通運輸、環境科學、社交媒體以及文本和圖像處理等諸多領域&#xff0c;討論了各種復雜的深度神經網絡思想&#xff0c;如卷積神經網絡、循環神經網絡、生成對…

[vue3后臺管理二]首頁和登錄測試

[vue3后臺管理二]首頁和登錄測試 1 修改main.js import ./assets/main.cssimport { createApp } from vue import App from ./App.vue import router from ./router createApp(App).use(router).mount(#app)2 路由創建 import {createRouter, createWebHistory} from vue-ro…