servlet_mapping/servletContext

发布时间 2023-06-14 07:05:32作者: ming1010

1.servlet 原理:

1.1-servlet 设置数据:setAttribute()

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Hello,Ming!");
        ServletContext context = this.getServletContext();
        String username="Mingyue";
        context.setAttribute("username",username);
    }

1.2-servlet 读取数据:getAttribute()

   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String username = (String) context.getAttribute("username");
        resp.getWriter().print("Name = " + username);
    }

1.3-设置mapping:先访问/hello路径,读取setAttribute,然后再访问/getc路径,读取getAttribute。否则直接访问后者读取不到数据。

 1   <servlet>
 2         <servlet-name>hello</servlet-name>
 3         <servlet-class>com.ming.servlet.HelloServlet</servlet-class>
 4     </servlet>
 5     <servlet-mapping>
 6         <servlet-name>hello</servlet-name>
 7         <url-pattern>/hello</url-pattern>
 8     </servlet-mapping>
 9 
10     <servlet>
11         <servlet-name>getc</servlet-name>
12         <servlet-class>com.ming.servlet.GetServlet</servlet-class>
13     </servlet>
14     <servlet-mapping>
15         <servlet-name>getc</servlet-name>
16         <url-pattern>/getc</url-pattern>
17     </servlet-mapping>

mapping 注意事项:先读取/hello路径,错误,则直接/*路径,进入error页面。

 1  <servlet>
 2     <servlet-name>hello</servlet-name>
 3     <servlet-class>com.ming.servlet.HelloServlet</servlet-class>
 4   </servlet>
 5   <servlet-mapping>
 6     <servlet-name>hello</servlet-name>
 7     <url-pattern>/hello</url-pattern>
 8   </servlet-mapping>
 9 
10   <servlet>
11     <servlet-name>error</servlet-name>
12     <servlet-class>com.ming.servlet.ErrorServlet</servlet-class>
13   </servlet>
14   <servlet-mapping>
15     <servlet-name>error</servlet-name>
16     <url-pattern>/*</url-pattern>
17   </servlet-mapping>

2.servletContext

2.1-get parameter from xml. First, set parameters in xml and map servlet.

 1  <context-param>
 2         <param-name>url</param-name>
 3         <param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
 4     </context-param>
 5 
 6 <servlet>
 7         <servlet-name>gp</servlet-name>
 8         <servlet-class>com.ming.servlet.ServletDemo03</servlet-class>
 9     </servlet>
10     <servlet-mapping>
11         <servlet-name>gp</servlet-name>
12         <url-pattern>/gp</url-pattern>
13     </servlet-mapping>

 

 

get parameters by doGet(). getServletContext->getInitParameter, and print to browser.

1  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
2         ServletContext context = this.getServletContext();
3         String url = context.getInitParameter("url");
4         resp.getWriter().print(url);
5     }

2.2-forword page by requestDispatcher() and forword(). there will get into /gp page not /sd4 page. url:http://localhost:8080/servlet_02_war/sd4

1     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
2         ServletContext context = this.getServletContext();
3         System.out.println("get into Servlet04");
4 //        RequestDispatcher requestDispatcher = context.getRequestDispatcher("/gp");
5 //        requestDispatcher.forward(req,resp);
6         context.getRequestDispatcher("/gp").forward(req,resp);
7     }

map the servlet in xml.

1  <servlet>
2         <servlet-name>sd4</servlet-name>
3         <servlet-class>com.ming.servlet.ServletDemo04</servlet-class>
4     </servlet>
5     <servlet-mapping>
6         <servlet-name>sd4</servlet-name>
7         <url-pattern>/sd4</url-pattern>
8     </servlet-mapping>

2.2.1-the difference between forword and redirect:

forword: A --> B --> C  C --> B --> A

redirect: A -->B  B --> A   A-->C

2.3-servlet read properties, created a properties at resources folder(normally), the path was in target folder:  "WEB-INF/classes/db.properties" 

1  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
2         InputStream inputStream = this.getServletContext().getResourceAsStream("WEB-INF/classes/db.properties");
3         Properties properties = new Properties();
4         properties.load(inputStream);
5         String username = properties.getProperty("username");
6         String password = properties.getProperty("password");
7         resp.getWriter().print(username+" : "+ password);
8     }

db.properties.

username=ming
password=123456

map servlet in xml.

 <servlet>
        <servlet-name>sd5</servlet-name>
        <servlet-class>com.ming.servlet.ServletDemo05</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>sd5</servlet-name>
        <url-pattern>/sd5</url-pattern>
    </servlet-mapping>