Servlet笔记

本文介绍了Servlet的基础知识,包括Servlet的概念、环境设置、生命周期以及执行原理。同时,文章还探讨了Web开发的核心知识,如HTTP请求协议和响应,以及MVC架构在Web应用中的角色和作用。
摘要由CSDN通过智能技术生成

Servlet

Web开发的核心知识

1、什么是web开发?

两台计算机之间,通过网络进行资源文件共享的获得,web通信。
web开发:确保本次的web通信顺利的进行。
**2、web 通信过程中两台计算机之间扮演着什么角色?**
1、客户端:用于用户发送请求
2、服务端:提供资源共享文件
**3、资源文件**
计算机上面所有的文件都可以称为资源文件(理论上)
1、静态资源文件
定义:文件内容是固定的,不能随着请求的改变而变化。
例子:图片……
特点:服务端推送静态资源文件给客户端,文件是在客户端上运行的。
2、动态资源文件
定义:文件内容可以根据用户的请求的变化而变化,文件内容不固定。
举例:Java文件……
**4、web通信过程中,两台计算机如何进行通信**
1、c/s结构的通信方式
2、b/s结构的通信方式
**5、网络的协议包**
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210517153537308.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0phbWVzX19fX0dvc2xpbmc=,size_16,color_FFFFFF,t_70)

