首页 > 编程语言 >javaEE(1)

javaEE(1)

时间:2024-07-28 20:29:47浏览次数:17  
标签:请求 tomcat req javaEE 服务器 post 方法

一. Web开发概述

Web开发:指的是从网页中向后端程序发送请求,与后端程序进行交互

Web服务器:是一种软件,向浏览器等Web客户端提供文档等数据,实现数据共享,它是一个容器,是一个连接用户和程序之间的中间键

二. Web开发环境搭建

我们要实现前后端交互,首先需要中间键Web服务器,所以我们去官网下载tomcat,但是在下载tomcat前要先检查电脑上有没有安装JDK,并且是否已经配置环境变量JAVA_HOME

1.安装JDK

https://blog.csdn.net/qq_64782704/article/details/139693766?spm=1001.2014.3001.5501

参考之前写过的一篇博客

2. 配置JAVA_HOME

打开设置(右键我的电脑属性),找到高级系统设置,然后跟着步骤走

 

 

 这样就配置好了JAVA_HOME,配置的目的是为了方便下面要配置的Web服务器更好的在你的电脑上找到jdk的位置

3. 安装tomcat

在apache官网下载tomcat最好下载到一个没有中文的路径上,tomcat就是我们上面说到的前后端交互的中间键,Web服务器

https://tomcat.apache.org/

安装好后,进入到bin目录中双击startup.bat文件,如果能成功运行表示安装成功

 

 注意:这是一些日志信息

三. tomcat文件介绍

四.  解决tomcat端口冲突问题

有时候我们在启动tomcat服务器时,有可能会出现和其他应用程序的端口相同,导致tomcat启动失败,这时候我们可以通过上面介绍的文件结构,打开conf,tomcat的服务器配置文件,再打开里面的server.xml修改默认打开的端口号即可

五.  在IDEA中创建javaWeb程序

 

这样一个javaWeb项目就创建完成了,接下来创建第一个javaWeb程序,随便写一个类,继承HttpServlet类,这个类就是Servlet类,也就是程序,但是还不能够运行,因为我们还没有配置tmocat和Sevlet程序的地址

六. 配置servlet程序

配置servlet程序的目的:把我们开发的servlet程序注册到服务器,由服务器启动时加载,在第一次访问时(第一个人访问到网页时),创建唯一的一个对象

打开web.xml文件

web.xml文件的作用:该文件主要是用来存储web后端项目的配置信息,在服务器启动时,由服务器加载读取的

 照着敲即可 

七. 在IDEA中配置tomcat

如果打开有默认的tomcat点击-号删掉,因为它默认不是本地的

 

 配置完成后点击运行,如果有日志信息就可以去浏览器测试

 

在Webapp文件夹下创建一个HTML文件,在<body>标签写上一句话用于测试

 打开浏览器输入

127.0.0.1:端口号(默认8080,修改过就是你修改的)/(项目名)/(刚才的html文件名)

比如我这里是:127.0.0.1:8088/demo/index.html

如下网页上会显示,刚才<body>中的内容,就表示配置成功 

八. servlet程序中的四个方法

如果我们用一个类继承了HttpServlet这个类,虽然我们的类被称为Servlet程序,但是里面没有任何方法,我们如何实现和前端进行交互呢,所以我们接下来要看四个方法

1. 无参构造方法

public class TestServlet extends HttpServlet {

    public TestServlet() {
        System.out.println("只执行一次的无参构造");
    }
}

在第一次有人访问到我们这个网页时,服务器会创建唯一的一个servlet对象,并调用唯一一次无参构造方法初始化对象

2. init方法

public class TestServlet extends HttpServlet {

    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init:"+config.getInitParameter("count"));
    }
}

该方法在构造函数执行完后立即被执行,用来对servlet程序中的一些参数进行初始化,这些参数往往在web.xml文件中定义,同样只执行一次

 

3. service方法

public class TestServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("service");
    }

}

这个方法主要用来对前端的请求作出处理并响应回前端,也就是说我们与前端交互的代码写在这个方法中,该方法有两个参数,req用来接收前端发来的请求,resq用来给前端作出响应

4. destroy方法


public class TestServlet extends HttpServlet {

    @Override
    public void destroy() {
        System.out.println("destroy");
    }

}

 该方法是在关闭tomcat等Web服务器时被执行,可以用来做一些在关闭服务器之前想要执行的事件

 

