자바 웹 입문:ServletContext 상세 설명 및 응용
11022 단어 JavaServletContext
웹.xml 파일 에 서 는 Servlet 의 초기 화 정 보 를 설정 할 수 있 을 뿐만 아니 라 전체 웹 응용 프로그램 에 초기 화 정 보 를 설정 할 수 있 습 니 다.
1.웹 프로그램 시작 시 매개 변 수 를 초기 화 합 니 다.
웹.xml 설정 초기 화 할 인자
<!--1、 web -->
<context-param>
<param-name>name</param-name>
<param-value>crush</param-value>
</context-param>
<context-param>
<param-name>school</param-name>
<param-value>hngy</param-value>
</context-param>
Servlet 를 써 서 HttpServlet 을 계승 하 세 요.
/**
* @Author: crush
* @Date: 2021-05-09 16:32
* version 1.0
*/
@WebServlet("/servlet")
public class ServletContextTest extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
ServletContext servletContext = this.getServletContext();
//
String parameter = servletContext.getInitParameter("name");
writer.print(parameter);
writer.print("<br><hr>");
//
Enumeration<String> initParameterNames = servletContext.getInitParameterNames();
while (initParameterNames.hasMoreElements()){
String name = initParameterNames.nextElement();
String value = servletContext.getInitParameter(name);
writer.print(name+":"+value);
writer.print("<hr>");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
@WebServlet("/servlet 6")의 역할 은
<servlet>
<servlet-name>/servlet1</servlet-name>
<servlet-class>com.crush.servlet.ServletContextTest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>/servlet1</servlet-name>
<url-pattern>/servlet1</url-pattern>
</servlet-mapping>
2.여러 Servlet 대상 의 데이터 공유 실현하나의 웹 애플 리 케 이 션 에서 모든 Servlet 은 Servlet Context 대상 을 공유 합 니 다.일정한 때 에 ServletContext 도 메 시 지 를 전달 할 수 있다.
전역 적 으로 필요 한 대상 이나 데 이 터 를 ServletContext 에 넣 을 수 있 습 니 다.
ServletContext 인터페이스의 방법:ServletContext 역 속성 을 증가,획득,삭제,설정 하 는 네 가지 방법 을 설명 합 니 다.
방법.
묘사 하 다.
Enumeration getAttributeNames();
이 ServletContext 의 모든 속성 이름 을 포함 하 는 Enumeration 을 되 돌려 줍 니 다.
Object getAttribute(String name);
주어진 이름 을 가 진 servlet 용기 속성 되 돌리 기;
void removeAttribute(String name);
이 ServletContext 에서 주어진 이름 을 가 진 속성 을 삭제 합 니 다.
setAttribute(String name,Object obj)
이 ServletContext 에서 대상 을 주어진 속성 이름 에 연결 합 니 다.
지정 한 이름 이 속성 에 사용 되 었 다 면 이 방법 은 새로운 속성 으로 이 속성 을 대체 합 니 다.
ServletContext 에 디텍터 를 설정 하면 용기 가 알 립 니 다.
설정 값:ServletContextTest 1
/**
* @Author: crush
* @Date: 2021-05-09 16:59
* version 1.0
*/
@WebServlet("/servlet1")
public class ServletContextTest1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// ServletContext
ServletContext servletContext = this.getServletContext();
// ServletContext name obj
// ServletContext username=crush
servletContext.setAttribute("username","crush");
//
System.out.println(" ");
//
// resp.sendRedirect("/servlet2");
//
req.getRequestDispatcher("servlet2").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
추출 값:ServletContextTest 2
/**
* @Author: crush
* @Date: 2021-05-09 16:59
* version 1.0
*/
@WebServlet("/servlet2")
public class ServletContextTest2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// ServletContext
ServletContext servletContext = this.getServletContext();
// username
String username =(String) servletContext.getAttribute("username");
PrintWriter writer = resp.getWriter();
writer.print(username);
// Enumeration ServletContext
// Enumeration<String> attributeNames = servletContext.getAttributeNames();
// ServletContext 。
// servletContext.removeAttribute("");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
테스트:먼저/servlet 1 저장 값 에 접근 합 니 다.
재 접근/servlet 2 값 추출
3.웹 응용 에서 의 자원 읽 기
ServletContext 를 사용 하면 웹 에서 사용 할 자원 을 읽 을 수 있 습 니 다.
상용 방법
방법.
묘사 하 다.
String getRealPath(String path);
주어진 가상 경로 와 대응 하 는 실제 경 로 를 가 져 옵 니 다.
InputStream getResourceAsStream(String path);
지정 한 경로 에 있 는 자원 을 InputStream 대상 으로 되 돌려 줍 니 다.
URL getResource(String path)
주어진 경로 에 비 친 자원 의 URL 을 되 돌려 줍 니 다.
mysql.properties
user=root
password=123456
url=jdbc:mysql://localhost:3306/mysql
drive=com
자원 파일 읽 기
/**
*
* @Author: crush
* @Date: 2021-05-09 16:59
* version 1.0
*/
@WebServlet("/servlet3")
public class ServletContextTest3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
ServletContext servletContext = this.getServletContext();
// web
InputStream inputStream = servletContext.getResourceAsStream("\\WEB-INF\\classes\\mysql.properties");
//
Properties properties = new Properties();
// load ( )
properties.load(inputStream);
PrintWriter writer = resp.getWriter();
writer.print("user"+properties.getProperty("user")+"<br>");
writer.print("password"+properties.getProperty("password")+"<br>");
writer.print("url"+properties.getProperty("url")+"<br>");
writer.print("drive"+properties.getProperty("drive")+"<br>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
mysql.properties 가 왜 WEB-INF/classes/디 렉 터 리 에서 추출 되 었 는 지 에 대한 설명resources 와 자바 폴 더 의 웹 프로그램 에서 의 경 로 는 모두 classes 의 경로 에서 도착 한 후에 우 리 는 classpath 의 경 로 를 배 울 것 입 니 다.
더 잘 알 게 될 거 야.
두 번 째 방식
my sql.properties 파일 을 WEB-INF/디 렉 터 리 에 직접 놓 습 니 다.
이때 취 하 는 경로 가 바 뀌 었 으 니 직접 그렇게 취 할 수 있 습 니 다.
이때 우 리 는 파일 이 WEB-INF 아래 에 있다 면 컴 파일 이 끝 난 후에 바로 WEB-INF 아래 에 있 는 것 이지 classes 디 렉 터 리 아래 에 있 는 것 이 아니 라 WEB-INF 아래 에 있 는 것 을 발견 했다.이 내용 은 마 븐 의 내용 입 니 다.궁금 하면 찾 아 보 세 요.
4.전송 요청
ServletContextTest 5 를 ServletContextTest 에 전송 하기
/**
*
* @Author: crush
* @Date: 2021-05-09 16:59
* version 1.0
*/
@WebServlet("/servlet5")
public class ServletContextTest5 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
ServletContext servletContext = this.getServletContext();
// RequestDispatcher 。 。
// / , 。 getContext RequestDispatcher
servletContext.getRequestDispatcher("/servlet").forward(req,resp);
//forward: servlet (servlet,JSP HTML )
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
마구 잡 이 로 해결 하 다
/**
*
* @Author: crush
* @Date: 2021-05-09 16:59
* version 1.0
*/
@WebServlet("/servlet6")
public class ServletContextTest6 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
writer.print(" ,JavaWeb");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
총결산이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 질 수 있 기 를 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.