Servlet兩種訪問路徑
一、在Servlet類中通過設置@WebServlet標注訪問
二、在web.xml中編寫配置文件
第一種能比較直觀看到Servlet路徑,但當項目發布后不好再對Servlet路徑進行修改
第二種把Servlet路徑在web.xml中配置, 能更好對Servlet路徑進行配置的修改
利用Servlet處理注冊登錄請求 傳送門
項目結構

package com.Gary.servlet; import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.Gary.model.User; import com.Gary.util.DBUtil; @WebServlet("/login_do") public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); User user = DBUtil.verifyAccount(username,password); if(user==null){ // out.println("登錄失敗,用戶名或密碼錯誤"); request.setAttribute("message","登錄失敗,用戶名或密碼錯誤"); request.getRequestDispatcher("login.jsp").forward(request,response); }else{ // out.println("登錄成功"); int number = 0; //獲取到application對象 ServletContext application = this.getServletContext(); //第一次登錄用戶時if不瞞住,number=0 if(application.getAttribute("userNumber")!=null){ number = (Integer)application.getAttribute("userNumber"); } //登錄過一個用戶后在原基礎number上進行++ number++; application.setAttribute("userNumber",number); //通過seesion的setAttribute傳遞數據 request.getSession().setAttribute("user", user); //登錄請求的轉發,將數據傳遞給personCenter.jsp頁面 request.getRequestDispatcher("personCenter.jsp").forward(request,response); } } }

package com.Gary.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.Gary.util.DBUtil; //@WebServlet("/register_do") public class RegisterServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); int age = Integer.parseInt(request.getParameter("age")); String sex = request.getParameter("sex"); boolean isSuccess = DBUtil.addUser(username,password,age,sex); //使用請求轉發 if(isSuccess){ request.setAttribute("message", "注冊成功,請登錄"); //通過getRequestDispatcher傳遞路徑將請求轉發給login.jsp request.getRequestDispatcher("login.jsp").forward(request,response); }else{ request.setAttribute("message", "注冊失敗,用戶名重復"); //通過getRequestDispatcher傳遞路徑將請求轉發給login.jsp request.getRequestDispatcher("register.jsp").forward(request,response); } } }

<%@page import="com.Gary.model.User"%> <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Insert title here</title> </head> <body> <% Object o = session.getAttribute("user"); if(o!=null){ User user = (User)o; out.println("當前登錄用戶:"+user.getUsername()+"<br/>"); } %> <% Object msg = request.getAttribute("message"); if(msg!=null) out.println(msg); %> 登錄<hr> <form action="login_do" method="post"> 用戶名:<input type="text" name="username" /><br/> 密碼:<input type="password" name="password" /><br/> <input type="submit" value="登錄" /> </form> </body> </html>

<%@page import="com.Gary.model.User"%> <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Insert title here</title> </head> <body> <% Object o = session.getAttribute("user"); if(o!=null){ User user = (User)o; out.println("當前登錄用戶:"+user.getUsername()+"<br/>"); } %> <% Object msg = request.getAttribute("message"); if(msg!=null) out.println(msg); %> <form action="register_do" method="post"> 用戶名:<input type="text" name="username" /><br/> 密碼:<input type="password" name="password" /><br/> 年齡:<input type="text" name="age" /><br/> 性別: 男<input type="radio" name="sex" value="男" />女<input type="radio" name="sex" value="女" /><br/> <input type="submit" value="注冊" /> </form> </body> </html>

<?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_3_1.xsd" version="3.1" metadata-complete="true"> <!-- 配置servlet --> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.Gary.servlet.LoginServlet</servlet-class> </servlet> <servlet> <servlet-name>RegisterServlet</servlet-name> <servlet-class>com.Gary.servlet.RegisterServlet</servlet-class> </servlet> <!-- servlet路徑映射 --> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/login_do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>RegisterServlet</servlet-name> <url-pattern>/register_do</url-pattern> </servlet-mapping> </web-app>
LoginServlet.java處理login.jsp登錄表單的請求
RegisterServlet.java處理register.jsp注冊表單的請求
第一種
通過在Servlet上設置@WebServlet標注,容器就會自動讀取當中的信息,@WebServlet告訴容器,如果請求的URL是"/xxxxxx"
LoginServlet.java中配置的路徑是login_do,在register.jsp的from表單中設置action也為login_do
由LoginServlet.java處理register.jsp的from表單提交的信息
@WebServlet("/login_do") public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); User user = DBUtil.verifyAccount(username,password); if(user==null){ // out.println("登錄失敗,用戶名或密碼錯誤"); request.setAttribute("message","登錄失敗,用戶名或密碼錯誤"); request.getRequestDispatcher("login.jsp").forward(request,response); }else{ // out.println("登錄成功"); int number = 0; //獲取到application對象 ServletContext application = this.getServletContext(); //第一次登錄用戶時if不瞞住,number=0 if(application.getAttribute("userNumber")!=null){ number = (Integer)application.getAttribute("userNumber"); } //登錄過一個用戶后在原基礎number上進行++ number++; application.setAttribute("userNumber",number); //通過seesion的setAttribute傳遞數據 request.getSession().setAttribute("user", user); //登錄請求的轉發,將數據傳遞給personCenter.jsp頁面 request.getRequestDispatcher("personCenter.jsp").forward(request,response); } } }
<form action="login_do" method="post"> 用戶名:<input type="text" name="username" /><br/> 密碼:<input type="password" name="password" /><br/> <input type="submit" value="登錄" /> </form>
第二種
通過web.xml配置文件進行配置
<servlet-name>中填寫項目中Servlet名字 【可隨便填寫,用作后邊<servlet-mapping>映射url】
<servlet-class>中填寫項目中該Servlet路徑
<servlet-mapping>配置servlet-name和<url-pattern>地址映射
<!-- 配置servlet --> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.Gary.servlet.LoginServlet</servlet-class> </servlet> <servlet> <servlet-name>RegisterServlet</servlet-name> <servlet-class>com.Gary.servlet.RegisterServlet</servlet-class> </servlet> <!-- servlet路徑映射 --> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/login_do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>RegisterServlet</servlet-name> <url-pattern>/register_do</url-pattern> </servlet-mapping>
將com.Gary.servlet.LoginServlet路徑上的Servlet命名為LoginServlet,與后邊<servlet-mapping>中的<servlet-name>LoginServlet相匹配
【按住Ctrl+鼠標左鍵點擊<servlet-class>下的路徑可直接訪問對應Servlet下的路徑】