目录
一、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()能准确的得出某段代码运行所花的时间。