欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaWeb.servlet的基本使用方法詳解

 更新時(shí)間:2022年04月29日 10:06:26   作者:失格LXY  
Servlet指在服務(wù)器端執(zhí)行的一段Java代碼,可以接收用戶的請(qǐng)求和返回給用戶響應(yīng)結(jié)果,下面這篇文章主要給大家介紹了關(guān)于JavaWeb.servlet基本使用的相關(guān)資料,需要的朋友可以參考下

前言:

我們?cè)谇皫灼恼吕锏膚eb項(xiàng)目都是用jsp文件完成的,那么什么時(shí)候jsp算是學(xué)完了呢?——在jsp文件中沒有java代碼。

在原來(lái)的doxxx.jsp文件里寫的都是處理登陸或者主頁(yè)面功能的java代碼,現(xiàn)在我們需要servlet來(lái)代替doxxx.jsp文件。

一.實(shí)現(xiàn)servlet

我們可以一個(gè)登陸來(lái)當(dāng)例子。

建一個(gè)com.xxx.servlet包,在寫一個(gè)LoginServlet類

package com.zking.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
/**
 * 
 * @author zjjt
 *用來(lái)實(shí)現(xiàn)登陸請(qǐng)求的處理
 */
public class LoginServlet implements Servlet{
 
	//生命周期
	
	@Override//初始化
	public void init(ServletConfig arg0) throws ServletException {
		//當(dāng)請(qǐng)求來(lái)到這個(gè)servlet就會(huì)調(diào)用init方法
		System.out.println("開始初始化");
	}
	
	@Override//服務(wù)
	public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
		// 所有的代碼寫在這個(gè)方法中
		//強(qiáng)轉(zhuǎn)響應(yīng)
		HttpServletResponse response = (HttpServletResponse) resp;
		//強(qiáng)轉(zhuǎn)請(qǐng)求
		HttpServletRequest request = (HttpServletRequest) req;
		//如果用戶名是中文
		req.setCharacterEncoding("utf-8");
		//取到用戶數(shù)據(jù)
		String username = req.getParameter("username");
		String password = req.getParameter("password");
		//通過響應(yīng)對(duì)象獲得輸出對(duì)象
		PrintWriter out = response.getWriter();
	    //通過請(qǐng)求對(duì)象取session,需要強(qiáng)轉(zhuǎn)請(qǐng)求
		HttpSession session = request.getSession();
		//取application通過請(qǐng)求對(duì)象
		ServletContext application = request.getServletContext();
		//與數(shù)據(jù)庫(kù)數(shù)據(jù)做對(duì)比
		if("root".equals(username)&&"root123".equals(password)) {
			//登陸成功
			//轉(zhuǎn)發(fā):req.getRequestDispatcher("/xx").forward(req, resp);
	        //重定向:需要強(qiáng)轉(zhuǎn)響應(yīng)
			//response.sendRedirect("/xx");
			out.println("登陸成功");
		}else {
			//登陸失敗
			out.println("登陸失敗");
		}
	}
	
	@Override//銷毀
	public void destroy() {
		//什么時(shí)候銷毀
		//1.服務(wù)關(guān)閉時(shí)
		//2.這個(gè)類被修改時(shí)
		System.out.println("我銷毀了");
	}
	
	@Override//得到配置
	public ServletConfig getServletConfig() {
		// TODO Auto-generated method stub
		return null;
	}
	
	@Override//得到信息
	public String getServletInfo() {
		// TODO Auto-generated method stub
		return null;
	}
 
 
}

 家人們注意了在代碼里我使用了強(qiáng)轉(zhuǎn),是因?yàn)镾ervletRequest 和 ServletResponse 沒有重定向功能,所有request(請(qǐng)求)和response(響應(yīng))取不到值。但是ServletRequest 和 ServletResponse的子類有重定向功能所有,我們要進(jìn)行強(qiáng)轉(zhuǎn)。

