欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:Servlet見解2

柚子快報邀請碼778899分享:Servlet見解2

http://yzkb.51969.com/

4 創(chuàng)建servlet的三種方式

4.1 實現(xiàn)Servlet接口的方式

import javax.servlet.*;

import javax.servlet.annotation.WebServlet;

import java.io.IOException;

@WebServlet("/test1")

public class Servlet1 implements Servlet {

@Override

public void init(ServletConfig servletConfig) throws ServletException {

//s使用ServletConfig對象初始化我們的Servlet

//執(zhí)行了,從這個地方可以說明一個問題 Servlet已經(jīng)被實例化了

System.out.println("init方法執(zhí)行");

}

@Override

public ServletConfig getServletConfig() {

//獲取servlet配置信息對象

//沒有執(zhí)行

System.out.println("getServletConfig方法執(zhí)行");

return null;

}

@Override

public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

//核心方法 類似于我們的doGet()方法,和doPost()方法 請求和響應(yīng)

//一定執(zhí)行的

System.out.println("service");

}

@Override

public String getServletInfo() {

//獲取Servlet的詳細信息

//沒有執(zhí)行

System.out.println("getServletInfo方法執(zhí)行");

return null;

}

@Override

public void destroy() {

//當(dāng)tomcat關(guān)閉的時候,執(zhí)行銷毀這個servlet的方法

System.out.println("destroy方法執(zhí)行");

//只有當(dāng)tomcat關(guān)閉的時候,才會執(zhí)行這個方法

}

}

4.2 繼承GenericServlet抽象類的方式

import javax.servlet.GenericServlet;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.annotation.WebServlet;

import java.io.IOException;

/*

* 第二種方式:繼承GenericServlet

*

* */

@WebServlet("/test2")

public class Servlet2 extends GenericServlet {

//只有一個方法是必須重寫的,抽象方法

//為什么?service是核心方法,因為請求和響應(yīng)就是執(zhí)行這個方法

@Override

public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

//解決中文亂碼問題

servletResponse.setContentType("text/html;charset=utf-8");

servletResponse.getWriter().append("我是第二種創(chuàng)建Servlet的方法");

}

}

4.3 繼承HttpServlet的方式

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("/test3")

public class Servlet3 extends HttpServlet {

//因為在前端的時候,有兩種請求方式get和post

//doGet和doPost方法寫在了Service方法中了

@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 {

resp.setContentType("text/html;charset=utf-8");

resp.getWriter().println("我是HttpServlet創(chuàng)建的Servlet");

}

}

這三個創(chuàng)建方式選擇哪個?

最好的方式是繼承HttpServlet

1.可以減少對其他方法的要求 init destroy

2.可以根據(jù)前端的要求進行分門別類 doGet doPost

5 Servlet獲取前端提交的參數(shù)

學(xué)好Servlet必須緊緊圍繞著請求和響應(yīng)這兩個概念 以上寫的代碼只是進行請求,然后再響應(yīng)到客戶端。請求的時候沒有帶數(shù)據(jù)給Servlet 下面開始寫在請求的時候前端帶數(shù)據(jù)到servlet里面,我們servlet要接收前端給我們的這個數(shù)據(jù)

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

$Title$



servlet實例

public class LoginServlet extends HttpServlet {

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");

//html頁面中 input標簽發(fā)送的數(shù)據(jù),都會存到HttpServlet這個對象里面

//通過前端input標簽name的屬性值獲取前端發(fā)送的數(shù)據(jù)

String username = request.getParameter("username");

String password = request.getParameter("password");

System.out.println("username: " + username+"===password"+password);

//Servlet響應(yīng)數(shù)據(jù)到客戶端的時候,如果是中文的話,會亂碼

response.setContentType("text/html;charset=utf-8");

response.getWriter().write("username: " + user+"===password"+password);

}

}

web.xml

login

com.by.servlet.LoginServlet

login

/login

6 中文亂碼的解決方案

請求時候的亂碼問題:

//前端發(fā)送數(shù)據(jù)到Servlet,如果是post請求的話,input輸入中文數(shù)據(jù)的時候,Servlet接到的數(shù)據(jù)是亂碼的。

request.setCharacterEncoding("utf-8");

響應(yīng)時候中文亂碼的問題:

//Servlet響應(yīng)數(shù)據(jù)到客戶端的時候,如果是中文的話,會亂碼

response.setContentType("text/html;charset=utf-8");

7 重定向和轉(zhuǎn)發(fā)

web網(wǎng)站上面有一些跳轉(zhuǎn)按鈕。比如登錄成功以后跳轉(zhuǎn)到主頁面?。?!

