자바 웹 입문:ServletContext 상세 설명 및 응용

11022 단어 JavaServletContext
Servlet 용기 가 시 작 될 때 모든 웹 응용 프로그램 에 현재 웹 응용 프로그램 을 대표 하 는 ServletContext 대상 을 만 듭 니 다.
웹.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 의 경 로 를 배 울 것 입 니 다.
더 잘 알 게 될 거 야.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lfruNh5y-1620568645882)(C:\Users\ASUS\Desktop\JavaWeb_study\JavaWeb\JavaWeb.assets\image-20210509213544912.png)]
두 번 째 방식
my sql.properties 파일 을 WEB-INF/디 렉 터 리 에 직접 놓 습 니 다.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TyBxwgyj-1620568645884)(C:\Users\ASUS\Desktop\JavaWeb_study\JavaWeb\JavaWeb.assets\image-20210509214059205.png)]
이때 취 하 는 경로 가 바 뀌 었 으 니 직접 그렇게 취 할 수 있 습 니 다.
이때 우 리 는 파일 이 WEB-INF 아래 에 있다 면 컴 파일 이 끝 난 후에 바로 WEB-INF 아래 에 있 는 것 이지 classes 디 렉 터 리 아래 에 있 는 것 이 아니 라 WEB-INF 아래 에 있 는 것 을 발견 했다.이 내용 은 마 븐 의 내용 입 니 다.궁금 하면 찾 아 보 세 요.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hrA40oPl-1620568645887)(C:\Users\ASUS\Desktop\JavaWeb_study\JavaWeb\JavaWeb.assets\image-20210509214324368.png)]
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);
    }
}
총결산
이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 질 수 있 기 를 바 랍 니 다!

좋은 웹페이지 즐겨찾기