javaEE(1)

一. 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. 无参构造方法

java 复制代码
public class TestServlet extends HttpServlet {

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

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

2. init方法

java 复制代码
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方法

java 复制代码
public class TestServlet extends HttpServlet {

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

}

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

4. destroy方法

java 复制代码
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请求并没有将表单中的数据拼接到地址栏中,而是保存到了请求体中,这样数据既安全又能存储大量数据

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

java 复制代码
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请求接收不含中文的数据

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

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

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

java 复制代码
request.setCharacterEncoding("utf-8");

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

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

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

可以看到能成功接收

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

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

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

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

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

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

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

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

java 复制代码
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开发者模式查看

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

java 复制代码
/*
      处理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请求响应时不需要设置

相关推荐
沙子迷了蜗牛眼14 分钟前
当展示列表使用 URL.createObjectURL 的创建临时图片、视频无法加载问题
java·前端·javascript·vue.js
ganshenml16 分钟前
【Android】 开发四角版本全解析:AS、AGP、Gradle 与 JDK 的配套关系
android·java·开发语言
我命由我1234517 分钟前
Kotlin 运算符 - == 运算符与 === 运算符
android·java·开发语言·java-ee·kotlin·android studio·android-studio
小途软件23 分钟前
ssm327校园二手交易平台的设计与实现+vue
java·人工智能·pytorch·python·深度学习·语言模型
alonewolf_9927 分钟前
Java类加载机制深度解析:从双亲委派到热加载实战
java·开发语言
追梦者12328 分钟前
springboot整合minio
java·spring boot·后端
云游31 分钟前
Jaspersoft Studio community edition 7.0.3的应用
java·报表
帅气的你36 分钟前
Spring Boot 集成 AOP 实现日志记录与接口权限校验
java·spring boot
zhglhy1 小时前
Spring Data Slice使用指南
java·spring
win x1 小时前
Redis 主从复制
java·数据库·redis