Java预习四—servlet+mvc,jar包

文章介绍了jar包的概念、打包与使用,包括如何在IDEA中创建可执行与不可执行jar包。此外,讨论了Servelet的基本概念,创建Servelet项目的过程,并简述了其生命周期。最后,提到了MVC架构中的Model-View-Controller概念。
摘要由CSDN通过智能技术生成

目录

一、jar包

1.什么是jar包

2.为什么要打包jar包

3.如何使用IDEA打包可执行和不可执行jar包

4.如何导入jar包并使用

 二、Servelet

1.什么是Servelet

2.创建Servelet项目 

 3.Servlet生命周期

三、MVC结构

 四、上周学习总结

一、jar包

1.什么是jar包

Jar包全称Java Archive File,java归档文件(archive是归档的意思)。这是一种与平台无关的文件格式(Java的跨平台特性!),用于将多个文件聚合成一个文件,本质上是一个包含可选META-INF的zip文件目录(在用IDEA生成jar的时候会在src里面也生成一个META-INF文件)。因为jar主要是对class文件进行打包,又因class文件是平台无关的,所以jar包不需要考虑平台问题。普通jar包打包时可不指定main-class,那么该jar包不可运行。当指定main-class后该jar包就可以运行。个人理解就是想要运行jar包要通过指定主类,确定运行哪一个类,这样jar包才被系统允许运行。运行可执行jar包有不止一种方法,但是个人而言比较喜欢直接在windows终端用指令。

java -jar xxxx.java。

补充一下,全限定名在jar的打包中有具体体现。因为学长在培训的时候问过这个全限定名,所以回去后浅浅地看了看。下面拿几张图片就能比较直观地看出来了。

 看到那个压缩包里的com了吗,先别急着点开它。我们看看package com.bludmsun.TestClass这里地package意思就是包,后面地一连串就是全限定名,意思就是com包目录下有bluemsun,bluemsun目录下有TestClass目录,TestClass目录下放的就是Volume.class字节码文件。如果主类Main要用Volume.class那么需要一个导包的操作:

 用import关键字。这里的介绍看起来与jar包无关,个人认为对于理解jar包的打包方式有帮助。

 

 

参考文献:Java文件规范

2.为什么要打包jar包

 本人在学习好如何打包可执行jar包后迫不及待地去试了试,首先我自己写了一个求圆柱题体积的程序(写得很烂,而且没有交互,大概就是只能输出一个特定的体积值),然后打包为jar包压缩一下就发给室友了,他解压以后只需要在终端中(windows)输入java -jar xxx.jar指令那么该程序就能运行在终端中输出相应值(当然大前提是他得下载jre,得有Java运行环境)。由此引申出一些个人理解:jar包把Java封装,平台无关性这两个特性完美地体现出来了,我写的程序,可以在任意平台运行,只要该平台有jre(Java Runtime Environment)。而且用户得到的只有一个jar包,并不能知道该程序运行实现的具体细节,即只能使用不能监视。同时,我们在开发一个程序的是时候往往需要用很多类,就拿我自己发给室友的那个超小程序举例,那个程序只要实现一个目的即求立方体体积,但是我写了好几个类,一个一个地把源文件发给室友(顾客)是一个非常麻烦而且看起来像答辩地方式!!!!!但是用jar包把class文件全打包了就不一样了!!只需要发一个包就行了!!

3.如何使用IDEA打包可执行和不可执行jar包

很简单,拿几张图就能看懂了:

 这里选“Project Structure”

 

 这里的Main Class指定可运行main - class,指定了这个之后jar包就可运行了,如果没指定jar包就不可运行。OK之后先点下方的apply再点ok。

 这样就行了,很简单不多说了。

当然,可执行jar包是可以执行的!!!come on我们来执行一下:

 这个是打包后的可执行jar包,然后打开windows终端,输入java -jar javaJarTest1.jar

 注意:千万不要呆呆地去运行不可执行jar包,然后还不知道那是不可执行的,然后还去大群里傻傻地去问别人

4.如何导入jar包并使用

首先,先在目的文件夹下创建一个文件夹lib,然后将xxxx.jar复制粘贴在这个文件夹里边

 不过只是复制粘贴后还不能直接使用,要将这个包导入库中,这样我们才能通过import关键字实现导包操作。

 右键这个jar包,是有一个Add as Library的操作的,点击后就行了(这里我已经导入了,所以没有这个操作了)。之后只要用import就行了:

 看,这样就能用jar包里面封装好的类了。有一说一,实际上还可以直接用cmd来打包,但是个人预习下来觉得IDEA挺好用的,所以就不说其他打包方式了。

