Web服务软件做了哪些事儿?
-
负责建立底层的网络连接
-
负责将客户端请求的文件返回给客户端
-
负责根据客户端请求的路径找到对应的Servlet 并进行响应
如何创建Web工程
-
创建maven工程 选择通过 maven-archetype-webapp骨架创建工程
-
配置Tomcat 点击绿色扳手旁边Add Config.... 点击灯泡 删除 application Context
-
给工程添加java和resources文件夹 并且在工程设置页面中的facets里面打钩 ,在工程设置页面的models->dependencies添加Tomcat相关jar包
-
创建Servlet 处理拦截路径 在doGet方法中写返回数据的代码
Servlet响应流程
-
用户在浏览器中输入http://localhost:8080/hello请求地址 当发出请求时,该请求会首先被Tomcat拦截, 然后根据请求的路径中的字地址找到对应的Servlet,两种查找方式:1. 通过web.xml配置文件 2. 通过注解方式(servlet3.0以上版本推荐使用的方式), 找到对应的Servlet后Tomcat会通过反射技术将Servlet实例化,并且调用对象中的service方法, 在service方法内部判断请求方式,如果请求方式是get则掉doGet方法, 如果请求方式为post 则调用doPost方法
请求方式GET和POST
-
get请求: 请求参数放在请求地址的后面(不能传递敏感信息), 请求参数的大小有限制(只能传递4k以内数据)
-
浏览器地址栏中发出的请求
-
通过html页面中的超链接
-
通过form表单 默认提交方式(method=get)
-
-
post请求: 请求参数放在请求体内(由于不可见所以安全性较高), 请求参数无大小限制(一般用于文件上传)
-
通过form表单 method=post
-
SayHello练习
-
在webapp下面创建sayhello.html页面 页面中准备form表单 提交地址为sayhello, 表单中一个文本框
-
创建Servlet名字为ServletSayHello, 处理路径为 /sayhello 在doGet方法中获取传递过来的参数 , 在接收到的参数后面拼上"你好" 返回给浏览器
乘法练习
-
在webapp下面创建mul.html页面 页面中准备form表单 提交地址为mul 表单里面两个文本输入框 分别获取用户输入的两个数字, 再加一个提交按钮
-
创建Servlet 名为 ServletMul 处理路径为 /mul , 在doGet方法中或传递过来的两个参数,获取到的参数为字符串 需要转成int 把相乘之后的结果返回给浏览器
AI练习
-
在webapp下面创建ai.html页面 页面中准备form表单 提交地址为ai ,表单里面1个文本输入框 获取用户输入的信息, 再加一个提交按钮
-
创建ServletAI 处理路径 /ai 在doGet方法中获取传递过来的信息, 对信息内容进行替换 把替换完的内容 返回给浏览器.
注册功能步骤:
-
创建maven工程 选择通过 maven-archetype-webapp骨架创建工程
-
配置Tomcat 点击绿色扳手旁边Add Config.... 点击灯泡 删除 application Context
-
给工程添加java和resources文件夹 并且在工程设置页面中的facets里面打钩 ,在工程设置页面的models->dependencies添加Tomcat相关jar包
-
在webapp下面创建注册页面 reg.html 在页面中准备form表单 提交地址为reg 请求方式改成post , 两个文本输入框 和 一个提交按钮
-
创建ServletReg, 拦截路径为 /reg 在doPost里面 先设置字符集 获取传递过来的用户名和密码 在控制台输出
-
把jdbc02工程中pom.xml里面用到的MySQL坐标 和数据库连接池坐标 复制到新工程的pom.xml里面
-
把jdbc02工程中的DBUtils复制到新工程的cn.tedu包下面
-
把jdbc02工程中的jdbc.properties配置文件复制到新工程的相同位置
-
在ServletReg的doPost方法里面 把获取到的用户名和密码通过JDBC代码保存到数据库里面
<!-- 连接MySQL数据库的依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<!-- 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
import com.alibaba.druid.pool.DruidDataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class DBUtils {
private static DruidDataSource ds;
static {
//通过属性对象读取配置文件数据 替换掉下面写死的内容
//创建属性对象
Properties p=new Properties();
//获取文件输入流
InputStream ips=DBUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
//让文件和属性对象关联 异常抛出
try {
p.load(ips);
} catch (IOException e) {
e.printStackTrace();
}
//从属性对象中获取数据 只能获取字符串类型
String username=p.getProperty("db.username");
String password=p.getProperty("db.password");
String driver=p.getProperty("db.driver");
String url=p.getProperty("db.url");
//创建数据库连接池
ds=new DruidDataSource();
//设置数据库连接信息
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
//获取初始数量和最大连接数量
String initSize=p.getProperty("db.initialSize");
String maxSize=p.getProperty("db.maxActive");
ds.setInitialSize(Integer.parseInt(initSize));//设置初始连接数量
ds.setMaxActive(Integer.parseInt(maxSize));//设置最大连接数量
}
public static Connection getConn() throws Exception {
Connection conn=ds.getConnection();//获取连接 异常抛出
System.out.println(conn);
return conn;
}
}
db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/(你自己的数据库名)?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
db.username=root
db.password=root
db.maxActive=10
db.initialSize=2
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="reg" method="post">
<input type="text" name="username">
<input type="text" name="password">
<input type="submit" value="注册">
</form>
</body>
</html>
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 java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
@WebServlet(name = "ServletReg",urlPatterns = "/reg")
public class ServletReg extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String username=request.getParameter("username");
String password=request.getParameter("password");
System.out.println(username+":"+password);
try ( Connection conn=DBUtils.getConn()){
String sql="insert into user values(null,?,?)";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1,username);
ps.setString(2,password);
ps.executeUpdate();
response.setContentType("text/html;charset=utf-8");
PrintWriter pw=response.getWriter();
pw.print("注册完成!");
pw.close();
} catch (Exception e) {
e.printStackTrace();
}
/* request.setCharacterEncoding("utf-8");
String username=request.getParameter("username");
String password=request.getParameter("password");
System.out.println(username+":"+password);
try ( Connection conn=DBUtils.getConn()){
String sql="insert into user values(null,?,?)";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1,username);
ps.setString(2,password);
ps.executeUpdate();
response.setContentType("text/html;charset=utf-8");
PrintWriter pw=response.getWriter();
pw.print("注册完成");
pw.close();
} catch (Exception e) {
e.printStackTrace();
}
*/
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}