Tomcat构建

软件架构

C/S:Client/Server.需要安装才能使用。

B/S:Brower/Server。有浏览器就可以。

资源分类

  • 动态资源:每个用户访问相同的资源后,得到的结果可能不一样,称为动态资源。动态资源被访问后,先转换为静态资源,再被浏览器解析。

  • 静态资源:所有的用户在访问后,得到的结果都是一样的,称为静态资源。静态资源可以直接被浏览器解析

服务器

  1. 服务器:安装了服务器软件的计算机。

  1. 服务器软件:接收用户的请求,处理请求,做出响应。(接请求,传参数,给响应)

  1. web服务器软件:接收用户的请求,处理请求,做出响应。(接请求,传参数,给响应)

在web服务器软件中,可以部署web项目。让用户通过浏览器来访问这些项目。

常见的服务器软件

  • 动态服务器:

webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

webSphere:IBM公司。大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

JBOSS:JBOSS公司。大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

Tomcat:Apache基金组织,中小型的javaEE服务器,仅仅支持少量的JavaEE规范servle/JSP。开源免费。(300左右的并发)

  • 静态服务器:

nginx:代理,极高的并发

apache:Apache基金组织。PHP领域。

Tomcat

  1. Tomcat早期是Sun公司。javaWEBServer
  1. Tomcat4.0,里程碑版本。实现了Servlet

Tomcat的目录结构

  • bin:存放的是Tomcat的启动,停止批量处理脚本文件

startup.bat,startup.sh:启动tomcat的脚本文件

shutdown.bat,showdown.sh:停止tomcat的脚本文件

  • conf:用来存放Tomcat的相关配置文件

Catania:用来存储每个虚拟机的context配置

Context.xml:定义所有的web应用需要加载的context配置

Catalina.properties:Tomcat的环境变量

Logging.properties:Tomcat的日志配置文件,修改Tomcat的日志级别。

server.xml:Tomcat的核心配置文件

  • lib:Tomcat服务器的依赖包

  • logs:Tomcat默认的日志存放目录

  • webapps:Tomcat默认的web应用部署目录

  • work:Web应用jsp代码生成和编译的临时目录。

Servlet

servlet就是一个Java程序,一个java类。用来处理请求和响应。

Servlet的生命周期

  • init():Servelt进行初始化。

在tomcat启动的时候就会对所有的Servelt进行初始化

init方法只初始化一次

单例模式。

  • service():处理请求

可以处理GET,POST,PUT,DELETE请求

  • destroy():释放资源

创建servlet的三种方式

  1. 实现javax.servlet.Servlet接口

  1. 继承javax.servlet.GenericServlet类

  1. 继承javax.servlet.HttpServlet类

Servlet注册的两种方式

通过配置文件web.xml方式注册----Servlet3.0之前

WEB-INF:加密路径,不允许在地址栏

在web.xml进行注册servlet

    
    
        myServlet
        
        com.jsoft.morning.Myservlet1
    
    
        myServlet
        
        /hello
    

通过注解方式进行注册√

@WebServlet("/haha")
public class MyServlet3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("MyServlet3 doGet....");
    }

Servlet的参数

HttpServletRequest:

简称request,代表请求对象,当请求来的时候,request会自动实例化

HttpServletResponse:

简称response

response代表响应,当请求来的时候,response会自动实例化。

如果写中文,需要设置相应的字符集

响应头:增加一个响应头,并且解决字符集问题。

        response.setCharacterEncoding("utf-8");
        response.addHeader("content-type","text/html;charaset=utf-8");
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("MyServlet3 doGet....");
        //向页面打印回去一句话
        //服务器和客户端之间的通信依然是使用的流
        response.setCharacterEncoding("utf-8");
        response.addHeader("content-type","text/html;charaset=utf-8");

        PrintWriter out = response.getWriter();
        //把后台想要给出的响应写会去
        out.write("我收到了你的请求!!!");
    }

URL匹配规则

  1. 精确匹配,每个servlet是可以处理多个请求的。

@WebServlet(urlPatterns = {"/haha","/haha1","/haha2"})

localhost:8080/javaweb20230214/haha2

  1. 路径匹配

@WebServlet(urlPatterns = {"/haha/*"})

localhost:8080/javaweb20230214/haha/aaa

  1. 扩展名匹配

@WebServlet(urlPatterns = {"*.do"})

localhost:8080/javaweb20230214/aaa.do

  1. 缺省匹配

@WebServlet(urlPatterns = {"/"})

注意:

不能出现/*.do

多看控制台

匹配顺序

  1. 精确匹配

  1. 路径匹配,先最长路径匹配,再最短路径匹配。 /user/* /user/add/*

  1. 扩展名匹配。

注意:扩展名匹配,前面不能有任何的路径,包括不能有/

/*和/的含义:
  • /*属于路径匹配。覆盖所有的扩展名匹配

  • /servlet中的特殊匹配模式

会拦截静态资源!!!

启动时初始化:

        com.jsoft.morning.Myservlet1
        1

Request

request功能分为以下几种:

  • 封装请求头:

  • 封装一些正文数据。如果是get请求,没有正文。

  • request实际上是一个域对象,可以把它当成map来添加和获取数据。

  • request提供请求转发功能。

常用的方法:

getRemoteaddr():获取客户端的IP地址。

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        System.out.println(request.getRemoteAddr());
        System.out.println(request.getRemoteHost());
        if(Objects.equals(request.getRemoteHost(),"127.0.0.1")){
            response.getWriter().write("your Ip is closed!!!");
        }
    }

获取请求参数

常见的客户端传参方式:

  • 浏览器地址栏直接输入:GET请求

  • 超链:GET请求

  • 表单:可以是GET,可以是POST。

  • Ajax:可以是GET,可以是POST

GET请求和POST请求的区别?

GET请求:

  • 请求参数会在浏览器地址栏显示,所以不安全

  • 请求的参数长度在1k以内。

  • GET请求没有请求体

POST请求:

  • 请求参数不会显示在浏览器的地址栏,相对安全

  • 请求参数没有限制

  • 有请求体

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        response.addHeader("content-type","text/html;charset=utf-8");
        PrintWriter out = response.getWriter();

//        System.out.println("username:"+username+",password:"+password);
        //调用service,调用dao,返回一个结果
        boolean flag=true;
        if(flag){
            out.write("登录成功,欢迎你"+username);
        }


    }
username: password:

登录注册:

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String[] hobbies = request.getParameterValues("hobby");
        System.out.println(Arrays.toString(hobbies));
        Enumeration names= request.getParameterNames();
        while(names.hasMoreElements()){
            System.out.println(names.nextElement().toString());
        }
        Map parameterMap = request.getParameterMap();
        for(Map.Entry entry:parameterMap.entrySet()){
            System.out.println(entry.getKey()+"-->"+Arrays.toString((String[])entry.getValue()));
        };
        


        response.addHeader("content-type","text/html;charset=utf-8");
        PrintWriter out = response.getWriter();

//        System.out.println("username:"+username+",password:"+password);
        //调用service,调用dao,返回一个结果
        boolean flag=true;
        if(flag){
            out.write("登录成功,欢迎你"+username);
        }


    }
账号:
密码:
性别:
爱好:游泳 读书 写字
复选:

你可能感兴趣的:(javaWeb,tomcat,java,服务器)