0


Servlet_Web小结

1.web开发概述

什么是服务器?

解释一:服务器就是一款软件,可以向其发送请求,服务器会做出一个响应.
可以在服务器中部署文件,让他人访问

解释二:也可以把运行服务器软件的计算机也可以称为服务器。

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

交互.

流程图如下:

Web服务器是指驻留于因特网上某种类型计算机的程序。

可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界

浏览; 它是一个容器,是一个连接用户与程序之间的中间件。

WEB服务器有很多,流行的WEB服务器有Tomcat 、 WebSphere 、

WebLogic、Jboss等

2.web开发环境搭建

Tomcat官方站点:http://tomcat.apache.org

1.获取Tomcat安装程序包:

tar.gz文件是Linux操作系统下的安装版本

zip文件是Windows系统下的压缩版本

2.安装JDK

设置JAVA_HOME环境变量

设置PATH环境变量

安装Tomcat

解压tomcat压缩文件

Tomcat 的目录层次结构

双击 bin 目录下的 startup.bat 文件(出现下图,说明已经安装成功,若错误,得重新配置环境变量)

输入 http://localhost:端口号(打开conf文件,修改server.xml文件,打开Notepad++可以修改端口号)

或http:127.0.0.1:端口号

或局域网ip:端口号

3.创建并发web项目

1.创建javaWeb项目

2.发布web应用到服务器

自动将web应用发布到web服务器下,需要在开发工具中集成tomcat进来

结果

3.Servlet

1.概述

Servlet是Server Applet的简称,意思为用Java编写的服务器端的程序.

它运行在web服务器中,web服务器负责Servlet和客户的通信以及调用

Servlet方法。

● Servlet的作用:

1.接收用户发送的请求数据

2.调用其他的java程序来处理请求

3.根据处理结果,将结果响应给客户端

2.Servlet****创建和使用

1.创建一个类继承javax.servlet.http包下的HttpServlet

2.在web.xml文件中配置Servlet

代码: 
<?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">
    <!--
    .xml文件:ml结尾的,也是一种标记语言,设计的目的是用来在项目中存储配置信息的,制定好就可以使用那些标签即可
    web.xml文件:存储web后端的配置信息,在服务器启动时,由服务器加载读取的,
    -->

    <!--配置servlet程序 把我们开发的servlet程序注册到服务器,有服务器启动时加载,在第一次访问时,由服务器创建对象,-->
    <servlet>

        <servlet-name>demo</servlet-name>
        <servlet-class>com.ffyc.dormServer.web.DemoServlet</servlet-class>
<init-param><!-- 向servlet中配置一些参数-->
    <param-name>count</param-name>
    <param-value>10</param-value>
</init-param>
    </servlet>
    <!--为servlet配置一个访问地址-->
    <servlet-mapping>
        <servlet-name>demo</servlet-name><!--为指定name的servlet程序配置访问地址-->
        <url-pattern>/demo</url-pattern><!--配置的供外界访问的地址 必须以/开头-->
    </servlet-mapping>
    <!--注册登录处理的servlet程序-->
    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>com.ffyc.dormServer.web.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>
</web-app>

3.运行Servlet程序

通过浏览器访问http:localhost:8080/ 项目名/配置的url

web端:

 后端: 

3.Servlet对象生命周期

创建(实例化):
第一访问Servlet程序时,由服务器创建

初始化:
在构造方法执行完成后,调用init()执行一些初始化操作

服务:
每次请求调用service()

销毁:服务器关闭时,会销毁servlet对象,
并且在销毁servlet对象时,会自动调用destroy(),执行一些最终操作。

执行代码:(及注意事项)

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;

public class LoginServlet extends HttpServlet {
    //无参构造默认是存在
    /*init()方法在没有需要初始化操作时可以不用重写,但是服务器会调用父类中的init()*/
   /* @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
    }*/

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("执行登录处理");
    }
//destroy()在没有最终执行的一些操作时,也可以不用重写,但是服务器会调用父类中的destroy()
    /*@Override
    public void destroy() {
        super.destroy();
    }*/
}

4.HTTP协议

1.http请求概述

http请求?

客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器

发送了一个http请求。

请求包括:

请求行,请求头,请求体 .

请求行:请求的方式,请求资源名称
请求头:包含客户端的一些环境信息,这些信息都是由浏览器自动发送的,以键值对形式传递
请求体:以表单post方式向后端发送的请求数据,在请求体中包含请求体代表着浏览器在post请求方式中传递给服务器的参数,请求体中参数以键值形式传递,多个用&链接,服务器接收到后再解析.

例如:username=admin&userpwd=123

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

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

Get方式与post方式的区别

Get方式主要是从服务器获取信息;post主要是想服务器提交信息

Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据

放置在请求体中提交。

