Servlet

Servlet其實就是客戶端和服務(wù)器之間的翻譯官,請求的大致過程模擬:
1.服務(wù)器獲取http請求及資源
2.創(chuàng)建一個Servlet對象,同時在創(chuàng)建的過程中進行initialize
3.調(diào)用Servlet中的service方法,創(chuàng)建HttpRequest和HttpResponse對象
4.服務(wù)器關(guān)閉的時候銷毀Servlet對象

1.ServletConfig

作用:可以從配置文件中獲取某些特定的初始化參數(shù)

web.xml代碼

<servlet>
    <description></description>
    <display-name>MyConfig</display-name>
    <servlet-name>MyConfig</servlet-name>
    <servlet-class>com.itcased.servletconfig.MyConfig</servlet-class>
    <init-param>
    <param-name>user</param-name>
    <param-value>hello</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>MyConfig</servlet-name>
    <url-pattern>/myconfig</url-pattern>
  </servlet-mapping>

注意:init-para標簽只能在最后插入,不然會報錯

Java代碼

@Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println(config.getInitParameter("user"));
    }

Servlet配置的標準格式

  <servlet>
  <servlet-name>abc</servlet-name>
  <servlet-class>com.itcased.servlet.MyServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>abc</servlet-name>
  <url-pattern>/Urlabc</url-pattern>
  </servlet-mapping>

url-pattern的三種匹配方式 1完全匹配 2目錄匹配 3擴展名匹配
缺省Servlet:如果/1.html在自己的web.xml配置文件中沒有找到,那么就去缺省/中找,如果找到了匹配的靜態(tài)資源,然后返回該對象。

2.ServletContext

web應(yīng)用的上下文對象,只有一個。
獲取ServletContext對象的方法:this.getServletContext()
兩個常用的作用:
1.獲取絕對路徑的兩種方式:
?1.context.getRealPath(para) 參數(shù)是相對于web-content的路徑
?2.this.class.getClassLoader().getResource(para).getPath() 參數(shù)是相對于classes文件的路徑
2.ServletContex是一個域?qū)ο?/em>
context.setAttribute(key,object)來進行對象的存儲
getAttribute(key)來進行對象的取出
removeAttribute(key)進行對象的移除

forexp:記錄登錄的人數(shù)并且完成用戶的登錄次數(shù)統(tǒng)計

package com.itcased.login;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import com.itcased.domain.User;
import com.itcased.utils.DataSourceUtil;

public class Login2 extends HttpServlet {

    private static final long serialVersionUID = 1L;
    @Override
    public void init() throws ServletException {
        //初始化時候設(shè)置一個count對象
        int count=0;
        this.getServletContext().setAttribute("count", count);
        
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //1.獲得用戶名和密碼
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        //2.通過數(shù)據(jù)庫來實現(xiàn)驗證
        //response.getWriter().write(username);
        QueryRunner qr=new QueryRunner(DataSourceUtil.getDataSource());
        String sql="select * from user where username=? and password=?";
        User user=null;
        try {
            user = qr.query(sql, new BeanHandler<User>(User.class), username,password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        if(user!=null){
            response.getWriter().write("congratulations");
            Integer count=(Integer) this.getServletContext().getAttribute("count");
            count=count+1;
            this.getServletContext().setAttribute("count", count);
            response.getWriter().write("當前登錄次數(shù)為"+count);
        }else{
            response.getWriter().write("sorry");
        }
        
        
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

注意:doGet和doPost根據(jù)當前頁面的提交方式來執(zhí)行響應(yīng)的方法

3.HttpRequest對象

3.1獲取網(wǎng)絡(luò)連接信息

//獲取http中的請求方式
System.out.println(request.getMethod());
//獲取http中的虛擬路徑
System.out.println(request.getRequestURI());
//獲取請求資源所屬web應(yīng)用的路徑
System.out.println(request.getContextPath());
//獲取客戶端的ip地址
System.out.println(request.getRemoteAddr());

3.2獲取請求頭信息

        //獲取請求頭某個信息
        System.out.println(request.getHeader("User-Agent"));
        //獲取請求頭的所有信息
        Enumeration<String> headerNames = request.getHeaderNames();
        while(headerNames.hasMoreElements()){
            String nextElement = headerNames.nextElement();
            String header = request.getHeader(nextElement);
            System.out.println(nextElement+"---"+header);
        }

3.3獲取請求參數(shù)

request.getParameter() 獲取單一的參數(shù)
request.getParameterMaps() 獲取所有的參數(shù)

        Map<String, String[]> map = request.getParameterMap();
        for (Map.Entry<String, String[]> entry : map.entrySet()) {
            for ( String st : entry.getValue()) {
                response.getWriter().write(st);
            }
        }

3.4請求域?qū)傩?/h2>

request.getResquestDispatcher("url").forword(request,response)請求轉(zhuǎn)發(fā)
注意和重定向的區(qū)別:重定向是兩次請求,而請求轉(zhuǎn)發(fā)是一次請求,HttpRequest里面數(shù)據(jù)可以共享,類似于全局變量。

RequestDispatcher requestDispatcher = request.getRequestDispatcher("/forward");
requestDispatcher.forward(request, response);

4.HttpResponse對象

response.sendRedict(url) 重定向

response.getWriter() 獲取響應(yīng)對象的輸出流 在那之前必須設(shè)置文本格式response.setContentType("text/html;charset=UTF-8")

完成文件下載
通過文件的mime類型去區(qū)分類型

5 完成的案例要求

1.用戶的注冊及登錄功能

運用BeanUtils工具把map集合映射到user對象中去

        Map<String, String[]> parameterMap = request.getParameterMap();
        User2 user2=new User2();
        try {
            //運用組件進行
            BeanUtils.populate(user2, parameterMap);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 小灶四班有個非常著名的小團體。班子成員包括CEO、秘書、財務(wù)、后勤、保衛(wèi)隊,以及CEO腦殘粉;團隊口號是字說天下,...
    自愈小姐閱讀 218評論 6 8
  • 上一篇全篇沒有油菜花,是還沒去簧嶺和江嶺是發(fā)現(xiàn)婺源不止油菜花。但是在走進近油菜花田時,嗅著那香味,仿佛置身仙境,尤...
    叮個隆咚嗆嗆嗆閱讀 398評論 2 4
  • 今天我們開始到黃山游玩 。雖然是坐著纜車上山,但是去游覽了始信峰,一路看了團結(jié)松、連理松,吃過中午飯后就順著山上走...
    風衣雨劍閱讀 663評論 0 0
  • 7.7是牛郎和織女的傳說,而現(xiàn)在很多商家卻把這個日子作為宣傳的噱頭,
    scofei閱讀 299評論 2 0

友情鏈接更多精彩內(nèi)容