目录
Tomcat安装
Tomcat官网:Apache Tomcat® - Welcome!
下载后解压文件如下:
bin | 该目录下存放的是二进制可执行文件。 |
conf | 这是一个非常非常重要的目录,这个目录下有四个最为重要的文件。server.xml:配置整个服务器信息。tomcatusers.xml:存储tomcat用户的文件,这里保存的是tomcat的用户名及密码,以及用户的角色信息。web.xml:部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。context.xml:对所有应用的统一配置,通常我们不会去配置它。 |
lib | Tomcat的类库,里面是一大堆jar文件。 |
temp | 存放Tomcat的临时文件,这个目录下的东西可以在停止Tomcat后删除! |
logs | 这个目录中都是日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,那么异常也会记录在日志文件中。 |
webapps | 存放web项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是tomcat自带的。 |
work | 运行时生成的文件,最终运行的文件都在这里。 |
运行
启动
在bin目录下,终端输入startup.bat运行启动程序。
停止
/bin/shutdown.bat 停止程序。
修改端口
修改conf/server.xml文件。
创建本地项目
首先在webapps中创建新文件夹。例如:myfirstweb。
在新建的文件夹内创建WEB-INF文件夹,用于存放项目的核心内容。
在WEB-INF文件夹中:
创建classes,用于存放 .class文件
创建lib,用于存放 jar 文件
创建web.xml,项目配置文件
把网页 index.jsp 复制到myweb文件夹中,与WEB-INF同级目录。
打开tomcat服务,访问:
http://localhost:8000/myweb/
Servlet开发基础
推荐:
Servlet 教程 | 菜鸟教程 (runoob.com)
千锋教育Servlet视频教程:Servlet从入门到精通_哔哩哔哩_bilibili
Servlet概念;
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
最早支持Servlet标准的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。
Servlet作用:
Servlet 通过创建一个框架来扩展服务器的能力,以提供在 Web 上进行请求和响应服务。通俗来讲servlet专门用来接收客户端的请求,专门接收客户端的请求数据,然后调用底层的service处理数据并生成结果返回数据。当客户机发送请求至服务器时,服务器可以将请求信息发送给 Servlet ,并让 Servlet 建立起服务器返回给客户机的响应。
Servlet 可完成如下功能:
(1) 创建并返回一个包含基于客户请求性质的动态内容的完整的 HTML 页面。
(2) 创建可嵌入到现有 HTML 页面中的一部分 HTML 页面( HTML 片段)。
(3) 与其它服务器资源(包括数据库和基于 Java 的应用程序)进行通信。
(4) 用多个客户机处理连接,接收多个客户机的输入,并将结果广播到多个客户机上。例如, Servlet 可
以是多参与者的游戏服务器。
(5) 当允许在单连接方式下传送数据的情况下,在浏览器上打开服务器至 applet 的新连接,并将该连
接保持在打开状态。当允许客户机和服务器简单、高效地执行会话的情况下, applet 也可以启动客户浏览器和服务器之间的连接。可以通过定制协议或标准(如 IIOP )进行通信。
(6) 对特殊的处理采用 MIME 类型过滤数据,例如图像转换和服务器端包括( SSI )。
(7)将定制的处理提供给所有服务器的标准例行程序。例如,Servlet可以修改如何认证用户。
tomcat和servlet的关系
Tomcat 是Web应用服务器,是一个Servlet/JSP容器.
Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.
而Servlet是一种运行在支持Java语言的服务器上的组件.
Servlet最常见的用途是扩展Java Web服务器功能,提供非常安全的,可移植的,易于使用的CGI替代品.
从http协议中的请求和响应可以得知,浏览器发出的请求是一个请求文本,而浏览器接收到的也应该是一个响应文本。
但是并不知道是如何转变的,只知道浏览器发送过来的请求也就是request,我们响应回去的就用response。
①:Tomcat将http请求文本接收并解析,然后封装成HttpServletRequest类型的request对象,
所有的HTTP头数据读可以通过request对象调用对应的方法查询到。
②:Tomcat同时会要响应的信息封装为HttpServletResponse类型的response对象,
通过设置response属性就可以控制要输出到浏览器的内容,然后将response交给tomcat,tomcat就会将其变成响应文本的格式发送给浏览器
Java Servlet API 是Servlet容器(tomcat)和servlet之间的接口,它定义了serlvet的各种方法,
还定义了Servlet容器传送给Servlet的对象类,其中最重要的就是ServletRequest和ServletResponse。
所以说我们在编写servlet时,需要实现Servlet接口,按照其规范进行操作。
编写第一个Servlet
开发环境
将Servlet相关 jar包导入到环境变量中。
编写Servlet文件
实现javax.servlet.Servlet,一般会去重写五个方法,在service()核心方法中打印出
My first Servlet!
编写java文件,内容如下。
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
public class MyServlet implements Servlet{
public void init(ServletConfig servletConfig) throws ServletException{
}
public void service(ServletRequest request,ServletResponse response) throws ServletException,IOException{
System.out.println("My first Servlet!");
}
public void destroy(){
}
public ServletConfig getServletConfig(){
return null;
}
public String getServletInfo(){
return null;
}
}
然后运行编辑生成class文件放入\WEB-INF\classes文件夹下。
配置web.xml
然后启动Tomcat服务,访问:
localhost:8000/myweb/myservlet
利用IDEA简单开发
简单的登录框
代码实现
Index.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="MyTest">
<div>
姓名:<input type="text" name="name"/>
</div>
<div>
密码:<input type="password" name="password"/>
</div>
<div>
<input type="submit" value="提交" />
</div>
</form>
</body>
</html>
直接访问feng.html
实现效果图
再来写一个注册登录页面。
登录及注册
代码实现
Loginservlet.java
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LoginServlet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();//获取session
Object name = session.getAttribute("name");//从session中获取用户名
Object password = session.getAttribute("password");//从session获取用户密码
System.out.println(name+":"+password); //测试一下,输出获取的用户名和密码
session.invalidate(); //注销session
response.sendRedirect("login.html"); //跳转到login.html页面
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// doGet(request, response);
// 设置编码为utf-8
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
// 获取用户名和密码
String name = request.getParameter("uname");
String password = request.getParameter("password");
// 校验用户名和密码是否正确
if ("f0njl".equals(name) && "123456".equals(password)) {// 验证成功
HttpSession session = request.getSession();//获取session
session.setAttribute("name", name);// 将用户名和密码保存在session中
session.setAttribute("password", password);// 将用户名和密码保存在session中
response.sendRedirect("success.jsp");// 跳转到success.jsp页面
} else {// 校验不成功,则留在跳转到login.jsp页面
response.sendRedirect("login.html");
}
}
}
login.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录页面</title>
</head>
<body>
<form action="loginServlet" method="post"><!-- action写要请求Servlet的名 -->
用户名:<input type="text" id="uname" name="uname"><br><br>
密码:<input type="password" id="password" name="password"><br><br>
<input type="submit" value="登录">
<input type="reset" value="重置">
</form>
</body>
</html>
success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录成功页面</title>
</head>
<body>
登录成功!${name},${password}<form action="loginServlet" method="get"><input type="submit" value="注销登录"></form>
</body>
</html>
实现效果图
文件上传
代码实现
upload.html
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上传文件</title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="img"><p>
<input type="submit" value=" 提 交 ">
</form>
</body>
</html>
UploadServlet.java
package upload;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(value="/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {
@Override
//因为提交表单只需要post,那么这里就不需要get方法了
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//首先拿到流信息,他返回的是一个part对象
Part part = req.getPart("img");
//手下声明一个保存路径,这里保存在D盘的File文件下
String filePath = "xxxxx";//文件传输路径
//保存文件的名称这里就和原文件的名称一样,通过part里面的方法得到原文件名称
String fileName = part.getSubmittedFileName();
//通过write方法,可以将这个png文件保存在任意路径下,write里面的参数,就是要保存的路径
part.write(filePath+fileName);
//然后给前端返回响应的结果
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
PrintWriter writer = resp.getWriter();
writer.println("<h1>上传成功</h1>");
}}
实现效果图
上传文件名称:filePath+fileName