1.Tomcat服务器安装注意事项
两个环境变量的配置:
- JAVA_HOME jdk的根
- CATALINK_HOME Tomcat服务器的根
没有配置CATALINK_HOME会出现如下:
防止使用命令shutdown.bat关机,将tomcat目录的bin下的shutdown.bat改为stop.bat
解决乱码:
conf下的logging.properties
2.编写WebApp
以下路径以/开头,带项目名,是一个绝对路径,不带
http://127.0.0.1:8080
<a href="/oa/login.html">user login</a>
3.BS系统角色和协议
4.模拟Servlet
4.1模拟sun公司
package javax.servlet;
/**
* 充当sun公司,将Servlet接口/规范制定出来
*
* @author Beyong
* @date 2023/02/28 09:11
**/
public interface Servlet {
void service();
}
4.2模拟Tomcat服务器
package org.apache;
import javax.servlet.Servlet;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
import java.io.FileReader;
import java.util.Scanner;
/**
* 充当Tomcat服务器的开发者
*
* @author Beyong
* @date 2023/02/28 09:26
**/
public class Tomcat {
public static void main(String[] args) throws IOException, ClassNotFoundException, IllegalAccessException, InstantiationException {
System.out.println("tomcat服务器启动成功,开始接收用户输入");
System.out.println("请输入访问地址");
Scanner s = new Scanner(System.in);
//用户输入请求路径
String key = s.nextLine();
//请求路径和Servlet之间的关系
//Tomcat服务器解析配置文件
FileReader reader = new FileReader("web.properties");
Properties pro = new Properties();
pro.load(reader);
reader.close();
//通过key获取value
String className = pro.getProperty(key);
//通过反射机制创建对象
Class clazz = Class.forName(className);
//obj类型对于Tomcat服务器开发人员来说不知道
Object obj = clazz.newInstance();
//Tomcat服务器的开发者知道,你写的Servlet一定实现了Servlet接口
Servlet servlet = (Servlet)obj;
servlet.service();
}
}
4.3模拟WebApp开发者
package com.sdnu.servlet;
import javax.servlet.Servlet;
/**
* 充当银行webapp开发者
*
* @author Beyong
* @date 2023/02/28 08:47
**/
public class BankServlet implements Servlet {
public void service() {
System.out.println("BankServlet's service...");
}
}
package com.sdnu.servlet;
import javax.servlet.Servlet;
/**
* 充当用户列表webapp开发者
*
* @author Beyong
* @date 2023/02/28 08:50
**/
public class UserListServlet implements Servlet {
public void service() {
System.out.println("UserListServlet's service...");
}
}
package com.sdnu.servlet;
import javax.servlet.Servlet;
/**
* 充当用户登录webapp开发者
*
* @author Beyong
* @date 2023/02/28 08:51
**/
public class UserLoginServlet implements Servlet {
public void service() {
System.out.println("UserLoginServlet's service...");
}
}
web.properties
/aaa=com.sdnu.servlet.UserListServlet
/bbb=com.sdnu.servlet.UserLoginServlet
/ccc=com.sdnu.servlet.BankServlet
5.开发一个带有Servlet的WebApp
5.1创建一个名为crm的项目
5.2 在项目中创建一个名为WEB-INF的文件(必须)
5.3在WEB-INF下新建一个名为classes,将来存储java字节码文件。(必须)
5.4在WENINF下新建一个名为lib的文件夹,将来存储jar包。
5.5在WEB-INF下新建一个名为web.xml文件(必须)
从其它地方拷贝即可。
5.6 编写小Java程序,必须实现Servlet接口
- 将这个路径配置到环境变量
5.7编写HelloServlet程序
小程序:
package com.sdnu.servlet;
import jakarta.servlet.Servlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.ServletConfig;
import java.io.IOException;
public class HelloServlet implements Servlet{
public void init(ServletConfig config) throws ServletException{
}
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException{
System.out.println("My Hello World!!!");
}
public void destroy(){
}
public String getServletInfo(){
return "";
}
public ServletConfig getServletConfig(){
return null;
}
}
编译后:
获得字节码:
5.8 将以上生成的class字节码拷贝到WEB-INF\classes下
5.9 在web.xm注册Servlet类
目的:使得请求路径和Servlet类关联到一起。
<?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">
<!--servlet描述信息-->
<!--任何一个servlet都对应一个servlet-mapping-->
<srvlrt>
<srvlet-name>aaa</servlet-name>
<srvlet-class>com.sdnu.servlet.HelloServlet</servlet-class>
</servlet>
<!--servlet映射信息-->
<servlet-mapping>
<!--这里名字随便,但要和上面的内容一致-->
<srvlet-name>aaa</servlet-name>
<!--这里要一个路径-->
<!--必须以/开始-->
<srvlet-pattern>/bbb/ccc/ddd</servlet-pattern>
</servlet-mapping>
</web-app>
5.10启动Tomcat服务器
5.11打开浏览器
输入url:
http://127.0.0.1:8080/crm/bbb/ccc/ddd
6.使用IDEA开发Servlet
6.1项目
新建一个空的项目。
6.2模块
在项目中新建一个新的javase模块。
6.3 Module变成Java EE模块
如下结构符合WebApp
6.4编写Servlet
package com.sdnu.javaweb.servlet;
import jakarta.servlet.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
/**
* StudentServlet
*
* @author Beyong
* @date 2023/02/28 17:37
**/
public class StudentServlet implements Servlet{
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
servletResponse.setContentType("text/html");
PrintWriter out = servletResponse.getWriter();
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/java_web";
String user = "root";
String password = "XXXXXXX";
conn = DriverManager.getConnection(url, user, password);
String sql = "select no, name from t_student";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
String no = rs.getString("no");
String name = rs.getString("name");
out.print(no + "," + name + "</br>");
}
} catch (ClassNotFoundException | SQLException e){
e.printStackTrace();
} finally {
if(rs != null){
try{
rs.close();
} catch(SQLException e){
e.printStackTrace();
}
}
if(ps != null){
try{
ps.close();
} catch(SQLException e){
e.printStackTrace();
}
}
if(conn != null){
try{
conn.close();
} catch(SQLException e){
e.printStackTrace();
}
}
}
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
需要导入如下两个JAR包
6.5 导入数据库驱动
在WEB-INF下新建一个名为lib的文件夹,将数据库对应的jar包放入。
6.6 在web.xm注册Servlet类
web.xml完成servlet类的注册。
<?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>studentServlet</servlet-name>
<servlet-class>com.sdnu.javaweb.servlet.StudentServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>studentServlet</servlet-name>
<url-pattern>/servlet/student</url-pattern>
</servlet-mapping>
</web-app>
6.7 前端页面
编写前端页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="/servlet/student">student list</a>
</body>
</html>
放到web目录下。
6.8项目部署
使得IDEA连接Tomcat,同时将webapp部署到Tomcat上。
6.9启动Tomcat服务器
debug启动
6.10浏览器访问
http://localhost:8080/xmm/servlet/student
展示数据库中的数据
作者:Beyong
出处:Beyong博客
github地址 https://github.com/beyong2023
本博客中未标明转载的文章归作者Beyong有,欢迎转载,但未经作者同意必须保留此段声明,且在文章明显位置给出原文连接,否则保留追究法律责任的权利。