学习SpringMVC的必经之路Servlet

本文详细介绍了学习SpringMVC前必备的Servlet知识,包括创建war项目、配置web.xml、添加依赖、注解及web.xml创建Servlet、Request请求处理、Response响应方式、Cookie操作、ServletContext、Filter和Listener的使用。通过实例解析了Request的getParameter方法、请求转发、Session会话以及解决乱码问题。

Servlet

Servlet创建

创建war项目

配置web.xml文件

在src文件中的WEB-INF中的web.xml文件写入如下代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
 </web-app>         

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HeolVMGU-1639194727119)(C:\Users\yc\AppData\Roaming\Typora\typora-user-images\image-20210902204300602.png)]

添加依赖

​ 在pom.xml文件中添加Servlet依赖:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

两种创建Servlet的方法

注解创建
重写service方法

service方法可以接受的get,post,delete,put等方法发送的请求;

package com.yc.servlet;

import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name="first",urlPatterns = "/first")
public class First extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("hello");

    }
}
配置web.xml文件

先在web.xml文件中添加代码如下:

<servlet>
    <servlet-name>SecondServlet</servlet-name>
    <!-- 写入Servlet类的全限定名-->
    <servlet-class>com.yc.servlet.Second</servlet-class>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>SecondServlet</servlet-name>
     <!-- 设置Servlet类的URL路径-->   
    <url-pattern>/second</url-pattern>
  </servlet-mapping>
  </web-app>

类中的代码如下:

package com.yc.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Second extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req,
                           HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("second");
    }
}

Request请求

Request的常用方法

getRequestURL()//获取客户端请求的完整URL (从http开始,到?前面结束)
getRequestURI()//从:开始,到?前接受
getQueryString()// 获取请求行中的参数部分
getContextPath()// 获取webapp名字 (站点名)
getMethod()// 获取客户端的请求方式
getProtocol()// 获取HTTP版本号

getParameter()和getParameterValues()方法

​ 这两个方法是获取请求中的form表单中的name属性的值,前者是获得单个值的属性的方法后者是获取多个值得属性的方法。

请求转发

如何请求转发
request.getRequestDispatcher(url).forward(request,response);
作用域

在一次请求中可为该次请求添加属性;

req.setAttribute("account",username);

仅仅在一次转发中有用,若开始了第二次转发或中断则该次请求中的属性将无效;

Session会话

会话属性的作用域是包含多个请求,所以可以实现多个请求共用多个属性,代码如下:

req.getSession().setAttribute("account",username);

Response响应

重定位

​ 断开此次请求,开启新的请求

response.sendRedirect("index.jsp");

getWrite方法

​ 通过该方法可写出各种字符;

PrintWriter writer = resp.getWriter();
       writer.println("abc");
       writer.println("<h1>你好</h1>");

getOutputStream方法

通过该方法可获取输出流;可写出各种数据:

 ServletOutputStream os = resp.getOutputStream();
        os.write("你好".getBytes());
        os.write("<h1>你好</h1>".getBytes());

解决乱码和在页面输出的类型

resp.setContentType("text/html;charset=UTF-8");

Cookie

Cookie可保存一些信息在客户端;代码如下包括加密:

Cookie cookie1 = new Cookie("p",new String(Base64.getEncoder().encode(password.getBytes())));
Cookie cookie2 = new Cookie("u",new String(Base64.getEncoder().encode(username.getBytes())));
resp.addCookie(cookie1);
resp.addCookie(cookie2);

在浏览器中cookie的缓存

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ePVujN8S-1639194727121)(C:\Users\yc\AppData\Roaming\Typora\typora-user-images\image-20210905223914665.png)]

ServletContext

Filter

Listener

getEncoder().encode(username.getBytes())));
resp.addCookie(cookie1);
resp.addCookie(cookie2);


在浏览器中cookie的缓存

[外链图片转存中...(img-ePVujN8S-1639194727121)]

## ServletContext

## Filter

## Listener
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值