Servlet

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、什么是Servlet

  • Servlet是JavaWeb最为核心的内容,它是Java提供的一门动态web资源开发技术。

  • 使用Servlet就可以实现,根据不同的登录用户在页面上动态显示不同内容。

  • Servlet是JavaEE规范之一,其实就是一个接口,将来我们需要定义Servlet类实现Servlet接口,并由web服务器运行Servlet

简单理解就是连接前段与java代码的技术

1.1 Servlet的主要方法

初始化方法,在Servlet被创建时执行,只执行一次

void init(ServletConfig config)

提供服务方法, 每次Servlet被访问,都会调用该方法

void service(ServletRequest req, ServletResponse res)

销毁方法,当Servlet被销毁时,调用该方法。在内存释放或服务器关闭时销毁Servlet

void destroy() 

1.2 Servlet的访问路径二种方式

Servlet类编写好后,要想被访问到,就需要配置其访问路径
pom.xml导入servlet的坐标依赖

  <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <!--
        此处为什么需要添加该标签?
        provided指的是在编译和测试过程中有效,最后生成的war包时不会加入
         因为Tomcat的lib目录中已经有servlet-api这个jar包,如果在生成war包的时候生效就会和Tomcat中的jar包冲突,导致报错
      -->
      <scope>provided</scope>
    </dependency>

1.2.1 注释配置访问路径

@WebServlet(“路径”)

将注释加在继承HttpServlet的类上面

@WebServlet("/login")
public class TestHttpServlet extends HttpServlet {}

1.2.2 web.xml配置访问路径

<servlet>
    <servlet-name>test</servlet-name>
    <servlet-class>com.yyy.servlet.TestServlet</servlet-class><!--这里放的是继承HttpServlet的类全包名-->
  </servlet>

  <servlet-mapping><!--servlet映射-->
    <servlet-name>test</servlet-name><!--Servlet标签起的名字-->
    <url-pattern>/test</url-pattern><!--这个地方就是要配置的访问路径-->
  </servlet-mapping>

注释是在Servlet3.0之后开始有的,相比这二种,大部分我们接触的还是注释的方式

二、request

request:获取请求数据

  • 浏览器会发送HTTP请求到后台服务器[Tomcat]
  • HTTP的请求中会包含很多请求数据[请求行+请求头+请求体]
  • 后台服务器[Tomcat]会对HTTP请求中的数据进行解析并把解析结果存入到一个对象中
  • 所存入的对象即为request对象,所以我们可以从request对象中获取请求的相关参数
  • 获取到数据后就可以继续后续的业务,比如获取用户名和密码就可以实现登录操作的相关业务

Request的继承体系:
在这里插入图片描述

2.1 Request获取数据

  • 获取请求方式: GET
String getMethod()
  • 获取虚拟目录(项目访问路径): /request-demo
String getContextPath()
  • 获取URL(统一资源定位符): http://localhost:8080/request-demo/req1
StringBuffer getRequestURL()
  • 获取URI(统一资源标识符): /request-demo/req1
String getRequestURI()
  • 获取请求参数(GET方式): username=zhangsan&password=123
String getQueryString()
  • 请求行
    • getMethod()获取请求方式
    • getContextPath()获取项目访问路径
    • getRequestURL()获取请求URL
    • getRequestURI()获取请求URI
    • getQueryString()获取GET请求方式的请求参数
  • 请求头
    • getHeader(String name)根据请求头名称获取其对应的值
  • 请求体
    • 注意: 浏览器发送的POST请求才有请求体
    • 如果是纯文本数据:getReader()
    • 如果是字节数据如文件数据:getInputStream()

2.2 获取请求参数的通用方式

  • 获取所有参数Map集合
Map<String,String[]> getParameterMap()
  • 根据名称获取参数值(数组)
String[] getParameterValues(String name) 
  • 根据名称获取参数值(单个值)
String getParameter(String name)

2.3 解决中文乱码问题

在servlet类中的前二行,定义以下代码

 			request.setCharacterEncoding("utf-8");
        	response.setContentType("text/html;charset=utf-8");

2.4 请求转发

1)浏览器发送请求给服务器,服务器中对应的资源A接收到请求

(2)资源A处理完请求后将请求发给资源B

(3)资源B处理完后将结果响应给浏览器

(4)请求从资源A到资源B的过程就叫请求转发

请求转发的实现代码:

request.getRequestDispatcher("资源B路径").forward(request,response);

2.5 请求转发资源间共享数据

使用request的方法:

void setAttribute(String name,Object o);

代码实现:

 request.getRequestDispatcher("/allStudent.jsp").forward(request,response);

三、response

Response重定向(redirect):一种资源跳转方式。

(1)浏览器发送请求给服务器,服务器中对应的资源A接收到请求

(2)资源A现在无法处理该请求,就会给浏览器响应一个302的状态码+location的一个访问资源B的路径

(3)浏览器接收到响应状态码为302就会重新发送请求到location对应的访问地址去访问资源B

(4)资源B接收到请求后进行处理并最终给浏览器响应结果,这整个过程就叫重定向

实现方式:

response.setStatus(302);
response.setHeader("location","资源B的访问路径");

3.1 重定向的特点

浏览器地址栏路径发送变化

  • 当进行重定向访问的时候,由于是由浏览器发送的两次请求,所以地址会发生变化

  • 可以重定向到任何位置的资源(服务内容、外部均可)
    (请求转发只能访问服务器内的资源)
    因为第一次响应结果中包含了浏览器下次要跳转的路径,所以这个路径是可以任意位置资源。

  • 两次请求,不能在多个资源使用request共享数据

  • 因为浏览器发送了两次请求,是两个不同的request对象,就无法通过request对象进行共享数据

3.2 request和response的比较

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值