2022-08-30 第二小组 张明旭 JavaWEB学习记录

目录

重点归纳

知识点

注册servlet方法一

注册方法二:

请求的几种匹配路径

 面试题:/和/*的区别

servlet初始化的方法

请求和响应

发送请求

最常见的客户端的传参方式有两种:get/post

面试题:

给出响应

请求的转发与重定向

转发

重定向

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


重点归纳

注册servlet两种方法

发送请求,给出响应的流程

get和post区别

请求的转发和重定向

知识点

注册servlet方法一

在WEB-INF下的web.xml文件中注册servlet:

<?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">

  <servlet>
// 名字
        <servlet-name>hello</servlet-name>
//路径
        <servlet-class>com.jsoft.morning.servlet.HelloServlet</servlet-class>

        <init-param>
            <param-name>username</param-name>
            <param-value>root</param-value>
        </init-param>

        <init-param>
            <param-name>password</param-name>
            <param-value>root</param-value>
        </init-param>

        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>hello</servlet-name>
// 请求要发送的位置的路径
        <url-pattern>/hello.do</url-pattern>
    </servlet-mapping>

</web-app>

注册方法二:

给在后台接收请求的servlet类加注释,便捷,较多使用

// 括号中是接收什么路径的请求
@WebServlet("/demo06.do")

请求的几种匹配路径

路径匹配

*为通配符,/user/*  意为user下的所有请求都可以匹配

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

扩展名匹配

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

默认匹配,缺省匹配

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

注:

如果使用路径匹配:必须有/
如果使用的是扩展名匹配:必须不能有/

路径匹配和扩展名无法同时设置

 面试题:/和/*的区别


     /*属于路径匹配,匹配所有的请求,路径匹配优先级仅次于精确匹配
         /*会覆盖所有的扩展名匹配,非常恶劣的匹配规则。
     /是servlet中的特殊的匹配模式,优先级最低,不会覆盖任何的url-pattern
         匹配所有的请求

/和/*拦截静态资源

servlet初始化的方法

init方法什么时候执行?
默认当我们第一次访问servlet的时候被调用,延迟加载。
初始化方法只执行一次。

    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("servlet初始化...");
        System.out.println(config.getInitParameter("username"));
        System.out.println(config.getInitParameter("password"));
    }

请求和响应

HttpServletRequest---request(请求)
    所有和请求相关的操作都用这个对象来处理
    当有请求的时候,request就被实例化

HttpServletResponse---response(回应)
    所有和响应相关的操作都用这个对象来处理
    当有请求的时候,response也被实例化了
    给出响应时用response,且给出的响应必须显示在客户端(浏览器)

请求和响应成对出现

发送请求

a标签是可以传参数的
a标签和我们直接在地址栏输入的地址没有区别,他们的都是GET请求

<a href="login.do?username=admin&password=1234567">登录</a>

当我们使用form表单提交数据时,注意:
    1、所有的表单元素都必须有name属性,后台获取数据的根基。
    2、按钮必须是submit。
    3、提交数据的地址

<form action="login.do" method="post">
    <p>账号:<input type="text" name="username"></p>
    <p>密码:<input type="password" name="password"></p>
    <input type="submit" value="登录">
</form>

最常见的客户端的传参方式有两种:get/post

浏览器地址栏直接输入地址,一定是get请求

超级链接:get请求

表单:method= "get"、method="post"

面试题:

GET请求和POST请求的区别:
GET:请求的参数会显示在浏览器的地址栏中,不安全,
     请求的长度限制在1k之内
     GET请求没有请求体,无法通过request去设置参数
POST请求的参数不会再地址栏中显示,把请求的参数封装成了几个报文(请求体),请求的长度没有限制

给出响应

客户端和服务器端的信息传递

在后台需要有一个类接收前台发送的信息,在后台进行处理后给前台响应,这个类要继承HTTPServlet

接收get请求和post请求需要重写doget,dopost两个方法,两种方法方法体是一样的,可以在一个方法中调用另一个方法,在另一个方法中编写方法体即可

设置响应的字符集 一定要放在获取流之前 服务器处理字符串按照UTF-8处理

response.setCharacterEncoding("utf-8");

添加响应头,告诉浏览器以HTML的格式来解析响应字符串

response.addHeader("content-type","text/html;charset=utf-8");

IO流,用IO流将信息通过响应发送到前台

PrintWriter out = response.getWriter();

向客户端回复的数据

out.write("我是后台,已经接到了你的请求!!!");

流的操作:关流

out.flush();
out.close();

请求的转发与重定向

转发

由后台多个servlet类来处理同一个请求再返回给前台,作用域不变,数据可交互。
请求转发是在服务器上完成的,跟客户端是否无关!

getRequestDispatcher参数:转发的servlet的地址
forward参数:request,response,把当前servlet用的request和response传给下一个

request.getRequestDispatcher("demo03.do").forward(request,response);

重定向

在后台给出回应,让前台再发一次请求给另一个后台servlet类

​resp.sendRedirect("index.html");

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

1.重定向是两次请求,请求转发是一个请求
2.重定向是客户端行为,请求转发是服务器行为
3.重定向浏览器地址会发生改变,转发不会
4.重定向可以定向到任意地址,转发只能项目内转发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值