提供訪問路徑【web.xml】

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>Web20</display-name>
  <!-- web.xml是整個(gè)項(xiàng)目的配置文件  -->
  <welcome-file-list>
    <welcome-file>/index.jsp</welcome-file>
  </welcome-file-list>
  <!-- 1.配置servlet -->
  <servlet>
    <!-- 給取個(gè)名字 -->
    <servlet-name>one</servlet-name>
    <!-- servlet-class需要填上類的全路徑 -->
    <servlet-class>com.zking.servlet.LoginServlet</servlet-class>
  </servlet>
  <!-- 2.配置servlet的訪問路徑 -->
  <!-- mapping 映射 -->
  <servlet-mapping>
     <!-- 對(duì)應(yīng)的servlet的名字 -->
     <servlet-name>one</servlet-name>
     <!-- 給它配置一個(gè)訪問路徑 -->
     <url-pattern>/login.do</url-pattern>
  </servlet-mapping>
</web-app>

切記修改了web.xml的代碼一定要重啟服務(wù)器 

訪問路徑一定要加/,否則運(yùn)行會(huì)報(bào)錯(cuò)

 登陸界面代碼:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- action里填配置的路徑不需要加/ -->
<form action="login.do" method="post">
    <p><input type="text" name="username"></p>
    <p><input type="text" name="password"></p>
    <p><button>登陸</button></p>
</form>
</body>
</html>

 這樣我們的登陸就完成了,但是這樣大家會(huì)不會(huì)覺得代碼有點(diǎn)多,沒關(guān)系,還有其他方法。

二.開發(fā)模式 

我們的開發(fā)模式有兩種,一種是(傳統(tǒng)的開發(fā)模式)配置式開發(fā),另一種是注解式開發(fā)。我們上面所講的就是配置式開發(fā),接下來(lái)我們來(lái)講一講注解式開發(fā)~( ̄▽ ̄)~*。

注解式開發(fā)使用的是@注解,在代碼中@WebServlet就等于web.xml里的

 在@WebServlet后面加上(),在里面直接填入路徑,例如@WebServlet("/xxx")就等于web.xml里的

三.繼承Servlet 

 使用注解式開發(fā)的方法我們就可以不用修改web.xml代碼了,是不是簡(jiǎn)單多了(●'?'●)。接下來(lái)我們寫一個(gè)MyServlet文件,寫Servlet有兩種方法,一種式實(shí)現(xiàn),另一種是繼承。實(shí)現(xiàn)的方法我們已經(jīng)寫過了,接下來(lái)我們使用繼承的方法

package com.zking.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletContext;
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;
/**
 * 
 * @author zjjt
 *
 */
@WebServlet("/test.do")//直接填訪問路徑
public class MyServlet extends HttpServlet{
	
	//不同的請(qǐng)求方式:
	//doGet 專門處理get請(qǐng)求
	//doPost 專門處理post請(qǐng)求
	
	@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 {
		//登陸功能
		//如果用戶名是中文
		req.setCharacterEncoding("utf-8");
		//取到用戶數(shù)據(jù)
		String username = req.getParameter("username");
		String password = req.getParameter("password");
		//支持中文的編碼【utf-8】【gb2312】【big5】
		req.setCharacterEncoding("gb2312");
		//通過響應(yīng)對(duì)象獲得輸出對(duì)象
		PrintWriter out = resp.getWriter();
	    //通過請(qǐng)求對(duì)象取session,需要強(qiáng)轉(zhuǎn)請(qǐng)求
		HttpSession session = req.getSession();
		//取application通過請(qǐng)求對(duì)象
		ServletContext application = req.getServletContext();
		//與數(shù)據(jù)庫(kù)數(shù)據(jù)做對(duì)比
		if("root".equals(username)&&"root123".equals(password)) {
			//登陸成功
			//轉(zhuǎn)發(fā):req.getRequestDispatcher("/xx").forward(req, resp);
	        //重定向:需要強(qiáng)轉(zhuǎn)響應(yīng)
			//response.sendRedirect("/xx");
			out.println("登陸成功");
		}else {
			//登陸失敗
			out.println("登陸失敗");
		}
	}
}

