JavaWeb
遇到的问题
1 . 解决setContentType设置无效问题
//这段代码必须在获取response对象之前设置
req.setContentType("text/html;charset=utf-8");
//错误示范
PrintWriter writer = resp.getWriter();
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
//正确示范
//设置请求和相应编码
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
一 . socket
IP地址
- 查看本地IP地址,在终端使用 :
ipconfig
命令 IP地址的表示形式为 : 点分十进制
xxx.xxx.xxx.xxx
每个十进制数的范围为:0~255
- IP地址的组成 = 网络地址 +主机地址 eg:192.168.16.69
- IPV6是用于代替IPV4的下一代IP协议
域名
- 将IP地址映射成域名
协议后面单独说
端口号
- 范围 : 0~65535
- 0~1024已被占用
常见的端口号
公有端口 : 0~1023
- Http : 80
- Https : 443
- FTP : 21
- Telent : 23
程序注册端口 : 1024~49151
- Tomcat : 8080
- Mysql : 306
- Oracle : 1521
动态 私有 : 49152~65535
#查看所有端口 netstat -ano #查询具体端口 netstat -ano|findstr "5900str" #查看指定端口进程 tasklist|findstr "8696"
DNS域名解析
二 . 通信协议
网络通信协议 : 速率 , 传输码率 , 代码结构 , 传输控制......
TCP/IP协议簇
- TCP : 传输控制协议
- UDP : 用户数据协议
TCP UDP对比
TCP : 类似打电话
- 连接稳定
三次握手
四次分手
最少需要三次才能保证稳定连接 类似 : A : 你愁啥? B : 瞅你咋地? A : 直接上手! A : 我要走了 B : 你真的要走了吗? B : 你真的真的要走了吗? A ; 我走了
- 客户端 服务端
- 传输完成就释放连接,效率低
UDP : 类似发短信
- 不连接也不稳定
- 没有明确的界限对于客服端还是服务端
- 随时随地都可以发包
- DDOS攻击
三 . Web服务器
Tomcat:由Apache组织提供的一种Web服务器,提供对jsp和Servlet的支持。它是一种轻量级的javaWeb容器(服务器),也是当前应用最广的JavaWeb服务器(免费)。
1 . bin
例如启动tomcat 或者停止tomcat --------可执行文件
- *.bat 运行在windows批处理文件
- *.sh-----linux环境中运行文件
2 . conf
存放全局配置文件
logging.properties : 编码格式等
server.xml : 修改tomcat启动端口号码等
3 . webapps
存放运行程序 部署war包、jar包、静态资源。
http://127.0.0.1:8080/com/ 默认就是查找tomcat webapps 目录中的index.html
4 . lib
tomcat 需要依赖一些jar包
5 . logs
存放 tomcat一些日志
6 . temp
存放临时文件
7 . work
四 . servlet
springmvc
----底层基于Servlet
Servlet
定义:Servlet
是基于Java
技术的Web
组件,由容器管理并产生动态的内容。Servlet与客户端通过Servlet
容器实现的请求/响应模型进行交互。
1 . 搭建环境
- 1.在我们的项目中创建libs目录存放第三方的jar包
- 2.项目中导入
servlet-api.jar
在tomcat
-->libs
目录中 - 3.创建
servlet
包 , 并创建IndexServlet
类 , 继承Servlet
接口并重写方法 5.
IndexServlet
类上加上@WebServlet("/com")注解定义 URL访问的路径package com.servlet; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import java.io.IOException; import java.io.PrintWriter; @WebServlet("/com") public class indexServlet 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 { System.out.println("成功"); String userName = servletRequest.getParameter("userName"); PrintWriter writer = servletResponse.getWriter(); if("aat".equals(userName)) { writer.println("success"); }else { writer.println("failure"); } writer.close(); } @Override public String getServletInfo() { return null; } @Override public void destroy() { } }
2 . servlet生命周期
1 . init : 初始化方法
当我们的servlet类被创建时,执行servlet类初始化方法init 代码初始化该方法只会执行一次。
2 . service : 执行每次请求
每次客户端发送请求达到服务器端 都会执行到 servlet类service方法
3 . destroy : 当我们tomcat容器停止时卸载servlet
存放销毁相关代码
4 . getServletInfo()
返回一个String类型的字符串,其中包括了关于Servlet的信息,例如,作者、版本和版权。该方法返回的应该是纯文本字符串,而不是任何类型的标记。
5 . getServletConfig()
该方法返回容器调用init()方法时传递给Servlet对象的ServletConfig对象,ServletConfig对象包含了Servlet的初始化参数。
@WebServlet(urlPatterns = "/mayiktmeite",loadOnStartup = -1)
@WebServlet(urlPatterns = "/servletConfig", loadOnStartup = -1, initParams = {
@WebInitParam(name = "test", value = "Atanycosts")
})
urlPatterns
: 定义请求路径
loadOnStartup
的值为负数 : 第一次被访问时创建Servlet对象
loadOnStartup
的值为正数或零 : 服务器启动时创建Servlet对象 数字越小优先级越高
3 . Servlet+JDBC实现登录注册
导入相关jar包
在导入 servlet-api.jar
包和配置好 Tomcat
的基础上
导入 commons-lang3-3.4.jar
和 mysql-connector-java-8.0.13.jar
文件创建
还是在原来的 com
包下
config.properties
文件位置 src
--> config.properties
driverClass=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/atanycosts?serverTimezone=UTC&useSSL=false
user=root
password=root
工具类
package com.utils;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class UserUtils {
private UserUtils() {
}
/**
* 2.定义工具类 需要 声明 变量
*/
private static String driverClass;
private static String url;
private static String user;
private static String password;
/**
*3.使用静态代码快 来给我们声明好 jdbc变量赋值(读取config.properties)
*/
static {
try {
// 1.读取config.properties IO 路径 相对路径
InputStream resourceAsStream = UserUtils.class.getClassLoader().getResourceAsStream("config.properties");
// 2.赋值给我们声明好的变量
Properties properties = new Properties();
properties.load(resourceAsStream);
driverClass = properties.getProperty("driverClass");
url = properties.getProperty("url");
user = properties.getProperty("user");
password = properties.getProperty("password");
// 3.注册驱动类
Class.forName(driverClass);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 4.封装连接方法
*/
public static Connection getConnection() throws SQLException {
Connection connection = DriverManager.getConnection(url, user, password);
return connection;
}
/**
* 5.封装释放连接方法 (重载)
*/
public static void closeConnection(ResultSet resultSet, Statement statement, Connection connection) {
// 1.查询 释放连接 resultSet statement connection
try {
if (resultSet != null)
resultSet.close();
if (statement != null)
statement.close();
if (connection != null)
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 增删改---释放jdbc资源
* @param statement
* @param connection
*/
public static void closeConnection(Statement statement, Connection connection) {
// 1.查询 释放连接 resultSet statement connection
closeConnection(null, statement, connection);
}
/**
* 开启事务
* @param connection
* @throws SQLException
*/
public static void beginTransaction(Connection connection) throws SQLException {
connection.setAutoCommit(false);
}
/**
* 提交事务
* @param connection
* @throws SQLException
*/
public static void commitTransaction(Connection connection) throws SQLException {
connection.commit();
}
/**
* 回滚事务
* @param connection
*/
public static void rollBackTransaction(Connection connection) {
if (connection != null) {
try {
connection.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 关闭事务
* @param connection
*/
public static void endTransaction(Connection connection) {
if (connection != null) {
try {
connection.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
html文件
创建 login.html
和 register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<h1>用户登录</h1>
<form action="http://localhost:8080/orderTomcat_war_exploded/login" method="post">
<!--name=mayikt&age=12 -->
<span>名称:</span> <input type="text" name="userName"> <br>
<span>密 码:</span> <input type="password" name="userPwd" value=""><br>
<input type="submit">
</form>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册</title>
</head>
<body>
<h1>用户注册</h1>
<form action="http://localhost:8080/orderTomcat_war_exploded/register" method="post">
<!--name=mayikt&age=12 -->
<span>用户名称:</span> <input type="text" name="userName"> <br>
<span>密 码:</span> <input type="password" name="userPwd" value=""><br>
<input type="submit">
</form>
</body>
</html>