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(); } }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.