http_servlet

오늘 http 프로 토 콜 과 servlet 의 기본 사용 을 배 웠 습 니 다.
다음은 http 프로 토 콜 입 니 다.
          HTTP 프로 토 콜 은 브 라 우 저 와 WEB 서버 가 통신 하 는 규칙 을 말 하 는데 http 는 두 가지 버 전이 있다. HTTP 1.0 / HTTP 1.1
                    HTTP1.0:
                         클 라 이언 트 가 서버 를 요청 한 후 서버 가 정 보 를 응답 한 후 바로 끊 기 고 하나의 자원 만 요청 하고 응답 할 수 있 습 니 다.
                   단점: 클 라 이언 트 가 연결 을 만 드 는 데 많은 시간 과 자원 을 소모 하고 한 번 의 연결 은 하나의 자원 에 만 응답 하 며 다음 요청 은 새로운 연결 을 만들어 야 합 니 다.
                  HTTP1.1:
                           장점: 클 라 이언 트 가 서버 를 요청 한 후 응답 을 받 은 후 일정 시간 동안 이 연결 은 유 지 됩 니 다.짧 은 시간 안에
                  클 라 이언 트 가 서버 에 다시 요청 하면 새로운 연결 을 만 들 필요 가 없습니다.
HTTP 요청 구성:  1. 요청 행 --- --- - 요청 방식 과 요청 버 전  2. 요청 헤더 - - - key: value 로 구 성 된 내용 은 매번 요청 이 다 릅 니 다. 다음은 하나의 예 입 니 다.             Accept:text/html;image/*                                 브 라 우 저가 어떤 종류의 응답 데 이 터 를 받 아들 일 수 있 는 지 표시 합 니 다             Accept-Charset :GBK                                      브 라 우 저 는 어떤 종류의 인 코딩 방식 을 받 습 니까?             Accept-Encoding:gzip compress                     브 라 우 저 는 gzip 의 압축 데 이 터 를 받 아들 일 수 있 습 니 다.             Accept-Language:en-us,zn-cn                         브 라 우 저 는 어떤 종류의 언어 를 받 습 니까?             Host:www.itheima.com:80                             요청 한 호스트 이름과 포트 번호             If-Modified-Since: Tue,11 Jul 2014 28:23:51    마지막 수정 시간             Referer:http://www.itheima.com/index.html      그 페이지 에서 넘 어 왔 습 니 다.             User-Agent:Mozilla/4.0                                     브 라 우 저 종류 와 버 전             Cookie:                                                             브 라 우 저 캐 시 서버 응답 정보             Connection:close/Keep-Alive                           브 라 우 저 와 서버 의 연결 은 열 리 거나 닫 힙 니 다.             Date: Tue, 11 Jul 2014 18:23:51 GMT             (접근 시간) 브 라 우 저가 서버 를 요청 하 는 시간 입 니 다. 이 시간 은 중국 시간 이 아 닙 니 다. 3_요청 체 또는 실체 내용          매번 요청 할 때마다 내용 이 있 는 것 이 아니 라 GET 방식 요청 체 는 내용 이 없습니다. 내용 이 요청 줄 에 있 기 때문에 POST 방식 요청 체 는 내용 이 있 습 니 다. 예 를 들 어 파일 업로드, 폼 은 POST 방식 으로 제출 합 니 다.하나의 완전한 HTTP 응답 은 세 부분 으로 나 뉜 다. 1응답 줄          프로 토 콜 이름과 버 전 응답 상태 코드 응답 상태 코드 의 영문 설명 2응답 헤드           많은 key: value 로 구 성 된 내용 이 있 습 니 다. 매번 응답 이 다 릅 니 다.           Location: http://www.itheima/index.html                                   서버 에서 브 라 우 저 접근 을 요구 하 는 URL 주소           Server:apache tomcat                                                              서버 알림 브 라 우 저 서버 이름           Content-Encoding: gzip                                                            서버 알림 브 라 우 저 에서 받 아야 할 압축 데이터 형식           Content-Length: 80                                                                   서버 알림 브 라 우 저 에서 받 아야 할 응답 내용 의 바이트 수           Content-Language: zh-cn                                                         서버 알림 브 라 우 저 에서 받 아야 할 언어 형식           Content-Type: text/html; charset=GBK                                     서버 는 브 라 우 저 에 게 받 아야 할 형식 과 어떤 방식 으로 디 코딩 을 해 야 하 는 지 알려 줍 니 다.           Last-Modified: Tue, 11 Jul 2014 18:23:51 GMT                        서버 가 브 라 우 저 브 라 우 저 에 접근 하 라 는 요청 의 최근 수정 시간 을 알 립 니 다.           Refresh: 1; url=http://www.itheima.com                                    서버 는 브 라 우 저 에 게 1 초 후에 새로 고침 을 알 리 고 지정 한 URL 페이지 에 접근 합 니 다.           Content-Disposition: attachment; filename=aaa.zip                 (파일 다운로드) 서버 알림 브 라 우 저 는 다운로드 방식 으로 자원 을 엽 니 다.           Transfer-Encoding: chunked                                                     (블록 별로 클 라 이언 트 에 데 이 터 를 전달) 서버 알림 브 라 우 저
                                                                                                              블록 방식 으로 파일 을 다운로드 하 는 브 라 우 저가 지정 한 디 렉 터 리               Set-Cookie:SS=Q0=5Lb_nQ; path=/search                              서버 알림 브 라 우 저 는 데이터 캐 시 를 브 라 우 저 로 받 아야 합 니 다.           Expires: - 1 / 3 가지 캐 시 금지 헤드 필드                                            다음 세 개의 응답 헤드 는 서버 가 브 라 우 저 에 캐 시 를 하지 말 라 고 요구 하 는 것 을 나타 낸다.
                                                                                                            서버 에서 온 웹 페이지           Cache-Control: no-cache                                    Pragma: no-cache               Connection: close/Keep-Alive                                                  서버 는 브 라 우 저 간 의 연결 이 닫 히 거나 열 렸 는 지 알려 줍 니 다.             Date: Tue, 11 Jul 2014 18:23:51 GM                                       서버 가 브 라 우 저 에 게 알려 주 는 시간 은 위 헤더 에 도 요청 이 있 고 응답 도 사 용 됩 니 다. 유 니 버 설 헤드 라 고 합 니 다. Connection 과 Date 는 유 니 버 설 헤드 입 니 다. 3. 응답 체 또는 실체 내용 입 니 다.      응답 체 와 응답 헤드 사이 에 빈 줄 이 있 습 니 다. 응답 상태 입 니까? 서버 가 이번 응답 설정 에 대한 유일한 번호 입 니 다. 인 코딩 마다 특정한 의미 가 있 습 니 다. 일반적인 응답 번 호 는 다음 과 같 습 니 다.            200: 서버 응답 이 정확 함 을 나타 낸다            302: 방향 변경  이 서버 에 이 자원 이 없다 는 뜻 으로 서버 는 클 라 이언 트 에 게 다른 서버 에 자원 을 찾 으 라 고 요구 합 니 다.            307: 리 트 윗   서버 에 이 자원 이 없 으 면 서버 는 스스로 다른 서버 에 가서 자원 을 찾 습 니 다.            304: 클 라 이언 트 가 서버 자원 을 요청 합 니 다. 자원 은 수정 되 지 않 았 고 클 라 이언 트 에 캐 시 되 었 습 니 다. 클 라 이언 트 는 캐 시 에서 가 져 옵 니 다.            404: 클 라 이언 트 요청 서버 의 URL 이 잘못 되 었 습 니 다.            500: 클 라 이언 트 요청 URL 이 맞습니다. 하지만 서버 처리 자원 이 잘못 되 었 습 니 다.
응답 헤드 를 설정 하여 클 라 이언 트 가 정 보 를 캐 시 하지 않 고 코드 를 사용 하도록 합 니 다.
<span style="font-size:14px;">         response.setDateHeader("expires",-1);
         response.setHeader("cache-control","no-cache");
         response.setHeader("pragma","no-cache");</span>

브 라 우 저 3 면 설정 후 tomcat 첫 페이지 로 이동:
resp.setHeader("Refresh", "3;url=http://127.0.0.1:8080");

응답 헤더 다운로드 내용 설정:
response.setHeader("content-disposition","attachment;filename="+filename);

Servlet 를 만 드 는 방식 은 세 가지 가 있 습 니 다.            1. 일반 클래스 는 Servlet 인 터 페 이 스 를 실현 하고 service () 방법 을 다시 작성 합 니 다. 요청 할 때마다 service () 방법 을 호출 합 니 다. 단점: 불필요 한 방법 은 반드시 실현 해 야 합 니 다.             2. 일반 클래스 는 GenericServlset 클래스 를 계승 하여 service () 를 다시 쓰 고 요청 할 때마다 Service () 방법 을 호출 합 니 다. 단점: 서로 다른 요청 은 분리 할 수 없습니다.             3. HttpServlet 클래스 를 계승 하여 doPost () 와 doGet () 방법 을 재 작성 합 니 다. doPost 는 post 요청 을 받 고 doGet 은 get 요청 을 받 습 니 다. ServlerRequest 는 부모 인터페이스 로 http 프로 토 콜 도 처리 할 수 있 고 http 프로 토 콜 도 처리 할 수 있 습 니 다. HttpServletRequest 는 하위 인터페이스 입 니 다. 모든 제안 은 HttpServletRequest Servlet 의 수명 주기 입 니 다.             constructor (): 첫 방문 실행 - > init () - > doGet () / doPost () 만 있 습 니 다.
              init();                      doGet();    여러 번 실행 시 중복 호출             destory();  서버 가 끊 겼 을 때 실행       항상 하나의 Servlet 만 이 모든 클 라 이언 트 에 서 비 스 를 제공 합 니 다. 즉, Servlet 은 하나의 예 입 니 다. Servlet 은 처음 방문 할 때 만 인 스 턴 스 를 만 듭 니 다. Servlet 를 자동 으로 불 러 옵 니 다. 서버 를 배치 하기 전에 < servlet > < / servlet > 에 속성 을 추가 할 수 있 습 니 다. < load - on - startup > 0 < / load - on - startup > 값 이 마이너스 라면 아무런 효과 가 없습니다. 수치 가 작 을 수록 먼저 시작 합 니 다.. Servlet 에서 init (ServletConfig config) 방법 인 자 를 다시 쓰 면 웹. xml 의 데 이 터 를 얻 을 수 있 습 니 다.
<init-param>
    <param-name></param-name>
    <param-value></parame-value>
</init-param>

        :</span><pre name="code" class="java"><span style="font-size:14px;"> <servlet>
  	<servlet-name>Demo06</servlet-name>
  	<servlet-class>itcase.http.Demo06</servlet-class>
  	<init-param>
  		<param-name>haha</param-name>
  		<param-value>  </param-value>
  	</init-param>
  	<init-param>
  		<param-name>xixi</param-name>
  		<param-value>  </param-value>
  	</init-param>
  </servlet>

    :
public class Demo06 extends HttpServlet{
	private ServletConfig config;
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
			Enumeration<String> names = config.getInitParameterNames();
			while(names.hasMoreElements()){
				String name = names.nextElement();
				String value = config.getInitParameter(name);
			}
	}
	@Override
	public void init(ServletConfig config) throws ServletException {
		this.config = config;
	}
 
 提倡创建Servlet直接继承HttpServlet的原因:       1,我们在企业中,处理的web请求,大多是http协议的,正好HttpServlet 类是符合HTTP协议规则的。       2,HttpServlet类,继承了GenericServlet类,也实现了Servlet接口,不光有父类的功能,也有自己独特的操作       3,HttpServlet类可以根据客户端提交的方法来处理,例如:doGet doPost   通常不需要重写service方法       4,HttpServlet无法init无法获取ServletCOnfig,但是可以通过 getServletConfig方法获取ServletConfig对象一个servlet映射多个虚拟路径    1,使用 /*  通配符    2,*.do       3,* 和 / 不能同时存在        项目中将<url-pattern>/</url-pattern>的Servlet,叫缺省,Servlet,一般不处理http请求,专处理别的Servlet不处理HTTP请求程序员不用编写 缺省Servlet,每个web服务器中都有缺省Servlet,例如:404页面。如果有2个缺省Servlet,只要访问当前web应用,就用当前web应用的缺省Servlet处理;如果访问的不是当前web应用,则有tomcat中的缺省Servlet处理。以下代码实现了把一个人间输出到浏览器 
 
 /*
 *    servlet,         
 */
public class Demo09 extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
			InputStream is = this.getClass().getClassLoader().getResourceAsStream("../../images/       .jpg");
			//       
			if(is == null){
				System.out.println("hah ");
				return;
			}
			OutputStream os = resp.getOutputStream();
			int len = 0;
			byte[] buf = new byte[1024];
			while((len = is.read(buf))>0){
				os.write(buf, 0, len);
			}
			os.close();
			is.close();
			
	}
}

좋은 웹페이지 즐겨찾기