参考文献:jar包详解

不过个人觉得参考的这篇博客写得不方便阅读。

 补充:jar包和war包的区别(预习的时候看到了,就提一嘴)

这部分就稍微了解一下war包就行。war包全称Web Archive ,它可以理解为是一个web应用程序,儿jar包可以理解为对类的一个包装归档。

参考文献:jar包与war包的区别

 二、Servelet

1.什么是Servelet

Servelet是Java EE运行于服务器端的,用于接收和响应HTTP协议请求的应用程序。

(看学长博客的时候看到的)补充:

Servelet,对于B/S结构,它是服务器中一个处理模块,用于处理浏览器(用户)请求。B/S结构全称Browser/Server,这是一个用户通过浏览器向服务器发送请求,然后由服务器处理请求的模式。

补充:Java EE全称是Java Enterprise Eidition,Java企业版,可以理解为是用于企业级开发的一种代码规范。

2.创建Servelet项目 

 

 注意:这些依赖项中有Servlet即可,但是我的IDEA给我勾上了其他两个选项。之后点create即可,然后出现下方页面就是创建成功了:

实际上一共创建了这些文件和文档 :

 

 好奇怪啊,我也不知道为什么这种巨简单的方式创建的这个项目和预期不符。下面我们试试一种更复杂的方式。

这里有一篇博客超级详细我就不写了我按照它的做一下:传送门

注意:大家在操作的时候可能会出现一个address localhost:8080 is already in use的报错。这个时候需要我们打开任务管理器进行下方的操作:

1. 查询指定端口
netstat -ano | findstr "9006"

2. 根据进程PID查询进程名称
taskkill | findstr "进程PID"

3. 根据PID杀死任务
taskkill /F /PID "进程PID"

4. 或者根据名称杀死任务
taskkill -f -t -im "进程名称"

 终止之后就能让程序跑起来了!!!

跑起来后会有

点开进入serlet后会有404报错,为什么呢?因为我没还没写那个servelet类【狗头】

 因为Servlet是个接口,所以里面的方法全要实例出来!!!!全要重写!!!!

 我也不知道为什么,调了一万遍都是404【愤怒至极】但是在做这玩意的时候感受到了Servlet的作用,它接受了用户通过浏览器发来的数据后能够进行逻辑操作,然后使浏览器页面发生相应变化也就是响应用户请求。还有,在导包的时候忽然发现Servlet包是在Tomcat这个大包里面,被封装成jar包了,写的时候导包就行了。

 3.Servlet生命周期

Servlet在用户发送请求需要调用时创建,在服务器关闭后销毁。一般来说在服务器启动而用户没有发送请求是不会创建,但是可以在web.xml中加入一些参数让它在服务器启动时创建(为什么不说加入什么呢,因为我还不会【狗头】)

三、MVC结构

个人感觉本次预习主要内容应该是在Servelet那一部分,这块地方内容应该是最少的。MVC全称是Model-View-Controller,模型-视图-控制器。

Model(模型)用来存储数据的对象,感觉服务器应该有这部分作用,存储用户数据

View(视图)书上说的是:为模型提供数据显示的对象。个人理解这玩意就是浏览器页面,属于前端部分

Controller(控制器)书上:处理用户的交互操作。个人理解:servlet其实就有这个作用,用户在浏览器输入数据,控制器进行逻辑运算处理数据,并且更新浏览器页面。应该就是用来接收请求和响应请求的。 

 四、上周学习总结

package com.bluemsun.OI;

import java.io.*;

public class IO {
    public static void main(String[] args) throws Exception {
        long times = System.currentTimeMillis();
        File srcF = new File("hello.txt");
        File desF = new File("hello1.txt");
        char[] ch = new char[50];
        Writer out = new FileWriter(desF);
        Reader in = new FileReader(srcF);
        int readlen = -1;
        while((readlen = in.read(ch)) != -1){
            out.write(ch, 0, readlen);
         //   System.out.println(in.read(ch, 0, readlen));
        }
        times = System.currentTimeMillis() - times;
        System.out.println(times);
        in.close();
        out.close();
    }
}

这一串小代码汇集了所有上周学长讲的而我所没预习到的。

1.在复制文件的时候数组形式的操作比单单的一个一个读取写入更快。

2.开头写一个throws Exception 是yyds,后面写的东西就都不会因为没有try...catch而冒红了,但是个人感觉这样写当出错时精确定位究竟哪里有问题会很不方便。

3.通过 long times = System.currentTimeMillis()能准确的得出某段代码运行所花的时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值