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的方法,来获得客户端的所有信息。