给跪!5年阿里工作经验总结出这份Servlet高并发手册,全是精华

467 阅读3分钟

Hello,今天给各位童鞋们分享Servlet,赶紧拿出小本子记下来吧

image.png

一、Mapping

<servlet-name>HelloServlet</servlet-name>

<servlet-class>com.wenwu.servlet.HelloServlet</servlet-class>
  • 一个Servlet也可以指定一个映射路径

HelloServlet

/hello

  • 一个Servlrt可以指定多个映射路径

HelloServlet

/hello

HelloServlet

/hello2

  • 一个Servlet可以指定通用映射路径
<servlet-name>HelloServlet</servlet-name>

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

<url-pattern>/*</url-pattern>

指定一些后缀或者前缀等等

<servlet-name>HelloServlet</servlet-name>

<url-pattern>*.do</url-pattern>

二、ServletContext对象

web容器在启动的时候,他会为每个web程序创建一个对应的ServletContext对象,它代表了当前的web应用。

2.1共享数据

HelloServlet、GetServlet

我在这个Sevrlet中保存的数据,可以再另外一个servlet中拿到

//首先设一个保存参数的类

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    ServletContext servletContext = this.getServletContext();

    response.setContentType("text/html");

    response.setCharacterEncoding("utf-8");

    String username = "张三";

    servletContext.setAttribute("username",username);//讲一个数据保存在了ServletContext中,名字为:username    值为:张三

}

image.png ​ 测试访问结果,需要先访问以下设置保存数据的类,才能方法读取的类读取到

2.2获取初始化参数

demo03

<param-name>url</param-name>

<param-value>jdbc:mysql://localhost:3306/mybatis</param-value>

image.png

2.3请求转发

demo04 image.png 结果:访问demo04后,会先进入demo04,然后重新转发到demo03

2.4读取资源文件

Properties

  • 在java目录下新建properties
  • 在resources目录下新建properties

发现:都被打包到同一个路径下:classes,我们俗称这个路径 classpath

思路:需要一个文件流。

db. properties

username = "root"

password = "123456"

ServletDemo05.java

image.png

三、HttpServletResponse

web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse;

  • 如果要获取客户端请求过来的参数:找HttpServletRequest
  • 如果要给客户端响应一些信息:找HttpServletResponse

3.1简单分类

负责向浏览器发送数据的方法

//写平常的流用这个

ServletOutputStream getOutputStream() throws IOException;

//写中文用这个

PrintWriter getWriter() throws IOException;

负责向浏览器发送响应头的方法

image.png

3.2常见应用

3.2.1向浏览器输出东西

getWriter()

getOutputStream()

3.2.2下载文件

  • 要获取下载文件的路径
  • 下载的文件名是啥?
  • 设置想办法让浏览器能够支持下载我们需要的东西
  • 获取下载文件的输入流
  • 创建缓冲区
  • 获取OutputStream对象
  • 将FileOutputStream流写入到 buffer缓冲区
  • 使用OutputStream将缓冲区中的数据输出到客户端!

image.png

3.2.3验证码功能

image.png

3.2.4请求重定向

常见场景:

  • 用户登录void sendRediredt (string var1) throws IOException;

重定向实现代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//重定向地址

response.sendRedirect("/response_war/image");

}

重定向实现代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//重定向地址

response.sendRedirect("/response_war/image");

}

重定向和请求转发的不同点:

  • 请求转发的时候,url不会产生变化 307
  • 重定向的时候,url地址栏会发生变化 302

image.png

使用重定向模拟一个简单的登录页面:

模拟一个登录页面index.jsp

<%@ page contentType="text/html; charset=UTF-8"  %>

<%-- 这里提交的路径,需要寻找到项目的路径 --%>

<%-- ${pageContext.request.contextPath}代表当前项目 --%>

<form action="${pageContext.request.contextPath}/login" method="get">

    用户名:<input type="text" name="username"/><br/>

    密码:<input type="password" name="password"/><br/>

    <input type="submit"/>

</form>

登陆成功后跳转到的页面success.jsp

<h1>登录成功</h1>

servlet页面 RequestTest.java

image.png

四、HttpServletRequest

web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse;

如果要获取客户端请求过来的参数:找HttpServletRequest

如果要给客户端响应一些信息:找HttpServletResponse

通过这个HttpServletRequest的方法,我们可以获得客户端的所有信息

4.1获取前端传递的参数,请求转发

登录页面index.jsp

<form action="/request_war/login" method="post">

    账号:<input type="text" name="username" /><br/>

    密码:<input type="password" name="password"/><br/>

    爱好:

    <input type="checkbox" name="hobbies" value="抽烟" />抽烟

    <input type="checkbox" name="hobbies" value="喝酒" />喝酒

    <input type="checkbox" name="hobbies" value="烫头" />烫头

    <br/>

    <input type="submit">

</form>

登陆成功页面success.jsp

<h1>登陆成功</h1>

LoginServlet.java

image.png

重定向和请求转发的不同点:

  • 请求转发的时候,url不会产生变化 307
  • 重定向的时候,url地址栏会发生变化 302

好啦,今天的文章就到这里,希望能帮助到屏幕前迷茫的你们