一、软件安装
1. JDK
JAVA程序运行环境,下载安装后检查系统环境变量的设置是否正确
JAVA_HOME:JDK安装根目录
CLASS_PATH: .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
path:添加%JAVA_HOME%\bin;
2. TOMCAT
支持JAVA程序运行的WEB服务器(WEB容器),可以选择安装版,也可以直接解压缩后运行。检查系统环境变量的设置是否正确
CATALINA_HOME:Tomcat安装根目录
CATALINA_BASE:Tomcat安装根目录
TOMCAT_HOME:Tomcat安装根目录
启动Tomcat命令:bin目录下startup.bat
3. Maven(非必要)
项目管理工具,直接解压缩,在Idea2019中包含Maven工具
4. IntelliJ IDEA
集成开发环境,下载安装
5. MySQL
数据库服务器,下载安装
6. Navicat for MySQL
数据库图形管理工具,可下载安装,也可以解压缩直接运行
7. 软件及版本列表
JDK 1.8
apache-tomcat-8.5.16
apache-maven-3.6.3
idea2019.2.4
mysql-8.0.20-winx64
Navicat for MySQL
二、创建第一个WEB应用程序
- 创建WEB项目
使用目前通用的Maven项目组织方式,有自动化、灵活、易扩展等优点。
2. 配置Tomcat作为项目运行服务器
3. 运行程序
(1)点击绿色三角按钮运行程序,可以在下方信息窗口中看到Tomcat启动信息,出现以下信息说明Tomcat启动成功:
org.apache.catalina.startup.Catalina.start Server startup in 37 ms
出现以下信息说明项目部署成功:
Artifact 1.firstweb:war: Artifact is deployed successfully
Artifact 1.firstweb:war: Deploy took xxx milliseconds
(2)Tomcat启动后浏览器会自动运行,并访问http://localhost:8080/firstweb,如果浏览器没用自动运行,也可以手工启动浏览器并访问以上地址。
(3)停止服务器(红色矩形按钮),修改index.jsp页面body标签包含的内容,重新启动运行,观察效果。
三、创建第一个应用程序(Servlet)
1. 添加特殊目录
WEB项目中包含一些具有特殊作用的目录,比如源码目录、资源目录等,需要:
(1)在项目中手工创建这些目录;(2)做特殊用途标记
步骤:
(1)在main目录中创建java目录
(2)同样创建resources目录
(3)给java和resources目录添加标记
2. 在pom中添加依赖项
在WEB应用程序开发和运行过程中,通常需要使用JDK以外的第三方库,在maven项目里,这些库可以做为依赖项添加到pom文件中,maven工具会自动下载、加载这些库文件,并在发布和部署应用程序时将这些库文件与我们自己开发的应用程序一起打包。
支持Servlet运行所需的依赖项内容和具体位置如下:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
修改完成后,可鼠标右键点击pom.xml,选择 Maven->Reimport菜单下载需要更新的依赖项。
以相同方式加入另一个常用依赖项:
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
2. 创建Servlet
一个Servlet就是一个Java类,需要实现指定的接口,在实际开发中通常继承HttpServlet类,并实现doGet/doPost或service等方法。
(1)鼠标右键点击java目录,选择 New -> Package 菜单,输入包的名称:
edu.ncst.firstweb.servlet
(2)鼠标右键点击servlet目录,选择 New -> Java Class 菜单,输入类名:MyServlet,修改MyServlet类的内容如下,注意在键入系统提供的注解、类名、方法名等元素时,要使用Idea2019提供的输入辅助功能。
@WebServlet(name="MyServlet", urlPatterns = "/myservlet")
public class MyServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String name = req.getParameter("name");
String pwd = req.getParameter("password");
resp.setCharacterEncoding("UTF-8");
PrintWriter wr = resp.getWriter();
wr.println("获取到的名称=" + name);
wr.println("获取到的密码=" + pwd);
}
}
(3)启动运行,在浏览器地址中输入:
http://localhost:8080/firstweb/myservlet
(4)修改浏览器访问地址如下,在地址栏中添加参数信息:
http://localhost:8080/firstweb/myservlet?name=admin&password=123456
3. 程序分析
(1)@WebServlet
注解是Java Web应用中常见的元素,放在被修饰的类、变量和方法之前,说明被修饰元素的性质、用途和行为方式等,替代程序和配置文件的部分功能以达到简化开发的目的,有些注解是不可省略的。此处@WebServlet注解标识MyServlet类是一个Servlet,Web容器将根据注解中的参数将特定的请求映射到类的方法上。
大部分注解带有参数以指定注解的属性,参数值由开发者设置。比如urlPatterns参数,其值就是在浏览器地址中访问此Servlet是使用的名称(注意不是name属性的值MyServlet,也不是类名MyServlet)。
(2)HttpServlet
实现Servlet时最常用的基类,已经实现了Servlet需要的大部分基础功能,简化实现Servlet需要完成的工作。
(3)@Override
这个注解代表其修饰的方法从基类继承。
(4)doGet方法是Servlet类中通常需要实现的方法,主要逻辑处理和输入输出都在这个方法中。和doGet并列的还有doPost方法,二者区别在于处理HTTP请求类型不同,doGet处理GET请求,而doPost处理POST请求。
(5)doGet方法的两个参数中,HttpServletRequest类型的参数保存浏览器发送到WEB服务器的数据(如上例中的name和password),主要使用getParameter方法获取这些数据以便后续处理,HttpServletResponse类型的参数用于向浏览器发送运行结果。发送运行结果的方法有多种,这里使用的是最基本的方式。
(6)getParameter方法的参数是一个字符串,其内容必须与浏览器发送给WEB服务器的参数名称一致。比如在上例中,当使用如下访问地址时:
http://localhost:8080/firstweb/myservlet?name=admin&password=123456
请求中包含了两个参数,名称分别为name和password,那么在doGet方法中获取它们的值时,getParameter方法的参数值必须是name和password。
3. 返回HTML格式内容
Servlet运行过程中发送给浏览器的结果通常是HTML格式的数据,使用和发送文本相同的方法也可以发送HTML内容。
(1)复制一份MyServlet的,更改名称为MyHtmlServlet
(2)修改程序如下:
@WebServlet(name="MyHtmlServlet", urlPatterns = "/htmlservlet")
public class MyHtmlServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
String price = req.getParameter("price");
String count = req.getParameter("count");
Double p = Double.parseDouble(price);
Double c = Double.parseDouble(count);
resp.setContentType("text/html");
resp.setCharacterEncoding("GBK");
PrintWriter wr = resp.getWriter();
wr.println("<html><head><title>测试HTML</title></head><body>");
wr.println("<span style='color: red'>单价=" + p + "</span>");
wr.println("<span style='color: red'>数量=" + c + "</span>");
wr.println("<h3>获取到的密码=" + (p * c) + "</h3>");
wr.println("</body></html>");
}
}
(3)发送给浏览器的内容仍然是字符序列,只是内容遵从HTML规范,结果文字镶嵌在HTML标签中,
(4)问题1:要正确运行这个Servlet需要在浏览器地址栏中输入什么样的URL
问题2:浏览器显示的网页与Servlet写回的结果有怎样的关系
4. 注意事项
访问一个WEB应用中的资源(静态或者程序),URL通常分为四部分:
(1)WEB服务器地址和端口,比如 localhost:8080,这是WEB服务器配置中设定的
(2)WEB应用对应的根名称:比如firstweb,firstweb_war等,这是在配置运行服务器(Tomcat)时在部署设置(Depolyment)中设定的
(3)资源(程序)对应的名称:比如myservlet,htmlservlet等,这是在Servlet对应的WebServlet注解中,由urlPatterns属性决定的
(4)参数列表:URL中?后的部分,以key-value方式指定参数的名称和值,这部分可选,根据具体Servlet的程序确定