1. 程式人生 > >Servlet入門(三)Servlet初體驗

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編碼的,所以新增如下程式碼即可解決亂碼問題!