Tomcat
1.下载
-
1.官网 https://tomcat.apache.org/ 2.左侧download下选择版本 3.选择下载的格式
-
4.直接解压即可
2.配置
-
1.打开环境变量 2.打开系统变量的path 3.新建一个环境变量 4.将Tomcat包下的bin目录的文件路径添加到刚才新建的环境变量,确定即可
-
1.打开环境变量 2.在系统变量里面新建一个环境变量 变量名为CATALINA_HOME 变量值为Tomcat的文件路径
-
1.打开环境变量 2.在系统变量里面新建一个环境变量 变量名为JAVA_HOME 变量值为jdk的文件路径
3.错误
-
可能会出现500错误 解决办法: 找到tomcat目录,右键“属性—>安全—>编辑”,找到Users,将“完全控制”选项“允许”打钩
4.第一个webapp
- 每次新建(删除,修改)都需要重新启动Tomcat服务器
-
在Tomcat目录下的webapps下新建一个文件夹(APP的名字)[可以配置一个xml文件让Tomcat查找路径,不必新建到webapps文件夹)]
-
拷贝项目的路径
-
在Tomcat的conf目录中找到Catlina,找到localhost
-
在localhost文件夹下创建一个xml文件(文件名可以自定义,建议与项目名称一致)
-
在xml文件配置如下信息
-
<!-- path为web项目的访问路径 docBase为web项目的目录路径 --> <Context path="/Test" docBase="E:\Javaweb\Test"></Context>
-
-
-
在新建的文件夹下可以新建其他的文件,比如html,css,java等
-
启动Tomcat服务器
-
在浏览器输入文件的地址即可(超链接的时候可以省略ip地址和端口号)
5.dos窗口乱码问题
-
1.在Tomcat文件夹下找到conf文件夹 2.在conf文件夹下找到logging.properties 3.在文件里面找到java.util.logging.ConsoleHandler.encoding = UTF-8 4.将UTF-8改为GBK
Servlet基础使用
1.第一个Servlet程序
- 记事本写的
-
在webapps文件夹下新建一个文件夹
-
在新建的文件夹下新建一个文件夹(WEB-INF),全大写
- WEB-INF是规定的且必须的
-
在WEB-INF文件夹下新建一个文件夹(classes),全小写
- classes是规定的且必须的
- 用来存放编译后的文件
-
在WEB-INF文件夹下新建一个文件夹(lib),全小写
- lib用来存放导入的第三方jar包
- 不是必须的,但是规范
-
在WEB-INF文件夹下新建一个文件夹(web.xml),全小写
-
web.xml是规定的必须的
-
web.xml用来存放配置文件
-
最好从其他的文件夹下拷贝过来(因为是固定的)
-
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd" version="5.0" metadata-complete="true"> </web-app>
-
-
编写java程序
-
实现servlet接口
-
JakartaEE9开始,servlet的接口名变了,变成 了Jakarta.servlet.Servlet;
-
实现接口的五个方法
-
不需要编写main方法,service替代了main方法
-
//代码示例 //导包 import jakarta.servlet.Servlet; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; import jakarta.servlet.ServletConfig; import jakarta.IO.IOException; //类,实现接口 public class HelloServlet implements Servlet{ //五个方法 public void init(ServeletConfig config) throws ServletException{ } public void service(ServletRequest request,ServletResponse response) throws ServletException, IOException{ System.out.println("My First Servlet,Hello Servlet"); } public void destroy(){ } public String getServletInfo(){ return ""; } public ServletConfig getServletConfig(){ return null; } }
-
-
编写的java代码不一定就在刚才新建的文件夹下下面,可以在其他地方编写,编写之后的class文件放在classes文件夹下即可
-
-
编译java文件
-
需要将Tomcat文件夹下的lib目录下的servlet-api.jar包配置到环境变量
-
需要在路径前面加上.;(一个点一个分号)
-
-
将编译后的文件拷贝到WEB-INF文件夹下的classes目录下
-
配置xml文件信息
-
<!--serv描述信息--> <servlet> <servlet-name>Test</servlet-name> <!--带有包名的全限定类名--> <servlet-class><!--比如package Demo;--></servlet-class> </servlet> <!--servlet映射信息--> <servlet-mappding> <!--名字,要和上面的name一样--> <servlet-name>Test</servlet-name> <!--路径,以/开始--> <url-pattern>/xxx/xxx/xxx</url-pattern> </servlet-mappding>
-
//代码示例 //导包 import jakarta.servlet.Servlet; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; import jakarta.servlet.ServletConfig; import jakarta.IO.IOException; //配置xml 直接在类中加上@WebServlet("/路径名")即可 //要以/开头 //类,实现接口 public class HelloServlet implements Servlet{ //五个方法 public void init(ServeletConfig config) throws ServletException{ } public void service(ServletRequest request,ServletResponse response) throws ServletException, IOException{ System.out.println("My First Servlet,Hello Servlet"); } public void destroy(){ } public String getServletInfo(){ return ""; } public ServletConfig getServletConfig(){ return null; } }
-
-
启动Tomcat服务器
-
启动浏览器,输入地址
-
<!--webapps下的--> http://ip地址:端口/webapps下新建的文件夹名/配置的文件信息中的路径名, <!--例--> http://localhost:8080/crm/Test <!--conf配置的xml下的--> http://ip地址:端口/path的值/要打开的文件名 <!--例--> http://localhost:8080/Test/Demo
-
2.Servlet编写数据库代码
- 在service方法中编写jdbc代码即可
- 连接jar包
- 修改路径名
3.idea开发servlet
-
正常新建项目
-
正常新建模块
-
让模块变成javaEE的模块
- 右击模块->选择Add Framework Support..
- javaEE中选择Web Application
- 默认为4.0版本和创建一个web.xml文件
- 默认生成一个web目录(就是项目的名字)
-
默认有生成一个index.jsp文件,可以删除可以不删除
-
编写Servlet
- 实现接口
- 将Tomcat文件夹下的lib目录下的servlet-api.jar和jsp-api.jar包添加到模块中
- 打开project setting->选择模块
- 选择要导入的模块->选择dependentcies
- 点击+号,将两个包添加进来
- 点击应用,点击OK
- 重写五个方法
-
在servlet当中的service方法编写代码
-
再创建一个类(建议以Servlet结尾命名),继承Http.servlet.http.HttpServlet类(HttpServlet)
- 能够接收http请求
-
重写doPost/doGet方法
- 能够处理用户不同的请求
-
-
将连接数据库的jar包导入模块
- 新建一个lib,全小写
- 将jar包放入进来
- 添加到模块
-
在web.xml文件中配置文件
-
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>TestServlet</servlet-name> <servlet-class>Demo.TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/Demo/TestServlet</url-pattern> </servlet-mapping> </web-app>
-
//代码示例 //导包 import jakarta.servlet.Servlet; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; import jakarta.servlet.ServletConfig; import jakarta.IO.IOException; //配置xml @WebServlet("/Demo/TestServlet") //类,实现接口 public class HelloServlet implements Servlet{ //五个方法 }
-
-
关联Tomcat服务器
-
idea工具右上角,绿色小锤子旁边有一个Add Configuration
-
点击进去,左上角加号,点击Tomcat Server->local
-
配置server信息
-
部署Deployment
- 点击+号,选择第一个(aitifact)
-
-
编写html代码(新建在web目录外面)
-
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Servlet</title> </head> <body> <a href="/TestServlet/Demo/TestServlet">Servlet Test</a> </body> </html>
- 启动Tomcat服务器(绿色小虫子)(debug)
4.HTTP协议
超文本传输协议(HTTP,HyperText Transfer Protocol),是互联网应用最为广泛的一种网络协议.
特点
-
基于连接通信:当浏览器与服务器进行通信时,会首先建立网络连接,通过网络连接进行通信
-
短连接:在HTTP1.0中,浏览器向服务器发送请求,建立连接,但是这个连接只作用于浏览器和服务器的一次请求响应,这次请求响应完成之后则断开连接。
-
长连接:在HTTPI.1中,浏览器请求与服务器建立连接、进行请求和响应之后,会等待几秒钟,在这几秒内如果浏览器有新的请求,则直接使用之前的这个连接进行请求和数据响应,如果过了几秒钟没有新的请求,则将连接断开。
-
-
请求与响应模式:首先由浏览器向服务器发送请求,服务器再对请求进行响应,如果没有浏览器的请求服务器是不会主动向浏览器进行响应的
-
无状态:服务器不会感知同一个客户端的多次请求(当服务器接收到客户端请求之后,不能识别这个客户端是否请求的是我)
-
简单灵活:可以传输不同类型的数据
5.动态响应网页
-
创建一个类
-
//包 package TrendHttp; //类 public class Book { //属性 private String bookId; private String bookName; private String bookAuthor; private String bookPrice; //无参有参get和set方法 }
-
-
创建一个实例类(编写实现代码)
-
package TrendHttp; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; //配置xml @WebServlet("/BookServlet") //继承HttpServlet类,千万别导错包,是Jakarta开头的,不是java public class BookServlet extends HttpServlet { //重写doGet和doPost方法 @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ //实现doPost方法 System.out.println("doPost"); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ //实现doGet方法 System.out.println("doGet"); //动态生成HTML //1.接收浏览器请求时传递的图书ID String bid = request.getParameter("bookId"); //2.根据接收到的ID查询图书表(假装是从数据库查询的) //2.1创建一个集合用来存储图书数据 Map<String,Book> bookMap = new HashMap<>(); //2.2存入一些数据到集合中 bookMap.put("1001",new Book("1001","Java","张三","99.99")); bookMap.put("1002",new Book("1002","C++","李四","88.88")); bookMap.put("1003",new Book("1003","Python","王五","77.77")); //3.根据接收到的id查询集合中的数据 Book book = bookMap.get(bid); //4.将查询到的数据生成网页,将网页响应给浏览器,通过IO流向浏览器响应一个网页数据 //4.1设置响应头 //编码 response.setCharacterEncoding("utf-8"); //响应格式 response.setContentType("text/html"); //4.2将数据以网页形式响应给浏览器 //out对象就是用于响应浏览器的IO流,通过这个IO流写出什么数据,浏览器就可以接收到什么数据 PrintWriter out = response.getWriter(); //返回什么数据 out.println("<!DOCTYPE html"); out.println("<html>"); out.println("<head><meta charset= utf-8><title>Servlet动态响应网页</title></heda>"); out.println("<body>"); //以表格的形式显示 out.println("<table style='border:2px red solid;width:288px;align='center' border='1' cellspacing='0'>"); out.println("<tr><th>图书编号</th><th>图书名称</th><th>图书作者</th><th>图书价格</th></tr>"); out.println("<tr>"); //动态返回数据 out.println("<td>"+book.getBookId()+"</td>"); out.println("<td>"+book.getBookName()+"</td>"); out.println("<td>"+book.getBookAuthor()+"</td>"); out.println("<td>"+book.getBookPrice()+"</td>"); out.println("</tr>"); out.println("</table>"); out.println("</body>"); out.println("</html>"); //关闭out out.close(); } }
-
-
浏览器请求访问
-
//1.访问路径 ip地址:端口/文件路径?访问的键值 //例 localhost:8080/BookServlet?bookId=1001
-
效果
-
- [ ]