7.1 重定向

是什么

用戶通過瀏覽器發(fā)送一個請求,Tomcat服務(wù)器接收這個請求,會給瀏覽器發(fā)送一個狀態(tài)碼302,并設(shè)置一個重定向的路徑,瀏覽器如果接收到了這個302的狀態(tài)碼以后,就會去自動加載服務(wù)器設(shè)置的路徑

一個頁面跳轉(zhuǎn)到另外一個頁面(應(yīng)用場景)、登錄頁面跳轉(zhuǎn)到主頁面: login.jsp====>LoginServlet====>main.jsp

特征:

①重定向的過程是瀏覽器(客戶端)的行為 ②實際上瀏覽器做了2次請求(當(dāng)點擊登錄按鈕的時候做了兩次請求)(分別是請求login和main.jsp) ③注意上一次請求的request對象會丟失 ④重定向有一個非常明顯的特征,即瀏覽器的url變化了

重定向就一句核心代碼:

response.sendRedirect("main.jsp"); //就這一行代碼,但是這一行代碼必須寫在doGet或者doPost方法中

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

Title

<%--請求RedirectServlet--%>



RedirectServlet

package com.by.servlet;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

public class RedirectServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//設(shè)置字符編碼

request.setCharacterEncoding("utf-8");

String username = request.getParameter("username");

String password = request.getParameter("password");

request.setAttribute("username", username);

request.setAttribute("password", password);

//登錄以后跳轉(zhuǎn)到主頁

//重定向

//這個TestLoginServlet里面的數(shù)據(jù)是不能傳給target.html的

response.sendRedirect("main.jsp");

}

}

web.xml

redirect

com.by.servlet.RedirectServlet

redirect

/redirect

main.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

Title

這是main頁面

<%--

<%=request.getAttribute("username")%>

<%=request.getAttribute("password")%>

--%>

${username}

${password}

測試

7.2 轉(zhuǎn)發(fā)

是什么

用戶發(fā)送數(shù)據(jù)請求到服務(wù)器,服務(wù)器接收當(dāng)前請求,會調(diào)用內(nèi)部方式(轉(zhuǎn)發(fā))處理該請求,最終把響應(yīng)給客戶端

特征:

①轉(zhuǎn)發(fā)是服務(wù)器的行為 ②瀏覽器在這個過程中只有一次行為 ③轉(zhuǎn)發(fā)可以帶有數(shù)據(jù) request對象中 ④url不會發(fā)生任何的變化

核心代碼也只有一行

request.getRequestDispatcher(“main.jsp”).forward(request,response);

//這一行代碼就表示進行了轉(zhuǎn)發(fā),url沒有變,但是響應(yīng)的結(jié)果卻是一次請求干了兩個活

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

Title

<%--請求ForwardServlet--%>



ForwardServlet

package com.by.servlet;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

public class ForwardServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//設(shè)置字符編碼

request.setCharacterEncoding("utf-8");

String username = request.getParameter("username");

String password = request.getParameter("password");

request.setAttribute("username", username);

request.setAttribute("password", password);

//登錄以后跳轉(zhuǎn)到主頁

//重定向

//這個TestLoginServlet里面的數(shù)據(jù)是不能傳給target.html的

request.getRequestDispatcher("main.jsp").forward(request, response);

}

}

web.xml

forward

com.by.servlet.ForwardServlet

forward

/forward

main.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

Title

這是main頁面

${username}

${password}

測試

8 Servlet的自動加載

默認情況下,第一次訪問servlet的時候,創(chuàng)建servlet對象。如果servlet構(gòu)造函數(shù)里面的代碼或者init方法里面的代碼比較多,就會導(dǎo)致用戶第一次訪問servlet的時候比較慢。這個時候,我們可以改變servlet對象的創(chuàng)建時機:提前到加載web應(yīng)用的時候。在servlet的配置信息中,加上一個標簽即可。

loadOnStartup

com.by.servlet.LoadOnStartupServlet

1

servlet實例:

public class LoadOnStartupServlet implements HttpServlet {

public LoadOnStartupServlet(){

System.out.println("LoadOnStartupServlet constructor method has run....");

}

}

這樣配置之后,servlet的構(gòu)造函數(shù)和init方法就會在web應(yīng)用加載的時候就會執(zhí)行。

9 ServletConfig對象

是什么 ServletConfig是javax.servlet.包下的一個接口,ServletConfig它是Servlet的一個配置對象; ServletConfig是由tomcat容器創(chuàng)建,通過init方法傳入給Servlet; ServletConfig對象如何獲取? 在GenericServlet里面定義了:

