web后端开发环境搭建
web后端(javaEE)程序需要运行在服务器中的. 这样前端才可以访问得到.
什么是服务器?
解释1: 服务器就是一款软件,可以向其发送请求,服务器会做出一个响应. 可以在服务器中部署文件,让他人访问 解释2: 也可以把运行服务器软件的计算机也可以称为服务器
安装TomCat
先要安装服务器软件. 去官网下载: Apache Tomcat® - Welcome!
安装JDK 配置两个环境变量
-
path D:\development\java\bin
-
JAVA_HOME D:\development\java
解压安装tomcat
在bin目录中 双击 startup.bat命令启动
访问 ip:8080
Tomcat 的目录层次结构
创建web后端项目
发布web后端项目到tomcat中 在idea中集成tomcat(修改代码后,会自动将项目重新部署到tomcat中)
Servlet对象生命周期 创建: 第一访问Servlet程序时,由服务器创建 初始化: 在构造方法执行完成后,调用init()执行一些初始化操作 服务: 每次请求调用service() 销毁: 服务器关闭时,会销毁servlet对象, 并且在销毁servlet对象时,会自动调用destroy(),执行一些最终操作
package com.ffyc.demoserve.web;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/*
创建一个类 继承HttpServlet,我们这个类就是一个javaEE程序
在web.xml文件配置,向外提供一个访问地址,就可以在浏览器中访问,找到对应javaEE程序
*/
public class demoServlet extends HttpServlet {
/*
无参构造方法,默认存在,初始化创建对象
只能调用一次(始终只创建了一个对象),在第一次访问servlet程序有服务器创建执行
*/
public demoServlet(){
System.out.println("无参构造方法");
}
/*
service()用来接收前端请求,为前端提供服务
每次前端发送请求,都会调用service(),多次调用
HttpServletRequest req 表示请求对象,前端提交过来所有数据,都有服务器封装在此对象中
HttpServletResponse resp 表示想用对象
*/
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service");
}
/*
destroy()在服务器关闭时,如果我们的程序想要最终执行某些操作,就可以在destroy中实现
*/
@Override
public void destroy() {
System.out.println("destroy");
}
/*
init() 初始化 在构造芳芳执行完成后,立即被调用执行,完成一些servlet程序初始化
只执行一次
在没有需要初始化操作时,可以不用重写,会默认调用父类的init()
*/
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init");
}
}
Servlet概述
● Servlet是Server Applet的简称,意思为用Java编写的服务器端的程序. 它运行在web服务器中,web服务器负责Servlet和客户的通信以及调用 Servlet方法。
● Servlet的作用:
1.接收用户发送的请求数据
2.调用其他的java程序来处理请求
3.根据处理结果,将结果响应给客户端
Servlet创建和使用
● 1.创建一个类继承javax.servlet.http包下的HttpServlet
● 2.在web.xml文件中配置Servlet
● 3.运行Servlet程序 通过浏览器访问http:localhost:8080/ 项目名/配置的url
● 由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被 外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文 件中使用元素和元素完成。
元素用于注册Servlet,它包含有两个主要的子元素: 和,分别用于设置Servlet的注册名称和 Servlet的完整类名。
<!--
.xml ml结尾的,也是一种标签语言 设计的目的是存储配置信息的,制定好可以使用哪些标签
web.xml 存储web后端项目配置信息,在服务器启动时,由服务器加载读取的
-->
<!--
配置Servlet程序,把我们开发的servlet程序注册到服务器,由服务器启动时加载,在第一次访问时
由服务器创建对象
-->
<servlet>
<servlet-name>demo</servlet-name>
<servlet-class>com.ffyc.demoserve.web.demoServlet</servlet-class>
</servlet>
<!--
为servlet程序配置一个访问地址
-->
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.ffyc.demoserve.web.loginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
http协议
http请求
前端向后端发送http请求 超链接 提交表单 都是发送http请求
http请求包含三部分:
请求行:包含http请求方式,请求资源名称,http版本 .
请求头:包含主机地址,以及客户端的一些环境信息,以键值对的形式传递.
请求体:代表着浏览器在post请求方式中传递给服务器的参数,请求体中参数以 键值形式传递, 多个用&链接,
表单post方式提交的数据 请求分为:
get请求: 传少量数据,获得大量数据
传递的参数,在请求地址?后面 键=值&键=值
post请求: 用表单向后端携带大量数据的,不在地址中显示
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<!--
请求头:包含客户端的一些环境信息,这些信息都是由浏览器自动发送的,以建值形式传递
请求体:以表单post方式向后端发送请求数据,在请求体中包含
get请求:
get请求主要是从后端获取讯息的,例如网页的超链接,向后端传递少量信息,获得大量信息,
请求数据在请求地址中直接拼接,所以传输的数据有限的,并且敏感数据不安全
post请求:
主要用于向后端发送大量数据
请求数据在请求体中,可以传输大量数据,不会在地址中显示,所以相对安全
-->
<a href="http://127.0.0.1:8088/demoserve/login?name=张三&age=20">登录</a>
<form action="http://127.0.0.1:8088/demoserve/login" method="post">
账号:<input type="text" name="account" value=""/>
密码:<input type="password" name="password" value=""/>
<input type="submit" value="登录"/>
</form>
</body>
</html>
Get方式与post方式的区别
● Get方式主要是从服务器获取信息;post主要是想服务器提交信息
● Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据 放置在请求体中提交。
● GET方式提交的数据大小受限制一般1kb(不同浏览器也会有不同);而 POST则没有此限制。
getParameter(name) --- String 通过name获得值
处理post请求中文乱码 request.setCharacterEncoding(编码格式)
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
String name=req.getParameter("name");
String age=req.getParameter("age");
System.out.println(name);
System.out.println(age);}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost");
req.setCharacterEncoding("utf-8");
String name=req.getParameter("account");
String password=req.getParameter("password");
System.out.println(name);
System.out.println(password);
//作出响应
//设置响应字体
resp.setContentType("teat/http");
PrintWriter printWriter=resp.getWriter();
printWriter.write("<h2></h2>");
}
http请求
//接收请求行和请求头数据
System.out.println(req.getMethod());//获得请求方式
System.out.println(req.getProtocol());//获得请求协议
System.out.println(req.getServerName());//获得服务、可以是ip,也可以是域名
System.out.println(req.getRemoteAddr());//获得客户端ip
System.out.println("=============================");
System.out.println(req.getRemotePort());//获得客户端口
System.out.println(req.getHeader("User-Agent"));
System.out.println(req.getHeader("Accept-Language"));
http响应
http响应?
一个http响应代表服务器向客户端回送的数据,它包括:响应行,响应头,响应体。 响应行里包含了http协议版本,以及用于描述服务器对请求的处理结果。
HTTP/1.1 (协议版本) 200(状态吗) OK(状态码描述)
状态码:服务器和浏览器用于确定状态的固定数字号码
200:请求成功
302:请求重定向
400:语义有误,当前请求无法被服务器理解或请求参数有误
404:请求资源不存在,通常是路径写错了或者服务器资源删除了
500:服务内部错误(代码异常) 响应头用于描述服务器的基本信息,以及数据描述 Ser ver Apache-Coyote/1.1 Content-Type text/html;charset=UTF-8 Content-Length 0 Date Wed, 13 Sep 2017 02:26:07 GMT 响应体代表服务器向客户端浏览器回送的正文