【從零開始】【002】構建簡易servlet完成發佈與訪問

1、技術選型javascript

在這裏就涉及到J2EE的MVC模式了,那麼在技術選型上面怎麼肯定要使用什麼技術呢?固然是本身比較熟悉的了。咱們先從三層架構上面逐一來討論。html

一、視圖層前端

目前本人瞭解的視圖層的實現能夠有如下的幾種方式:html,jsp,freemarker,這三種方式配合前端的javascript、jquer、ajax等腳本均可以實現動態的頁面,固然從使用方便上來講仍是freemarker比較優越,而且這個也是本人使用時間比較長的一個視圖模板引擎。java

相關的介紹已經比較詳細了,freemarker的封裝以及使用的方便性是超過jsp以及html的(https://baike.so.com/doc/6837664-7054912.html),可是我的仍是以爲從jsp開始比較好。mysql

二、控制層web

可使用基本的servlet、springMVC、struts實現控制層,這是本人曾經使用過的技術,雖然從使用方便性上面來講使用spring或者struts更便利,可是作了這麼多項目,感受僅僅會搞幾個配置使用大衆的框架感受層次太膚淺了,以爲仍是應該從最基礎的開始,ajax

從底層開始,經過對過往的框架使用經驗、設計模式、曾經接觸到的理念的使用,本身進行封裝達到一樣的目的,那麼作這個自建項目的目的就達到了,最終仍是選擇最基礎的servletspring

三、服務層sql

這裏服務層固然會首先想到spring的IOC(動態依賴注入),這個功能很強大,可是仍是選擇經過自封裝的方式來一步步的構建本身的實現,這無疑是更有意義得多。數據庫

四、數據持久層

固然毫無疑問啦,確定是jdbc,雖然如今有比較流行的ibatis能夠方便的使用,也有功能強大重量級的hibernate,可是這些都沒法瞭解到底層的數據持久層的一些細節,既然知道他的實現原理那麼爲何不本身實現一個呢,雖然會有這樣那樣的缺陷,但這就是進步。

五、數據庫

原先使用過sql server、mysql、oracle,最多的使用的仍是oracle,可是如今開源這麼流行,固然仍是選擇mysql啦,繼續深刻了解下mysql

2、創建初始servlet

 一、首先要引用servlet的jar包,這裏咱們在maven倉庫中搜索,在nexus中搜索jar包,而且在maven中引用這裏會出現有幾個版本的servlet-api的jar包,這裏咱們暫時使用2.5的版本

二、強搜索到的servlet版本放入pom文件中

三、建立一個cn.nutrition.base.controller.BaseServlet類繼承HttpServlet,在HttpServlet中看到有四種請求方法,這裏咱們都進行重寫

package cn.nutrition.base.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class BaseServlet extends HttpServlet {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req, resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("dfsdafashiurewo");
    }
    @Override
    protected void doDelete(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req, resp);
    }
    @Override
    protected void doPut(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req, resp);
    }

}
View Code

四、在web.xml中進行servlet配置

五、項目加載到servers中後啓動,而後訪問http://localhost:8083/selfproject-nutrition/nutrition,這是能夠在Console日誌中看到,以下的日誌,這代表servlet建立成功了。

3、創建一個默認的訪問頁面

 一、在webapp目錄下創建文件目錄jsp,而後建立一個簡單的index.jsp文件

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
hello!
</body>
</html>
View Code

二、在BaseServlet類中的doPost中加加上以下代碼

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("dfsdafashiurewo");
        req.getRequestDispatcher("jsp/index.jsp").forward(req, resp);
        //resp.sendRedirect("jsp/index.jsp");
    }
View Code

req.getRequestDispatcher("jsp/index.jsp").forward(req, resp)(轉發),或者resp.sendRedirect("jsp/index.jsp")(重定向)均可以

三、從新發布啓動servers,而後訪問而後訪問http://localhost:8083/selfproject-nutrition/nutrition

這是能夠在瀏覽器頁面看到「hello!」的輸出,代表已經能夠訪問頁面了。

【構建過程當中遇到的問題】

一、在構建過程當中發現使用servlet繼承的時候報錯,經過百度搜索得知是eclipse的版本太低了,引用的jdk1.8沒法使用,後面經過下載更新的4.x版本,可是在更新web插件的時候一直報錯沒法完成更新,以後又用舊的eclipse版本加jdk1.7。

二、構建過程當中本來打算在WEB-INF中創建jsp文件的,可是在執行過程當中發現WEB-INF中的jsp文件沒法經過重定向訪問,只能經過轉發訪問,還有html也沒法進行訪問(兩種方式都不行),因此再進行基礎的servlet+jsp驗證是使用了webapp下的jsp目錄。

具體的區別會進行專題研究。

【參考資料】

一、轉發與重定向的區別:http://www.cnblogs.com/liushi805347332/p/8983159.html

相關文章
相關標籤/搜索