看到上述截图,我访问了两次网页,只有第一次访问时执行了无参构造和init,因为从始至终只创建了一个对象,所以与初始化有关的方法只会被执行一次,第二次只执行了service方法,与前端进行交互,这也就是说无参构造和init只有在第一次访问页面时会被执行,用来初始化唯一的一个servlet对象,当我关闭服务器,destroy方法才会被执行

九. http请求

客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个http请求,也叫超文本传输协议,也就是说我们前端向后端发送的请求都是http请求,所以我们有必要了解一下http请求

1.http请求的组成部分

一个完整的http请求包括:请求行,请求头,请求体

请求行:包括http的请求方式,请求资源名称,http版本

请求头:包含客户端的一些信息,这些信息都是由浏览器自动发送的, 以键值形式传递

请求体:当前端通过post请求提交表单中的数据时,请求体中会包含表单中的数据

 

 2. http请求的两种方式

 http请求分为:GET方式POST方式,两种方式各有各的用处

2.1 get请求

get请求:主要是从后端获取信息的,例如网页上的超链接,向后端传递少量信息,获取大量信息,请求数据在请求地址中直接拼接,所以传输数据数量有限,并且敏感数据不安全

可以看到get请求将我在表单中的数据直接拼在了地址栏中,这就是敏感数据不安全,并且地址栏的长度有限所以传输数据的数量有限

2.2 post请求

post请求:post请求主要用于向后端发送大量数据,请求数据在请求体中,可以传输大量数据,不会在地址中显示, 所以相对安全

 可以看到post请求并没有将表单中的数据拼接到地址栏中,而是保存到了请求体中,这样数据既安全又能存储大量数据

十. 后端接收外部发来的请求

public class TestServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String account = req.getParameter("account");
        String password = req.getParameter("password");
        System.out.println(account);
        System.out.println(password);
    }

}

可以看到我们用HttpServletRequest req对象中的getParameter方法来接收前端发来的请求,account和password是前端表单中定义的name属性,一般前端人员会告诉你

1. 用post请求接收不含中文的数据

可以看到我们可以成功的收到该消息

2. 用post请求接收含中文的消息

可以看到这里发生了中文乱码的情况,这是因为tomcat自带编码是ISO-8859-1格式和我们解码所用的编码表(utf-8)不同,所以我们在用post请求解码时加上一行设置解码的编码的代码,必须加在第一行最开始的时候

request.setCharacterEncoding("utf-8");

这句代码改变了tomcat服务器在接收前端请求时所采用的编码格式

 这样就成功接收到了含中文的消息

3. get请求接收不含中文的请求

可以看到能成功接收

4. get请求接收含中文的请求

可以看到get请求接收中文时不会出现乱码的情况,所以这意味着当后端处理请求时对于get和post这两种请求,要采取不同的方式进行处理 

十一. 再谈servlet中的四个方法

上面谈到对于post请求和get请求我们应该采取不同的处理方式,并且我们上面说到了,servlet有四个方法是一定会执行的(我们不写会调用父类的),所以也就意味着这四个方法其实不是必须写的.

1.默认的无参构造我们不写,编译器也会自动生成,给对象赋默认值

2.init方法当我们不需要对servlet程序中的参数初始化时也可以不写(但编译器还是会调用父类的,只不过父类中的方法,什么都没写)

3.destroy方法,如果在关闭服务器之前没有要做的事,也可以不写,同样也会调用父类的(父类中什么都没写)

4.最后service方法,由于http分为get请求和post请求,这两种情况要用不同的方式来处理,所以我们也不写service方法了,而是重写两个方法doGet()和doPost()方法

public class TestServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

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

doGet方法用来处理get请求,doPost方法用来处理post请求

十二. 后端接收请求头和请求行中的数据

getMethod()获得请求方式
getProtocol()获得请求协议
getServerName()获得服务名/可以是ip,也可以是域名
getServerPort()获得服务器端口
getRemoteAddr()获得客户端ip
getRemotePort()获得客户端端口

 以上是常用的接收请求行中的数据

getHeader("User-Agent")获得客户机信息

接收请求头中的数据,只有一个方法getHeader方法,由于请求头中的数据都是以键值对存储的,所以我们只要给getHeader()方法中传入对应的键,就能获得我们想要的值,都有哪些键,我们可以在浏览器按f12开发者模式查看

十三. 后端对请求作出响应

