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測試“。
- 頁面提交
- 信息返回