public ServletConfig getServletConfig() {

return this.config;

}

常用方法

getInitParameter(String parameterName); //根據(jù)參數(shù)名稱獲取指定的參數(shù)值

getInitParameterNames(); //獲取所有的參數(shù)名稱

需求:

獲取servlet里面定義的參數(shù)

demo2

com.by.servlet.ServletConfigServlet

username

root

password

root123

demo2

/demo2

package com.by.servlet;

import javax.servlet.*;

import javax.servlet.http.HttpServlet;

public class ServletConfigServlet extends HttpServlet {

@Override

public void service(ServletRequest servletRequest,

ServletResponse servletResponse) throws ServletException {

//1.獲取ServletConfig對象

ServletConfig servletConfig = getServletConfig();

//2.獲取Servlet中的初始化參數(shù)

String username = servletConfig.getInitParameter("username");

System.out.println(username);

String password = servletConfig.getInitParameter("password");

System.out.println(password);

//3.獲取ServletContext對象(域?qū)ο?

ServletContext servletContext = servletConfig.getServletContext();

}

}

思考:param參數(shù)可不可以在另外的Servlet中獲取? 不能

public class ServletConfigServlet2 extends HttpServlet {

@Override

public void goGet(ServletRequest servletRequest,

ServletResponse servletResponse) throws ServletException {

//1.獲取ServletConfig對象

ServletConfig servletConfig = getServletConfig();

//2.獲取Servlet中的初始化參數(shù)

String username = servletConfig.getInitParameter("username");//不能獲取

System.out.println(username);

String password = servletConfig.getInitParameter("password");//不能獲取

System.out.println(password);

//3.獲取ServletContext對象(域?qū)ο?

ServletContext servletContext = servletConfig.getServletContext();

}

}

10 ServletContext對象

是什么 ServletContext是javax.servlet包下的一個接口,又稱上下文對象,是配置對象也是一個域?qū)ο螅?當(dāng)服務(wù)器啟動時,會為服務(wù)器中的每一個web應(yīng)用程序創(chuàng)建一個ServletContext對象; 在web應(yīng)用中的servlet要想實現(xiàn)資源的共享,可以通過ServletContext來完成; 如何獲取這個對象:

public ServletContext getServletContext() {

//獲取ServletContext對象

return this.getServletConfig().getServletContext();

}

這個對象里面也有很多方法:

getInitParameter() //獲取指定參數(shù)名稱的全局參數(shù)值

getRealPath(String path) //獲得當(dāng)前項目的服務(wù)器磁盤路徑

getContextPath() //獲取項目的根路徑

getAttribute(String parameterName) //獲取ServletContext域中指定名稱的參數(shù)值;

setAttribute(String paramterName,Object parameterValue) //存儲參數(shù)到ServletContext域中;

removeAttribute(String parameterNam) //將ServletContext域中指定名稱的參數(shù)移除;

需求

獲取servlet里面定義的參數(shù)

username

root

password

root456

package com.by.servlet;

import javax.servlet.*;

import javax.servlet.http.HttpServlet;

public class ServletContextServlet extends HttpServlet {

@Override

public void service(ServletRequest servletRequest,

ServletResponse servletResponse) throws ServletException {

//獲取ServletContext對象

ServletContext servletContext = getServletContext();

//1.獲取全局初始化參數(shù)

String username = servletContext.getInitParameter("username");

System.out.println(username);

String password = servletContext.getInitParameter("password");

System.out.println(password);

//2.獲取服務(wù)器真實路徑

String upload = servletContext.getRealPath("");

System.out.println(upload);

//3.獲取項目的根路徑

String contextPath = servletContext.getContextPath();

System.out.println(contextPath);

//4.往ServletContext域中,存儲一個名稱為msg的屬性,值為"hello"

String str = "hello";

servletContext.setAttribute("msg",str);

}

}

思考:param參數(shù)可不可以在另外的Servlet中獲取? 不能

package com.by.servlet;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServlet;

public class ServletContextServlet2 extends HttpServlet {

@Override

public void doGet(ServletRequest servletRequest,

ServletResponse servletResponse) throws ServletException {

//從ServletContext域中取出msg的值

ServletContext servletContext = getServletContext();

//1.獲取全局初始化參數(shù)

String username = servletContext.getInitParameter("username");

System.out.println(username);

String password = servletContext.getInitParameter("password");

System.out.println(password);

//2.獲得msg屬性

Object msg = servletContext.getAttribute("msg");//能獲取

System.out.println(msg);

}

}

