Servlet

<--注:此博客只为了本人学习,不代表内容完全正确,请三思再看-->

一、Servlet原理

 2、mapping

  1、一个servlet可以指定一个映射路径

<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/sp</url-pattern>
</servlet-mapping>

  2、一个servlet可以指定多个映射路径(但是没必要这么做,除非你闲出屁了)(尽量成对出现)

<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>space.urbeautiful.servlet.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/sp</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/sp1</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/sp2</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/sp3</url-pattern>
  </servlet-mapping>

  3、一个servlet可以指定通用映射路径

<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/sp/*</url-pattern>
</servlet-mapping>

  4、默认请求路径

<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

  5、指定一些后缀或者前缀等等。。。

<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>
可以自定义后缀实现请求映射,注意点,*前面不能加项目映射的路径

  6、优先级问题

指定了固有的映射路径,优先级最高。找不到就会走默认的处理请求

二、ServletContext:上下文

this.getContext()返回的是一个ServletContext对象

用于上下文之间的通信,例如两个servlet之间怎样进行数据交流?

笨方法可以是一个servlet将数据转成文件,另一个servlet读取文件进行交流

现在又ServletContext上下文来操作,多个servlet之间的交流数据放在ServletContext中,其他的servlet来get

多个servlet只用一个ServletContext,全局唯一。

 三、请求转发

ServletContext context = this.getServletContext();
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
context.getRequestDispatcher("/h3").forward(req,resp);//获得转发请求路径,转发

四、读取资源文件

读取资源文件

思路:需要一个文件流来进行文件读取

那就给它创建一个流

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);
}

这就是context将一个要读取的文件变成流,从流中加载所需的内容

五、Response重定向   resp.sendRedirect("重定向的地址");  注意路径问题

面试题:请你聊聊转发和重定向的区别

相同点:页面都会实现跳转

不同点:请求转发的时候,url不会产生变化

重定向的时候,url地址栏会发生变化

六、Request请求

HttpServletRequest代表客户端的请求,用户通过Http协议访问服务器,HTTP请求中的所有信息会被封装到HttpServletRequest,通过这个HttpServletRequest的方法,来获得客户端的所有信息。

原文地址:https://www.cnblogs.com/jzspace/p/13082068.html