GET方式提交的数据大小受限制一般1kb(不同浏览器也会有不同);而

POST则没有此限制

2.简单的交互代码

web前端

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> 登录 <form action="http://127.0.0.1:8008/dormServer/login" method="post"> 账号:<input type="text" name="account" value=""/>
密码:<input type="password" name="password" value=""/>
<input type="submit" value="登录"/> </form> </body> </html>

点击登录按钮,向后端提交你输入的账号和密码。

浏览器的网络断端检测到的对login发送的信息,及请求类型POST

web后端

package com.ffyc.dormServer.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;

public class LoginServlet extends HttpServlet {
   
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("执行登录处理");
        //接受前端提交的数据
        String account=req.getParameter("account");
        String password=req.getParameter("password");
        System.out.println(account);
        System.out.println(password);
    }

}

后端显示前端输入的账号和密码。

由于前端请求有get 和post两种,在后端的处理略有不同,所以在父类的方法中,会根据请求方式的不同,会调用doGet或者doPost方法,分别处理。
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class LoginServlet extends HttpServlet {
  

   
/*用来处理get请求*/
    @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");
        Integer.parseInt(age);
        System.out.println(name);
        System.out.println(age);
    }
/*用来处理post请求*/
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        req.setCharacterEncoding("utf-8");//设置解码的编码格式
        System.out.println("doPost()");
        String account=req.getParameter("account");
        String password=req.getParameter("password");
        System.out.println(account);
        System.out.println(password);
    }
    //destroy()在没有最终执行的一些操作时,也可以不用重写,但是服务器会调用父类中的destroy()
    /*@Override
    public void destroy() {
        super.destroy();
    }*/
   
}

3.Http请求的常用方法

System.out.println(req.getMethod());//获取请求方式
System.out.println(req.getProtocol());//获取请求协议
System.out.println(req.getServerName());//获得服务名/可以是ip,也可以是域名
System.out.println(req.getServerPort());//获得服务端口号
System.out.println(req.getRemoteAddr());//获得客户端ip
System.out.println(req.getRemotePort());//获得客户端端口
System.out.println(req.getHeader("User-Agent"));//获得客户机信息
System.out.println(req.getHeader("Accept-Language"));
req.setCharacterEncoding("utf-8");//设置解码的编码格式

实验代码:

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class LoginServlet extends HttpServlet {
 
/*用来处理get请求*/
    @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");
        Integer.parseInt(age);
        System.out.println(name);
        System.out.println(age);
        //接收请求行和请求头的数据。
        System.out.println(req.getMethod());//获取请求方式
        System.out.println(req.getProtocol());//获取请求协议
        System.out.println(req.getServerName());//获得服务名/可以是ip,也可以是域名
        System.out.println(req.getServerPort());//获得服务端口号
        System.out.println("====================");
        System.out.println(req.getRemoteAddr());//获得客户端ip
        System.out.println(req.getRemotePort());//获得客户端端口
        System.out.println(req.getHeader("User-Agent"));//获得客户机信息
        System.out.println(req.getHeader("Accept-Language"));
    }

}

运行结果:

4.Http响应

代码:

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;
import java.io.PrintWriter;

public class LoginServlet extends HttpServlet {
   
   @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("执行登录处理");
        //接受前端提交的数据
        String account=req.getParameter("account");
        String password=req.getParameter("password");
        System.out.println(account);
        System.out.println(password);
    }
*/
/*用来处理get请求*/
    @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");
        Integer.parseInt(age);
        System.out.println(name);
        System.out.println(age);
        //接收请求行和请求头的数据。
        System.out.println(req.getMethod());//获取请求方式
        System.out.println(req.getProtocol());//获取请求协议
        System.out.println(req.getServerName());//获得服务名/可以是ip,也可以是域名
        System.out.println(req.getServerPort());//获得服务端口号
        System.out.println("====================");
        System.out.println(req.getRemoteAddr());//获得客户端ip
        System.out.println(req.getRemotePort());//获得客户端端口
        System.out.println(req.getHeader("User-Agent"));//获得客户机信息
        System.out.println(req.getHeader("Accept-Language"));
    }
/*用来处理post请求*/
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        req.setCharacterEncoding("utf-8");//设置解码的编码格式
        System.out.println("doPost()");
        String account=req.getParameter("account");
        String password=req.getParameter("password");
        System.out.println(account);
        System.out.println(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>");
    }
    //destroy()在没有最终执行的一些操作时,也可以不用重写,但是服务器会调用父类中的destroy()
    /*@Override
    public void destroy() {
        super.destroy();
    }*/

}

运行结果:

标签: servlet

本文转载自: https://blog.csdn.net/2301_78875117/article/details/140076771
版权归原作者 垒咚一夏 所有, 如有侵权,请联系我们删除。

“Servlet_Web小结”的评论:

还没有评论