您好,登錄后才能下訂單哦!
Servlet和jsp開發
一、 Servlet
1.1、servlet簡介
Servlet(Server Applet)是Java Servlet的簡稱,稱為小服務程序或服務連接器,用Java編寫的服務器端程序,具有獨立于平臺和協議的特性,主要功能在于交互式地瀏覽和生成數據,生成動態Web內容。其實Servlet就是Java語言實現的一個接口,Servlet運行于支持Java的應用服務器中。從原理上講,Servlet可以響應任何類型的請求,但絕大多數情況下Servlet只用來擴展基于HTTP協議的Web服務器。
1.2實現過程
1.客戶端發送請求至服務器端;
2.服務器將請求信息發送至 Servlet;
3.Servlet 生成響應內容并將其傳給服務器。響應內容動態生成,通常取決于客戶端的請求;
4.服務器將響應返回給客戶端。
1.3servlet九大內置對象
page java.lang.Object
對應this關鍵字。JSP網頁本身
page對象是當前頁面轉換后的Servlet類的實例。從轉換后的Servlet類的代碼中,可以看到這種關系:
Object page = this;
在JSP頁面中,很少使用page對象。
7.config
javax.servlet. ServletConfig 的實例,該實例代表該JSP 的配置信息。常用的方法有getInitPararneter(String paramNarne) 及getInitPararneternarnes() 等方法。事實上, JSP 頁面通常無須配置,也就不存在配置信息。因此,該對象更多地在Servlet 中有效。
exception java.lang.Throwable 的實例
該實例代表其他頁面中的異常和錯誤。只有當頁面是錯誤處理頁面,即編譯指令page 的isErrorPage 屬性為true 時,該對象才可以使用。常用的方法有getMessageO和printStackTraceO等。
//使用pageContext 設置屬性,該屬性默認在page 范圍內
pageContext. setAttribute ("page" , "hello") ;
//使用request 設置屬性,該屬性默認在request 范圍內
request. setAttribute ("request" , "hello");
//使用pageContext將屬性設置在request 范圍中
pageContext.setAttribute("request2" , "hello" , pageContext.REQUEST_SCOPE);
// 使用session將屬性設置在session 范圍中
session.setAttribute("session" , "hellosession"; )
//使用pageContext將屬性設置在session范圍中
pageContext.setAttribute("session2" , "hello" , pageContext.SESSION_SCOPE);
//使用application將屬性設置在application范圍中
application. setAttribute ("app" , "hello") ;
//使用pageContext 將屬性設置在application 范圍中
pageContext.setAttribute("app2" , "hello" , pageContext.APPL 工CATION_SCOPE) ;
1.4 四個作用域
1.application:全局作用范圍,整個應用程序共享,就是在部署文件中的同一個webApp共享,生命周期為:應用程序啟動到停止。
2.session:會話作用域,當用戶首次訪問時,產生一個新的會話,以后服務器就可以記住這個會話狀態。生命周期:會話超時,或者服務器端強制使會話失效。(一個簡單的應用就是可以動態的獲取登錄后的用戶名稱)
3.request:請求作用域,就是客戶端的一次請求。
4.page:一個JSP頁面。
1.5 servlet簡單案例—用戶登錄,動態獲取用戶名,顯示歡迎信息
1.下載的html頁面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>下載案例</title>
</head>
<body>
<a href="/response/ServletDownload?filename=曾惜-講真的.mp3">曾惜-講真的.mp3</a>
</body>
</html>
2.servlet后臺邏輯
package com.lyg.servlet.download;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
@WebServlet("/ServletDownload")
public class ServletDownload extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//獲取文件名
String filename = request.getParameter("filename");
//獲取servletcontext對象
ServletContext servletContext = getServletContext();
//設置響應頭
String mineType = servletContext.getMimeType(filename);
response.setHeader("content-type",mineType);
//告訴瀏覽器是打開還是保存,并設置下載后的文件名
response.setHeader("content-disposition","attachment;filename="+filename);
String userAgent = request.getHeader("user-agent");
filename = URLEncoder.encode(filename, "utf-8");
//創建輸入流,讀入目標文件
InputStream inputStream = servletContext.getResourceAsStream("/WEB-INF/elements/"+filename);
byte []chars=new byte[1024*8];
//創建一個ServletOutputSteam 對象
ServletOutputStream outputStream = response.getOutputStream();
int len;
while ((len=inputStream.read(chars))!=-1){
outputStream.write(chars,0,len);
}
inputStream.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
二、jsp
2.1 jsp簡介
JSP全名為Java Server Pages,中文名叫java服務器頁面,其根本是一個簡化的Servlet設計,它 [1] 是由SUN公司倡導、許多公司參與一起建立的一種動態網頁技術標準。JSP技術有點類似ASP技術,它是在傳統的網頁HTML文件(.htm,.html)中插入Java程序段Scriptlet)和JSP標記(tag),從而形成JSP文件,后綴名為(*.jsp)。 用JSP開發的Web應用是跨平臺的,既能在Linux下運行,也能在其他操作系統上運行。
它實現了Html語法中的java擴展(以 <%, %>形式)。JSP與Servlet一樣,是在服務器端執行的。通常返回給客戶端的就是一個HTML文本,因此客戶端只要有瀏覽器就能瀏覽。
JSP技術使用Java編程語言編寫類XML的tags和scriptlets,來封裝產生動態網頁的處理邏輯。網頁還能通過tags和scriptlets訪問存在于服務端的資源的應用邏輯。JSP將網頁邏輯與網頁設計的顯示分離,支持可重用的基于組件的設計,使基于Web的應用程序的開發變得迅速和容易。 JSP(JavaServer Pages)是一種動態頁面技術,它的主要目的是將表示邏輯從Servlet中分離出來。他的本質上還是一個Servlet。
2.2 page指令
1.包含選項
import 使一個JAVA導入聲明被插入到最終頁面文件。
contentType 規定了生成內容的類型。當生成非HTML內容或者當前字符集character set并非默認字符集時使用。
errorPage 處理HTTP請求時,如果出現異常則顯示該錯誤提示信息頁面。
isErrorPage 如果設置為TRUE,則表示當前文件是一個錯誤提示頁面。
isThreadSafe 表示最終生成的servlet是否安全線程(threadsafe)。
2.語法
1.<%@ include file="somefile.jsp" %>:將一個頁面內容包含在一個頁面中
3.jsp和servlet綜合應用---登錄案例
package com.lyg.servlet.login;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
@WebServlet("/LoginDemo02")
public class LoginDemo02 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//設置編碼
request.setCharacterEncoding("utf-8");
//獲取參數
String username = request.getParameter("username");
String password = request.getParameter("password");final String URL = "jdbc:mysql://localhost:3306/db1";
final String USER = "root";
final String PASSWORD = "12345678";
String SQL = "select * from userinfo where name = ? and password = ?";
HttpSession session = request.getSession();//獲取session對象
//連接數據庫,查詢
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(URL,USER,PASSWORD);
PreparedStatement preparedStatement = connection.prepareStatement(SQL);
preparedStatement.setString(1,username);
preparedStatement.setString(2,password);
ResultSet resultSet = preparedStatement.executeQuery();
String db_username=null;
String db_password =null;
if (resultSet.next()){
db_username=resultSet.getString(2);
db_password=resultSet.getString(3);
}
//判斷用戶名和密碼是否正確
if (username.equals(db_username) && password.equals(db_password)){
//信息都正確
//頁面跳轉到success.jsp;
session.setAttribute("username",username);//存儲用戶名
response.sendRedirect(request.getContextPath()+"/success.jsp");
}else {
//用戶名獲取密碼不正確
//存儲錯誤信息
request.setAttribute("code_error","用戶名或者密碼錯誤");
//同一次請求,請求轉發
request.getRequestDispatcher("/userinfo/index.jsp").forward(request,response);//轉發錯誤信息
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。