初识Java Web

2020-12-10 07:03

阅读:916

标签:sata   构造器   https   不能   eth   最好   响应   方式   name   

初识Java Web

系统学习Java Web也有一周时间了,整理一下这一周中接触到的新概念以及根据这一周的所学知识完成的一个基于JSP+Servlet+Java Bean+MySql的留言板Demo

几个概念

tomcat

tomcat是一个"Web App Server",底层是Socket的一个程序,是JSP/Servlet的一个容器,简单来说,当我们在我们电脑本地编写HTML,css时,我们写的页面只能自己访问,别人不能远程访问我们写的页面,而tomcat就是一个能让别人访问自己写的页面的一个程序

Servlet/JSP

Servlet通常被称为服务器端小程序,运行在服务器端,用于处理和响应客户端的请求,它是一个遵循Servlet开发的Java类,Servlet的生命周期可分为5个步骤:

  • 加载Servlet:当tomcat第一次访问Servlet时,tomcat会负责创建Servlet的实例
  • 初始化:当Servlet被实例化之后,tomcat会调用init()方法初始化这个对象
  • 处理服务:当浏览器访问Servlet时,Servlet会调用service()方法处理用户请求,除了使用service()统一处理用户请求,Servlet还提供了四种不同的方法用以响应用户请求
    • doPost: 用于响应客户端POST请求
    • doGet: 用于响应客户端GET请求
    • doDelete: 用于响应客户端DELETE请求
    • doPut: 用于响应客户端PUT请求
  • 销毁:当tomcat关闭或检测到Servlet要从tomcat删除时会自动调用destory()方法,让该实例释放掉所占资源
  • 卸载:当Servlet调用完destory()方法后,等待垃圾回收,如有需要再次使用该Servlet,则会重新调用init()进行初始化操作

JSP全名Java Server Pages,是一种基于文本的程序,其特点是HTML和Java代码同时存在,jsp的本质就是Servlet,当jsp被部署到Web容器之后,Web容器会自动将JSP编译成对应的Servlet。由于直接使用Servlet输出页面非常麻烦,JSP就是代替Servlet输出HTML页面的。

MVC规范出现以后,Servlet不再需要输出页面标签或是扮演其他视图层角色,仅仅作为控制器使用

JavaBean

JavaBean是一种特殊的Java类,这个类必须提供一个无参数构造器,成员属性最好定义为私有,并提供一系列setter,getter方法访问及操作这些属性。

反射

反射是Java语言本身具有的一个重要动态机制,用一句话来解释反射的定义:自控性,自描述。即通过反射可以动态获取类,属性,方法的信息,也能构造对象并对象的属性和行为。

举个例子:

Apple 类

public class Apple {
    private String name;
    public Apple() {

    }
    public Apple(String name) {
        this.name = name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
}

自描述(通过反射获取类,属性,方法的信息)

import java.lang.reflect.*;

public class Main {
    public static void main(String[] args) {
        Class clazz = Apple.class;
        // 获取构造器信息
        for (Constructor constructor : clazz.getConstructors()) {
            System.out.println(constructor.getName() + " " + constructor.getParameterCount());
        }
        // 获取属性信息
        for (Field field : clazz.getDeclaredFields()) {
            System.out.println(field);
        }
        // 获取方法信息
        for (Method method: clazz.getDeclaredMethods()) {
            System.out.println(method);
        }
    }
}

输出

Apple 0
Apple 1
private java.lang.String Apple.name
public java.lang.String Apple.getName()
public void Apple.setName(java.lang.String)

自控制(构造对象并控制对象属性及行为)

import java.lang.reflect.*;

public class Main {
    public static void main(String[] args) throws Exception {
        Class clazz = Class.forName("Apple");
        final Constructor constructor = clazz.getConstructor(String.class);
        final Object appleInstance = constructor.newInstance("China Apple");
        System.out.println("Is appleInstance type equals Apple: " + (appleInstance instanceof Apple));
        Apple chinaApple = (Apple)appleInstance;
        System.out.println("Apple name: " + chinaApple.getName());
        final Method setNameMethod = clazz.getMethod("setName", String.class);
        setNameMethod.invoke(appleInstance, "Japan Apple");
        System.out.println("Apple name: " + chinaApple.getName());
        final Field nameField = clazz.getDeclaredField("name");
        nameField.setAccessible(true);
        nameField.set(appleInstance, "USA Apple");
        System.out.println("Apple name: " + chinaApple.getName());
    }
}

输出

Is appleInstance type equals Apple: true
Apple name: China Apple
Apple name: Japan Apple
Apple name: USA Apple

非反射的Java类的大致运行流程是:编写源文件Apple.java,编译器将其编译为字节码文件Apple.class,最后加载到jvm中运行,而在反射的方式中,编译器一开始对其类型一无所知,只有在运行过后,编译器才知道其真正类型。

反射优势主要有两点

  • 在一些场景中,这种”未知“类型大大增加程序运行时灵活性
  • 对于对象的类型可以运行时判断,这样的特性实际上是对多态极大的增强,进一步将上层的抽象与下层的具体实现进行解耦

注解

注解与标签的概念十分相似,注解中信息的解析常常用”反射“来实现

留言板Demo

采用JSP+Servlet+JavaBean实现,JSP实现视图层,Servlet实现控制层,连接MySQL数据库实现数据存储

https://github.com/bodhisatan/MessageBoard/

初识Java Web

标签:sata   构造器   https   不能   eth   最好   响应   方式   name   

原文地址:https://www.cnblogs.com/yaoomoon/p/10994999.html


评论


亲,登录后才可以留言!