Servlet入門(三)Servlet初體驗
前言
通過前面兩個章節的鋪墊,本章正式邁入Servlet的學習
方法
1.概念
我們知道,有了http協議,規定了web互動的基本規範。有了伺服器,使用者的請求能夠實時的得到響應。那麼現在有個問題,就是使用者傳送一個請求給伺服器,我伺服器怎麼才能知道該呼叫後臺的哪些程式碼呢?Servlet應運而生了!
實際上它就是幫助處理使用者請求到伺服器,伺服器呼叫相應的方法。
2.第一個Servlet程式
在講解這個之前呢,推薦大家下載一款Java整合開發工具IntelliJ IDEA,有同學疑問了?我們之前不是有eclipse嗎?為什麼要用新的開發工具啊?原因是eclipse簡單,功能不齊全!!!還有人說了,那用MyEclipse啊。這我也能理解,博主之前一直再用MyEclipse,公司裡用eclipse、MyEclipse、IntellJ IDEA的比率大概在2:4:4,也就是說MyEclipse和IntellJ IDEA你選一個就行了!因為我之前一直在用MyEclipse,所以這次嘗試一下IntelliJ IDEA。
我們拿之前的SMS專案的程式碼作為講解! JAVA串燒(二)SMS編寫之後臺
1)開啟IDE,在web資料夾下新增兩個jsp檔案login.jsp和success.jsp,前者是使用者登入的表單,後者是登入成功的跳轉頁面。目前你可以不需要理會JSP檔案的含義,只是把它當作一個普通的html檔案來看待就行了!
目前的工程結構如下所示:
login.jsp原始碼如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>使用者登入</title> </head> <body> <form action="/login.do" method="post"> 使用者名稱:<input type="text" name="username"><br> 密碼:<input type="text" name="password"><br> <input type="submit" value="登入"> </form> </body> </html>
success.jsp原始碼如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>使用者登入</title>
</head>
<body>
<h1>使用者登入成功</h1>
</body>
</html>
注意:這是一個相當簡單的登入表單,沒有加入任何的CSS以及JS的修飾,不影響功能!
前提條件:將web專案部署到tomcat伺服器中(每種工具的具體部署方法不同,讀者可自行百度)
我這裡將SMS工程部署到了之前下載好的tomcat中。以IntellJ為例:
這裡使用者點選登入的話就觸發了一次請求,請求的url為 login.do
那麼伺服器如何知道這個請求應該呼叫什麼程式碼呢,下面讓我們來寫Servlet告訴他吧!
2)編寫Servlet檔案(它也是一個Java檔案,繼承了HttpServlet)\com\jwang\student\servlet\UserServlet.java
package com.jwang.student.servlet;
import com.jwang.student.bo.User;
import com.jwang.student.service.UserService;
import com.jwang.student.service.impl.UserServiceImpl;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response){
String username = request.getParameter("username");
String password = request.getParameter("password");
try {
UserService userService = new UserServiceImpl();
User user = new User("01",username,password);
if (userService.login(user)) {
request.getSession().setAttribute("username", username);
request.getRequestDispatcher("/success.jsp").forward(request, response);
} else {
request.setAttribute("errorMsg", "使用者名稱或密碼錯誤,請重新輸入!");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response){
this.doGet(request, response);
}
}
以上程式碼的含義就是接收使用者發出的請求,做登入驗證!大家可以看到我呼叫了userService的login()方法,大家應該還沒忘吧!
到這裡我們的login.do請求應該是要訪問這段程式碼的。
3)配置請求路徑login.do指向UserServlet
\web\WEB-INF\web.xml
<?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_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>com.jwang.student.servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/login.do</url-pattern>
</servlet-mapping>
</web-app>
好了,經過了以上的準備工作,你的第一個Servlet就算是配置好了!
啟動程式,進入登入表單輸入使用者名稱與密碼,點選登入
- 成功:系統跳轉到success.jsp,顯示登入成功
- 失敗:系統返回至login.jsp,使用者需要重新輸入使用者名稱和密碼進行登入
登入的使用者名稱與密碼在資料庫中Users表:博主的是admin和admin
附錄:
1.開發中啟動web應用的時候一定要是debug模式,方便除錯
IntellJ IDEA中請點選這個小蟲子!
在程式碼中左側點選滑鼠打上斷點即可實現程式碼除錯!
常用的快捷鍵是: F8下一步 、F9下一個斷點
不使用快捷鍵的話,debug視窗如下:
2.亂碼問題
大家有沒有發現,表單中寫入了中文後,傳遞到後臺就發生了亂碼!!!這種很煩!
因為我的工程是utf-8編碼的,所以新增如下程式碼即可解決亂碼問題!