“J2EE高级编程”笔记(一)

配置环境

建议使用jdk1.8
配置环境变量:JAVA_HOMEPath
配置完毕后在CMD下用以下命令验证是否正确配置。

java -version
javac -version

IDE推荐使用eclipse for JavaEE。初次启动时要设置workplace。
菜鸟教程关于环境搭建的教程


J2EE简介

1997年,JavaSE推出。
2001年,基于JavaSEJ2EE推出。
它不是一种语言,而是标准和平台。
它的包以javax开头,如javax.servletjavax.servlet.httpjavax.jms
J2EE的“2”指的是Java的版本,但随着Java的版本不断更新,现在一般统称为Java EE
Java EE用接口、抽象类、虚函数给出了平台的定义,但是功能要自己实现。Tomcat给出了Java EE的部分实现,Tom EE等给出了完整实现。上课时使用Tomcat
有官方文档:java_ee_sdk_8。


HelloWorld

在windows系统下先通过startup.bat启动Tomcat
在浏览器通过localhost:8080访问示例页面和程序来确认启动成功。
以下是HelloWorld程序示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package a;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloServlet implements Servlet {
private ServletConfig config;
//构造函数的功能由init实现,不另外写
public void init(ServletConfig config) {
this.config = config;
}
//相当于析构函数,若有需要释放的资源则要写
public void destroy() {
}
public void service(ServletRequest req,
ServletResponse res)
throws ServletException, IOException {
//如果传json串或文件,ContentType也要跟着改
res.setContentType("text/html;charset=utf-8");
//也可以这样设置头信息:
//res.setHeader("Content-Type",
//"text/html;charset=utf-8");
//设置长度的方法,此示例里不必要:
//res.setHeader("Content-Length", "1234");
//等价于 res.setContentLength(1234);
PrintWriter out = res.getWriter();
out.println("<h1>hello world</h1>");
}
}

Tomcat启动时会自动创建一个类的实例,使用默认的构造函数(所以乱写构造函数会出BUG)。
容器中的组件被启动时会调用init,销毁时调用destroy

有关HTTP的内容可参考:菜鸟教程-HTTP协议
有关Servlet的生命周期可参考:菜鸟教程-Servlet生命周期

如果某个接口的函数过多,可以继承其适配器类,然后重写(override)需要修改的函数。
在以下程序示例里,HttpServlet为适配器类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package a;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
//注意底下这行代码修改了
public class HelloServlet extends HttpServlet {
public void service(ServletRequest req,
ServletResponse res)
throws ServletException, IOException {
//如果传json串或文件,ContentType也要跟着改
res.setContentType("text/html;charset=utf-8");
//也可以这样设置头信息:
//res.setHeader("Content-Type",
//"text/html;charset=utf-8");
//设置长度的方法,此示例里不必要:
//res.setHeader("Content-Length", "1234");
//等价于 res.setContentLength(1234);
PrintWriter out = res.getWriter();
out.println("<h1>hello world</h1>");
}
}