一篇文章认识Servlet并安装【Tomcat】

web后端开发环境搭建

web后端(javaEE)程序需要运行在服务器中的. 这样前端才可以访问得到.

什么是服务器?

复制代码
 解释1: 服务器就是一款软件,可以向其发送请求,服务器会做出一个响应.
        可以在服务器中部署文件,让他人访问
        
 解释2:  也可以把运行服务器软件的计算机也可以称为服务器 

安装TomCat

先要安装服务器软件. 去官网下载: Apache Tomcat® - Welcome!

安装JDK 配置两个环境变量

  1. path D:\development\java\bin

  2. 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(),执行一些最终操作
java 复制代码
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的完整类名。

java 复制代码
 <!--
    .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请求: 用表单向后端携带大量数据的,不在地址中显示

html 复制代码
<!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(编码格式)

java 复制代码
   @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请求

java 复制代码
   //接收请求行和请求头数据
        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 响应体代表服务器向客户端浏览器回送的正文

相关推荐
_oP_i1 小时前
Pinpoint 是一个开源的分布式追踪系统
java·分布式·开源
mmsx1 小时前
android sqlite 数据库简单封装示例(java)
android·java·数据库
武子康1 小时前
大数据-258 离线数仓 - Griffin架构 配置安装 Livy 架构设计 解压配置 Hadoop Hive
java·大数据·数据仓库·hive·hadoop·架构
豪宇刘2 小时前
MyBatis的面试题以及详细解答二
java·servlet·tomcat
秋恬意2 小时前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis
FF在路上3 小时前
Knife4j调试实体类传参扁平化模式修改:default-flat-param-object: true
java·开发语言
真的很上进3 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
众拾达人4 小时前
Android自动化测试实战 Java篇 主流工具 框架 脚本
android·java·开发语言
皓木.4 小时前
Mybatis-Plus
java·开发语言
不良人天码星4 小时前
lombok插件不生效
java·开发语言·intellij-idea