package com.by.servlet;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServlet;

public class ServletContextServlet3 extends HttpServlet {

@Override

public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException {

//1.獲取ServletContext對象

ServletContext servletContext = getServletContext();

//將ServletContext域中的msg參數(shù)移除

servletContext.removeAttribute("msg");

}

}

context3=

com.by.servlet.ServletContextServlet

context3=

/context=

context2

com.by.servlet.ServletContextServlet2

context2

/context2

context3

com.by.servlet.ServletContextServlet3

context3

/context3

11 Request對象

是什么

ServletRequest是一個接口,用戶訪問服務(wù)器,服務(wù)器會生成一個對象包含了http所有請求頭,由于使用的是http協(xié)議,所以該對象的名字叫HttpServletRequest

常用的方法

getRequestURL() //獲取的完整的URL,即統(tǒng)一資源定位符

getRequestURI() //獲取資源的名字,即統(tǒng)一資源標識符

getQueryString() //獲取一個url參數(shù)部分

getRemoteAddr() //返回的是客戶端的ip地址

getRemoteUser() //返回的是客戶端的用戶

getRemotePort() //返回的是客戶端的主機的端口號

getRemoteHost() //返回的是客戶端的主機地址

getCookie() //獲取Cookie對象

getSession() //獲取Session對象

getLocalName() //獲取Web服務(wù)器主機的名字

getServletContext() //獲取上下文對象的

setCharacterEncoding() //設(shè)置編碼集的

getParameter() //獲取前端傳過來的數(shù)據(jù)

setAttribute() //將數(shù)據(jù)設(shè)置給request對象

geAttribute() //獲取request對象中的數(shù)據(jù)

servlet實例

package com.by.servlet;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

public class RequestServlet extends HttpServlet {

protected void doPost(HttpServletRequest request,

HttpServletResponse response) throws Exception {

doGet(request, response);

}

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws Exception{

//獲取一個完整的url

//http://localhost:8080/01_servlet_HelloWorld_war/request1

System.out.println(request.getRequestURL());

//獲取資源的名字

//比如:http://localhost:8080/day42_xkh/request1

System.out.println(request.getRequestURI());///01_servlet_HelloWorld_war/request1

//獲取一個url的參數(shù)部分

//比如 http://localhost:8080/01_servlet_HelloWorld_war/request1?username=goudan

System.out.println(request.getParameter("username"));

//獲取前端傳送過來的數(shù)據(jù)

request.setCharacterEncoding("utf-8");//設(shè)置請求的編碼集

//給request這個對象設(shè)置數(shù)據(jù)

request.setAttribute("name","狗蛋");

//獲取request對象的值

request.getAttribute("name");

//獲取上下文對象

ServletContext servletContext = request.getServletContext();

//轉(zhuǎn)發(fā)

request.getRequestDispatcher("target.jsp").forward(request,response);

}

}

request

com.by.servlet.RequestServlet

request

/context

12 Response對象

是什么

響應(yīng)對象,把數(shù)據(jù)給客戶端 我們的Servlet緊緊圍繞著兩個點(Request,Response)請求和響應(yīng)

常用方法

setHeader() //設(shè)置響應(yīng)頭的參數(shù)

setContentType() //設(shè)置字符編碼集

getWriter() //獲取字符輸出流對象

addCookie() //對瀏覽器新增一個Cookie

sendRedirect() //重定向

servlet實例

package com.by.servlet;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

public class ResponseServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws Exception{

/**************亂碼問題*****/

//方式一

response.setCharacterEncoding("utf-8");//設(shè)置 HttpServletResponse使用utf-8編碼

response.setHeader("Content-Type",

"text/html;charset=utf-8");//通知瀏覽器使用utf-8解碼

//方式二

response.setContentType("text/html;charset=utf-8;aaa=bbb"); //包含方法一的兩個功能

//向客戶端發(fā)送響應(yīng)數(shù)據(jù)

response.getWriter().write("

hello

");

/************重定向***********/

//方式一

//在響應(yīng)頭中添加302狀態(tài)碼,告訴瀏覽器需要進行重定向

response.setStatus(302);

//在響應(yīng)頭中添加Location,指定重定向的位置

response.setHeader("Location", "http://www.baidu.com");

//方式二

response.sendRedirect("http://www.baidu.com"); //包含方法一的兩個功能

}

}

response

com.by.servlet.ResponseServlet

response

/response

柚子快報邀請碼778899分享:Servlet見解2

http://yzkb.51969.com/

推薦鏈接

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19267172.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