家人們有發(fā)現(xiàn)實(shí)現(xiàn)和繼承servlet有什么區(qū)別了嗎

我相信細(xì)心的家人們應(yīng)該已經(jīng)發(fā)現(xiàn)了我這里繼承的是HttpServlet而不是Servlet。這是因?yàn)镠ttpServlet是它的子類,具有重定向功能,這下我們又可以省去強(qiáng)轉(zhuǎn)的部分了。所有我推薦大家使用注解式開發(fā)模式和繼承Servlet的方式來(lái)寫Servlet喲~

總結(jié)

到此這篇關(guān)于JavaWeb.servlet基本使用的文章就介紹到這了,更多相關(guān)JavaWeb.servlet使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JAVA提高第八篇 動(dòng)態(tài)代理技術(shù)

    JAVA提高第八篇 動(dòng)態(tài)代理技術(shù)

    這篇文章主要為大家詳細(xì)介紹了JAVA動(dòng)態(tài)代理技術(shù)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • SpringBoot整合canal實(shí)現(xiàn)數(shù)據(jù)同步的示例代碼

    SpringBoot整合canal實(shí)現(xiàn)數(shù)據(jù)同步的示例代碼

    本文主要介紹了SpringBoot整合canal實(shí)現(xiàn)數(shù)據(jù)同步,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • spring security自定義認(rèn)證登錄的全過程記錄

    spring security自定義認(rèn)證登錄的全過程記錄

    這篇文章主要給大家介紹了關(guān)于spring security自定義認(rèn)證登錄的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Spring使用注解存儲(chǔ)Bean對(duì)象的方法詳解

    Spring使用注解存儲(chǔ)Bean對(duì)象的方法詳解

    在使用學(xué)習(xí)使用 Spring過程中,當(dāng)我們要實(shí)現(xiàn)一個(gè)功能的時(shí)候,先應(yīng)該考慮的是有沒有相應(yīng)的注解是實(shí)現(xiàn)對(duì)應(yīng)功能的,Spring 中很多功能的配置都是可以依靠注解實(shí)現(xiàn)的,而本篇中介紹的是使用注解來(lái)存儲(chǔ) Bean 對(duì)象
    2023-07-07
  • Java數(shù)據(jù)結(jié)構(gòu)之HashMap和HashSet

    Java數(shù)據(jù)結(jié)構(gòu)之HashMap和HashSet

    這篇文章主要介紹了HashMap和HashSet,什么是哈希表以及HashMap的部分源碼解讀,想了解更多的小伙伴,可以參考閱讀本文
    2023-03-03
  • SpringBoot集成阿里巴巴Druid監(jiān)控的示例代碼

    SpringBoot集成阿里巴巴Druid監(jiān)控的示例代碼

    這篇文章主要介紹了SpringBoot集成阿里巴巴Druid監(jiān)控的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2018-04-04
  • Java中的ReentrantReadWriteLock使用詳解

    Java中的ReentrantReadWriteLock使用詳解

    這篇文章主要介紹了Java中的ReentrantReadWriteLock使用詳解,ReentrantReadWriteLock是Java中的一個(gè)鎖實(shí)現(xiàn),它提供了讀寫分離的功能,這種讀寫分離的機(jī)制可以提高并發(fā)性能,特別適用于讀多寫少的場(chǎng)景,需要的朋友可以參考下
    2023-11-11
  • maven工程如何讀取resource目錄下配置文件

    maven工程如何讀取resource目錄下配置文件

    這篇文章主要介紹了maven工程如何讀取,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Gateway集成Netty服務(wù)的配置加載詳解

    Gateway集成Netty服務(wù)的配置加載詳解

    這篇文章主要為大家介紹了Gateway集成Netty服務(wù)的配置加載詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • java如何獲取實(shí)體類的屬性名和屬性值

    java如何獲取實(shí)體類的屬性名和屬性值

    這篇文章主要介紹了java如何獲取實(shí)體類的屬性名和屬性值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評(píng)論