자바 웹 의 Servlet 에 대한 심도 있 는 설명
1 Servlet 소개
Servlet 은 Sun 회사 가 동적 웹 을 개발 하 는 기술 이다.
Sun 은 이 API 에서 Servlet 라 는 인 터 페 이 스 를 제공 합 니 다.Servlet 프로그램 을 개발 하려 면 두 가지 작은 절 차 를 밟 아야 합 니 다.
2 HelloServlet
일반적인 Maven 프로젝트 를 만 들 고 src 디 렉 터 리 를 삭제 합 니 다.이 빈 프로젝트 가 Maven 메 인 프로젝트 입 니 다.
Maven 부자 프로젝트 에 대한 이해:
부모 항목 중 에
<modules>
<module>servlet-02</module>
</modules>
하위 항목 중 에
<parent>
<artifactId>javaweb-02-servlet</artifactId>
<groupId>com.srx</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
부모 항목 의 자바 하위 항목 을 직접 사용 할 수 있 습 니 다.
son extends father
Maven 환경 최적화Servlet 맵 작성
왜 맵 이 필요 합 니까?저 희 는 자바 프로그램 을 사용 하지만 브 라 우 저 를 통 해 방문 해 야 합 니 다.브 라 우 저 는 웹 서버 에 연결 해 야 합 니 다.그래서 저 희 는 웹 서비스 에 저희 가 쓴 Servlet 를 등록 하고 브 라 우 저 에 접근 할 수 있 는 경 로 를 제공 해 야 합 니 다.
<!-- servlet-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.srx.HellowServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>hello</url-pattern>
</servlet-mapping>
Tomcat 설정메모:프로젝트 발표 경 로 를 설정 하면 됩 니 다.
테스트 오 크 시작
3 Servlet 원리
servlet 는 웹 서버 에서 호출 됩 니 다.wev 서버 는 브 라 우 저 요청 을 받 은 후에 다음 과 같 습 니 다.
4 Mapping 문제
Servlet 에서 맵 경 로 를 지정 할 수 있 습 니 다.
一个Servlet 可以指定多个映射路径
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello3</url-pattern>
</servlet-mapping>
Servlet 에서 일반적인 맵 경 로 를 지정 할 수 있 습 니 다.
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello/*</url-pattern>
</servlet-mapping>
기본 요청 경로
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
접두사 나 접두사 등 을 지정 합 니 다.
<!--
: *
-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>*.abc</url-pattern>
</servlet-mapping>
우선 순위 문제고유 한 맵 경로 우선 순위 가 가장 높 습 니 다.찾 지 못 하면 기본 처리 요청 으로 갑 니 다.
<!--404-->
<servlet>
<servlet-name>error</servlet-name>
<servlet-class>com.srx.Error</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>error</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
5 servletContext웹 용 기 는 시작 할 때 모든 웹 프로그램 에 해당 하 는 ServletContext 대상 을 만 듭 니 다.이것 은 현재 웹 응용 프로그램 을 대표 합 니 다.
1.데이터 공유
내 가 이 Servlet 에 저장 한 데 이 터 는 다른 servlet 에서 얻 을 수 있다.
데 이 터 를 저장 하 는 클래스
public class test extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//this.getInitParameter(); //
//this.getServletContext(); // servlet
//this.getServletConfig(); servlet
ServletContext servletContext = this.getServletContext();
String username=" ";
// ServletContext uesrname username
servletContext.setAttribute("username",username);
System.out.println("hello");
}
}
출력 클래스
public class show extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
String username = (String) servletContext.getAttribute("username");
resp.getWriter().print(" :"+username);
}
}
설정 파일
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>com.srx.test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>getc</servlet-name>
<servlet-class>com.srx.show</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>getc</servlet-name>
<url-pattern>/getc</url-pattern>
</servlet-mapping>
테스트 접근 결과2.초기 화 매개 변수 가 져 오기
<!-- web -->
<context-param>
<param-name>url</param-name>
<param-value>JDBC:mysql//localhost:3306/mybatis</param-value>
</context-param>
테스트 클래스
public class context extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext Context = this.getServletContext();
String url = Context.getInitParameter("url");
resp.getWriter().print(url);
}
}
경로
<servlet>
<servlet-name>url</servlet-name>
<servlet-class>com.srx.context</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>url</servlet-name>
<url-pattern>/url</url-pattern>
</servlet-mapping>
3.리 트 윗 요청
public class ServletDemo extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(" ");
ServletContext context = this.getServletContext();
// RequestDispatcher zf = context.getRequestDispatcher("zf"); //
// zf.forward(req,resp); // forward
//
context.getRequestDispatcher("/getc").forward(req,resp);
}
}
<servlet>
<servlet-name>zzz</servlet-name>
<servlet-class>com.srx.ServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>zzz</servlet-name>
<url-pattern>/zzz</url-pattern>
</servlet-mapping>
4.자원 파일 읽 기
properties
아이디어:파일 흐름 이 필요 합 니 다.
public class ServletDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
Properties prop = new Properties();
prop.load(is);
String user = prop.getProperty("username");
String pwd = prop.getProperty("password");
resp.getWriter().print(user+":"+pwd);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
반사
<servlet>
<servlet-name>bbb</servlet-name>
<servlet-class>com.srx.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>bbb</servlet-name>
<url-pattern>/bbb</url-pattern>
</servlet-mapping>
6、HttpServletResponse웹 서버 는 클 라 이언 트 의 http 요청 을 받 았 습 니 다.이 요청 에 대해 요청 을 대표 하 는 HttpServletRequest 대상 을 만 들 지 마 십시오.응답 하 는 HttpServletResponse 를 대표 합 니 다.
브 라 우 저 에 정보 출력
2 파일 다운로드
public class FileServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// -
String realPath = "D:\\ \\javaweb-02-servlet\\response\\target\\classes\\111.png";
System.out.println(" "+realPath);
// -
String substring = realPath.substring(realPath.lastIndexOf("\\") + 1);
// -
resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(substring,"utf-8"));
// -
FileInputStream in = new FileInputStream(realPath);
// -
int len = 0;
byte[] buffer=new byte[1024];
// - OutputStream
ServletOutputStream outputStream = resp.getOutputStream();
// - FileOutputStream Buffer OutputStream
while ((len=in.read(buffer))>0){
outputStream.write(buffer,0,len);
}
in.close();
out.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
3.랜 덤 으로 리 셋 된 인증 코드 그림
public class ImgServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 2 ;
resp.setHeader("refresh","0.5");
//
BufferedImage image = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);
//
Graphics2D g = (Graphics2D) image.getGraphics(); //
//
g.setColor(Color.white);
g.fillRect(0,0,80,20);
//
g.setColor(Color.BLUE);
g.setFont(new Font(null,Font.BOLD,20));
g.drawString(makeNum(),0,20);
//
resp.setContentType("image/jpeg");
// ,
resp.setDateHeader("expires",-1);
resp.setHeader("Cache-Control","no-cache");
resp.setHeader("Pragma","no-cache");
//
ImageIO.write(image,"jpg", resp.getOutputStream());
}
private String makeNum() {
Random random = new Random();
String num=random.nextInt(9999999)+"";
StringBuffer sb = new StringBuffer();
for (int i = 0; i <7-num.length(); i++) {
sb.append("0");
}
num =sb.toString()+num;
return num;
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
4.방향 을 바꾼다b.하나의 웹 자원 이 클 라 이언 트 a 의 요청 을 받 은 후에 b.그 는 a 클 라 이언 트 에 게 다른 웹 자원 c 를 방문 하 라 고 알 렸 다.이 과정 을 재 설정 이 라 고 한다.
흔 한 장면:
사용자 로그 인
void sendRedirect(String var1) throws IOException;
테스트:
public class RedirectServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// //
// resp.setHeader("Location","/rr/img");
// resp.setStatus(302);
//
resp.sendRedirect("/rr/img");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
면접 문제:리 셋 과 리 트 윗 의 차 이 를 말씀 해 주 시 겠 어 요?같은 점:
자바 웹 의 Servlet 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 웹 의 Servlet 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Javaweb에서 양식 데이터를 가져오는 다양한 방법Javaweb에서 양식 데이터를 가져오는 몇 가지 방법 1. 키 값이 맞는 형식으로 폼 데이터를 얻는다 getParameter(String name): 키를 통해 value를 반환합니다. getParameterVal...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.