/*
      处理post请求
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //设置解码的编码格式
        req.setCharacterEncoding("utf-8");
        //接收我们自己向后端发送的数据
        String account = req.getParameter("account");
        String password = req.getParameter("password");

        //调用jdbc与数据库交互


        //做出响应
        //设置响应内容编码格式
        //resp.setHeader("content-type", "text/html;charset=utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //获得打印输出字符流
        PrintWriter printWriter =  resp.getWriter();
        printWriter.write("<h2>登录成功</h2>");

    }

注意:当请求的类型是post请求时,我们需要在作出响应前设置输出的内容的解码方式,否则会导致中文乱码问题,这是因为tomcat服务器默认解码是按ISO8859-1编码表,但我们IDEA默认是utf-8,所以会乱码,get请求响应时不需要设置

标签:请求,tomcat,req,javaEE,服务器,post,方法
From: https://blog.csdn.net/qq_64782704/article/details/140736145

相关文章

  • JavaEE 初阶(8)——多线程6之线程安全下-->volatile
    之前,我们在 JavaEE初阶(6) 这篇文章中,谈到过引起线程不安全的原因,初步了解了 “可见性” “Java内存模型” “指令重排序”,本章讲解volatile会涉及到这三个知识点,详细内容可以参考  JavaEE初阶(6) 这篇文章。目录一. 引入二.volatile关键字 a.保证“可......
  • JavaEE 初阶(7)——多线程5之线程安全中 -->“死锁”
    目录一.什么是“死锁”二.产生死锁的场景  场景1:一个线程连续加锁 场景2:两个线程两把锁场景3:N个线程M把锁 三.产生死锁的四个必要条件(缺一不可)四. Java标准库中的线程安全类一.什么是“死锁”并非是synchronized就一定线程安全,还要看代码具体咋写。到底......
  • JavaEE 初阶(9)——多线程7之 wait 和 notify
    目录一.监视器锁与监视器二.wait()  三.notify()和notifyAll()3.1notify() 3.2notifyAll()3.3wait等待 和sleep休眠的对比(面试题)wait(等待)/notify(通知)由于线程在操作系统上是“随机调度,抢占式执行”的,因此线程之间执行的先后顺序难以预知。但是......
  • 《JavaEE》----1.<计算机是怎样工作的>
    前言:   大家好,我目前在学习java。我准备利用这个暑假,来复习之前学过的内容,并整理好之前写过的博客进行发布。如果博客中有错误或者没有读懂的地方。热烈欢迎大家在评论区进行讨论!!!   喜欢我文章的兄弟姐妹们可以点赞,收藏和评论。如果感觉有所收获可以关注我呦。......
  • JavaWeb笔记_JSTL标签库&JavaEE三层架构案例
    一.JSTL标签库1.1JSTL概述 JSTL(jspstandardtaglibrary):JSP标准标签库,它是针对EL表达式一个扩展,通过JSTL标签库与EL表达式结合可以完成更强大的功能  JSTL它是一种标签语言,JSTL不是JSP内置标签  JSTL标签库主要包含:   ****核心标签     ......
  • JDK、JRE、JVM、JavaSE程序和JavaEE程序的区别
    JDK、JRE、JVM、JavaSE程序和JavaEE程序jvm定义:jvm是JavaVistualMachine的一个缩写。翻译过来是java虚拟机,它是我们java程序编译完后的字节码文件的一个运行平台。jre定义:jre是Javaruntimeenviroment的缩写,jre是在jvm的基础之上,加上一些基础类库,构成jre。jvm只相当......
  • JavaEE初阶(1)—— 计算机理论常识
    目录一.JavaEE发展历程二.计算机相关知识2.1计算机发展史2.2 冯诺依曼结构(VonNeumannArchitecture)2.3CPU1.cpu做得好的公司2.cpu架构3.cpu的核心参数4.cpu的寄存器(Register)2.4指令 1.概念 2.指令表3.指令格式4.指令执行阶段 2.5操作系统概述一.J......
  • 基于JavaEE 的影视创作论坛的设计与实现
    点击下载源码基于Javaee的影视创作论坛的设计与实现摘要随着时代的发展,互联网的出现,给传统影视行业带来的最大便利就是,方便了影视从业人员以及爱好者的交流和互动,而为用户提供一个书写影评,阅读影评以及回复影评的平台,以影评为载体来使用户感受影评、解读影评的是互联网......
  • 基于SSM的学校运动会信息管理系统(有报告)。Javaee项目。ssm项目。
    演示视频:基于SSM的学校运动会信息管理系统(有报告)。Javaee项目。ssm项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringMvc+Mybatis+Jsp+Maven来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。报告截图:......
  • 基于Springboot的电子招投标系统。Javaee项目,springboot项目。
    演示视频:基于Springboot的电子招投标系统。Javaee项目,springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Vue+Maven+Layui+Elementui来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。界面简......