web-淺談jsp與servlet

layout: java
title: web–淺談jsp與servlet
tags:

  • servlet
  • jsp
  • web
    categories:
  • 前端
    author: ‘’
    date: 2019-08-23 09:30:00

JSP和servlet

區別

  • jsp的本質就是servlet,jsp經過編譯後會轉化成servlet
    因爲jvm只能識別java類,不能識別其他的類文件,所以就有了一系列的web容器(服務器),如tomcat,這些容器將jsp編譯成jvm能夠識別的java類
  • 一般來說,jsp用於頁面展示,servlet用於邏輯控制
    比如說要實現一個用戶登錄模塊,我們會把頁面顯示交給jsp,內部邏輯控制交給servlet
  • servlet沒有內置對象,jsp有一些內置對象

聯繫

  • servlet是嚴格意義上的java類,它在MVC模型中是控制層,它與表現層完全分離
  • jsp可以是html標籤,可以嵌入java代碼,它是表現層,側重於視圖

做好理解

  • 不同之處
    servlet通過java代碼httpServletResponse對象向客戶端動態輸出html內容,就是說,如果我要在servlet中向客戶端輸出或者展示一些東西,必須要以html標籤的形式
  • 各自特點
    servlet可以很好的組織業務邏輯,但是通過以字符串的形式向客戶端傳送html標籤使得代碼維護起來比較困難。
    但是一概的在jsp裏面混入大量的業務邏輯也是不可取的。
  • 如何均衡
    那麼如何做到二者的優勢互補?答案當然是MVC,MVC是一種軟件架構,分爲:
  • 模型層(Model)—業務邏輯
  • 視圖層(View)—負責頁面顯示
  • 控制層(Controler)—負責相關交互操作

示例demo

這個小demo主要實現了html表單的用戶登錄操作,然後記錄用戶的提交信息,返回給客戶端。

1. loginServlet.java

package servlet;
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 java.io.IOException;

@WebServlet(urlPatterns = "/login", name = "login")
/**
 * 這裏是 servlet負責頁面顯示, 也可以是SERVLET負責數據處理, jsp 負責頁面顯示
 */
public class LoginServlet extends HttpServlet {

    public static final long serialVersionUID = 1L;
    public LoginServlet() {
        super();
    }

    // post 提交瀏覽器不會顯示,比較安全
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 設置頁面編碼格式
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        String user = request.getParameter("user");

        // 這樣寫是沒有效果的,servlet向瀏覽器輸出內容,瀏覽器只能解析html,所以要用html標籤向頁面傳送信息
        //response.getWriter().println(user);
        //response.getWriter().print("這是登錄界面");

        // response.getWriter() 獲得一個輸出流
        String string = "<html> <head> <title>這是servlet返回的結果</title></head> <body> 歡迎 " + user + "</body> </html>";
        response.getWriter().print(string);

    }
}

2. login.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>servlet測試</title>
</head>
<body>

<form action="login" method="post">
    <table>
        <tb>
            uesr:
            <input type="text" name="user"> <br>
        </tb>

        <tb>
            passwd:
            <input type="password" name="passwd"> <br>
        </tb>
    </table>

    <button>提交</button>
</form>

</body>
</html>

測試結果

可以知道,我輸入的user是“servler測試”,點擊登錄按鈕後,返回給客戶端的就是用戶提交的user值,”servlet測試“。

  • 頁面提交
    頁面提交
  • 信息返回
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章