定义:用于包裹在网络中传输的二进制数据,它存在固定的空间,用于存放特定的数据,便于接收方分析得到数据。
b/s结构的通信方式使用HTTP网络传输协议。
**HTTP网络传输协议**
!HTTP请求协议包
1、浏览器在发送请求的时候负责创建的
2、是浏览器负责将请求信息,写入到协议包中。
2、4层结构
   1、请求行(
   url:请求的资源文件地址
   method:浏览器请求方式(POST,GET)
                )
   2、请求头(
    浏览器希望获得的资源文件类型

html png text/htm
浏览器希望获得的一个资源文件的依赖字符集
如果说采用GET的方式发送请求,这个地方会保存参数

3、空白行(
隔离作用

4、请求体(
如果说采用POST的方式发送请求,这个地方会保存参数

!HTTP响应协议包
1、服务端在准备推送文件时负责创建的
2、可以由资源调度写入,也可以时Java命令
3、4层结构
1、状态行(
状态码

2、响应头(
返回文件的类型
浏览器希望获得的一个资源文件的依赖字符集

3、空白行(
隔离作用

4、响应体(
静态资源文件/动态资源文件
运行的结果(二进制)

7、浏览器如何向服务端发送请求
1、通过from表单
2、通过超链接
3、通过脚本语言

 </head>
<%--  第一张请求方式 from表单  --%>
  <body>
  <form action="http://www.baidu.com" method="get">
    <input type="submit" value="提交">
  </form>

<%--  第二种请求方式:超链接  --%>
  <a href="http://www.baidu.com?username=zhangsang&pass=123">去百度</a>
<%--  第三种请求方式:脚本 JS  --%>
  <input type="button" value="去百度" onclick="fun()">
  </body>
<script type="application/javascript">
  window.location="http://www.baidu.com?username=zhangsang&pass=123";
</script>
</html>

8、请求方式 GET / POST
GET请求方式:
1、要求浏览器发送请求的时候携带的请求参数不能超过4k
2、要求浏览器发送请求的时候,参数写入到请求头中
3、要求浏览器在发送请求的时候,将参数显示在地域栏当中
4、要求浏览器接收到地资源必须缓存在内存当中
POST请求方式:
1、要求浏览器发送请求的时候携带的请求参数不限制其大小。
2、要求浏览器发送请求的时候,参数写入到请求体当中
3、要求浏览器在发送请求的时候,将参数隐藏在地域栏当中
4、要求浏览器接收到地资源不能缓存在内存当中
9、如何控制浏览器采用什么请求方式
1、通过from表单:可以用GET/POST
2、通过超链接:只能用GET
3、通过脚本语言:只能用GET
10、如何命令浏览器在发送请求时携带参数
1、通过from表单:可以用GET/POST
通过表单标签地name属性来设置属性:

  <form action="http://www.baidu.com" method="get">
    <input type="text" name="username">
    <input type="submit" value="提交">
  </form>

2、通过超链接:只能用GET
3、通过脚本语言:只能用GET

Servlet

1、 Servlet简介

servlet是运行在web服务器或应用服务器上地程序,他是作为来自web浏览器或其他HTTP客户端地请求和HTTP服务器上的数据库或应用程序之间的中间层。
使用Servlet,你可以手机来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动他创建网页。
优点:
1、性能好
2、不用单独创建进程,来处理每个客户端的请求
3、独立于平台,JAVA写的
4、Servlet信任的
5、Java中所有的类库都可以在Servlet当中使用。

2、环境设置

1、JDK
2、web服务器:TomCat

3、第一个Servlet程序 Hello World

1、导入servlet包
2、写一个servlet类

public class HelloServlet extends HttpServlet {

    private String message;

    //Servlet初始化
    @Override
    public void init() throws ServletException {
        message = "hello world";
    }


    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置响应内容的类型
        resp.setContentType("text/html");
        PrintWriter writer = resp.getWriter();
        writer.write("<h1>"+message+"</h1>");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }
}

3、配置Servlet 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">
    <servlet>
        <servlet-name>oneServlet</servlet-name>
        <servlet-class>com.wdzl.servlet.HelloServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>oneServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

4、servlet的执行过程

首先客户端发送请求,如果请求路径和web.xml中的虚拟路径相匹配,那么当前的请求就会被servlet拦截,然后通过这个标签获得了Servlet的别名,通过别名获得Servlet的名称,然后通过类的全路径,找到对应的Servlet类,再然后就执行Servlet程序,执行以后就会得到相应的响应结果。

5、Servlet的执行原理

1、浏览器向服务器发送GET请求
2、Tomcat接收到请求,此时,Tomcat产生两个对象 HttpServletRequest req, HttpServletResponse resp
3、Tomcat根据url找到目标Servlet,并且创建一个线程。
4、将req,resp传递给该线程。
5、Tomcat调用Servlet当中的service()方法。
6、service根据本次的请求的请求类型来判断调用doGet()还是调用doPost()方法。
7、doGet()或者是doPost()结束之后把结果返回给Tomcat。
8、线程销毁

6、Servlet的生命周期

就是Servlet从创建到毁灭的整个过程
1、Servlet通过调用init()方法进行初始化
2、Servlet通过调用service()方法处理客户端请求
3、Servlet通过调用destroy()方法进行销毁。
4、Servlet由JVM中的垃圾回收器进行回收
init()
只能调用一次,
service()
由它决定doGet还是doPost
**doGet/doPost **
destroy()
只能调用一次

7、通过三种方式触发Servlet

servlet类

public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doGet(request,response);

    }

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

        //设置响应类型
        response.setContentType("text/html;charset=UTF-8");
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        PrintWriter writer = response.getWriter();
        writer.write("<h1>用户名:"+username+"<h1>");
        writer.write("<h1>密码:"+password+"<h1>");

    }
}

inddex.jsp

<body>
<%--  表单--%>
  <center>
    <form action="./login" method="get">
      用户名: <input type="text" name="username"><br>
      密码: <input type="text" name="password"><br>
      <input type="submit" value="提交">
    </form>
    <br><br>
<%--   超链接--%>
    <a href="/login?username=张三&password=123456">点击触发</a>
<%--脚本--%>
    <input type="button" value="点击触发" onclick="fun()">


  </center>
  </body>
<script type="application/javascript">
  function fun(){
    window.location="/login?username=张三&password=123456";
  }
</script>
</html>

web.xml

<!--  表单提交  GET  -->
    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>com.wdzl.servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

注意点:
当你在表单中将get方式提交改变为post提交,会出现中文乱码情况,解决方案如下:
在这里插入图片描述

8、采用注解配置Servlet

前端代码

<body>
<center>
  <form action="./regiest" method="post">
      <h1>注册</h1>
      <input type="hidden" name="id"><br><br>
      姓名:<input type="text" name="username"><br><br>
      密码:<input type="password" name="password"><br><br>
      性别:
      <select name="sex">
          <option value="man"></option>
          <option value="woman"></option>
      </select><br><br>
      成绩:
      <input type="radio" name="cj" value="jige">及格
      <input type="radio" name="cj" value="nojige">不及格<br><br>

      爱好:
      <input type="radio" name="pingpanng" value="pingpang" checked="checked">打乒乓
      <input type="radio" name="ball" value="ball">篮球
      <input type="radio" name="song" value="song">唱歌
      <br><br>
      <input type="submit" value="提交">
  </form>
</center>
</body>

后端代码:

@WebServlet("/regiest")
public class RegiestServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        String id = request.getParameter("id");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String sex = request.getParameter("sex");
        String cj = request.getParameter("cj");
        String pingpang = request.getParameter("pingpanng");
        String ball = request.getParameter("ball");
        String song = request.getParameter("song");
        out.write("<h1>"+id+"</h1>");
        out.write("<h1>"+username+"</h1>");
        out.write("<h1>"+password+"</h1>");
        out.write("<h1>"+sex+"</h1>");
        out.write("<h1>成绩</h1>");
        out.write("<h1>乒乓:"+pingpang+"</h1>");
        out.write("<h1>篮球:"+ball+"</h1>");
        out.write("<h1>唱歌:"+song+"</h1>");
    }

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

    }
}

MVC

1、 MVC架构介绍

MVC :Model - view - Controller 模型-视图-控制器
1、Model(模型)
在web应用中处理数据逻辑的部分,Service层,Dao层;

Service层用于数据库联动,放置业务代码,处理数据库的增删改查

Dao层,写接口,Dao层实现接口
2、view(视图)
在web应用中处理响应给用户的页面的部分;
3、Controller(控制层)
就是servlet,

2、MVC案例——页面登录注册

1、导包
1、servlet包
2、el的包
3、mysql的包
4、druid的包 配置文件
5、jsp的包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值