JavaWeb-day01
服务器
什么是服务器?
简单来说,能够对外提供服务的电脑就叫服务器。
官方一点来说,就是下面这样:
服务器是计算机的一种,它比普通计算机运行更快、负载更高、价格更贵。服务器在网络中为其它客户机(如PC机、智能手机、ATM等终端甚至是火车系统等大型设备)提供计算或者应用服务。服务器具有高速的CPU运算能力、长时间的可靠运行、强大的I/O外部数据吞吐能力以及更好的扩展性。
根据服务器所提供的服务,一般来说服务器都具备承担响应服务请求、承担服务、保障服务的能力。服务器作为电子设备,其内部的结构十分的复杂,但与普通的计算机内部结构相差不大,如:cpu、硬盘、内存,系统、系统总线等。
服务器的分类(扩展一点点)
- 按网络规模划分
- 工作组级服务器
- 部门级服务器
- 企业级服务器
- 按架构划分(芯片)
- CISC(复杂指令集)架构的服务器
- RISC(精简指令集)架构的服务器
- 按用途划分
- 通用型服务器
- 专用型(或称"功能型")服务器
- 按外观划分
- 台式服务器(工作站、塔式机)
- 机架式服务器
- 刀片服务器
这里就是简单的讲一下服务器,至于大家如果想详细了解服务器的话,请大家自行查询资料,谢谢理解。
网络通信的要素
网线
网线,一般由金属或玻璃制成,它可以用来在网络内传递信息。常用的网络电缆有三种:双绞线、同轴电缆和光纤电缆(光纤)。双绞线是由许多对线组成的数据传输线。它的特点是价格便宜,所以被广泛应用。双绞线是用来和RJ45水晶头相连的,有STP和UTP两种,常用的是UTP。
IP
IP:每台电脑在网络上的地址。
官方一点来说,就是下面这样:
IP指网际互连协议,Internet Protocol的缩写,是TCP/IP体系中的网络层协议。
设计IP的目的
设计IP的目的是提高网络的可扩展性:
- 解决互联网问题,实现大规模、异构网络的互联互通;
- 分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。
- 根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务。
端口
端口:计算机数据的进出口。
"端口"是英文port的意译,可以认为是设备与外界通讯交流的出口。
端口分类
- 虚拟端口,虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。
- 物理端口又称为接口,是可见端口,计算机背板的RJ45网口,交换机路由器集线器等RJ45端口。电话使用RJ11插口也属于物理端口的范畴。
协议
协议:传输中的数据包的格式
(网络)协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。
小小总结:网线简单来说,就是我们电脑需要从网上下载资源的时候,要的一个硬件物品,要知道最初是没有wifi的,当然现在大家可以用WiFi,但是它只是换了一种形式,去在网络中传递信息,IP就是地址,试想没有地址,我怎么能找到具体的位置,去接收或者获取信息,端口,就是一个通道口,试想一下,如果没有通道口,信息如何传递,或者说,两个房子之间,假如两个房子都没有窗户,没有门,没有与外界传递物品的通道口,我们自然就无法实现传递信息,所以说,它是相当重要的。协议,就是我们为了传递信息而建立的规则,我们常说,没有规则不成方圆,其实,规则,我们也可以看成法律,我们作为一个遵纪守法的好公民,当然犯法是不可以的呀。
Tomcat
tomcat是什么?
tomcat是一个轻量级的服务器软件。
我们常说的服务器,一般是指硬件。
tomcat下载
链接: tomcat下载
下载截图: 
tomcat作用
- 开启端口
- 监听端口
tomcat目录
bin:存放可执行文件(重点)
conf:配置文件(重点)
lib:第3方依赖
logs:日志(重点)
temp:用来临时文件
webapps:存放应用程序(重点)
work:工作目录,程序运行时一些文件放在这个目录
目录截图:

tomcat启动
双击bin目录下的startup.bat,看到Server startup in xxxms时表示启动成功
访问资源
打开浏览器,输入地址:http://ip地址:端口/项目名称/资源名称
例如:http://localhost:8080/taobao/taobao.html
localhost:代表自己现在使用的电脑。
cpolar 内网穿透(彩蛋)
先去cpolar官网,先注册一个账号,注册完账号,登录进去,选择0元套餐即可,当然,你非常有钱,也可以选择其他套餐,下载cpolar压缩包,解压运行cpolar之后,复制你自己账号界面的连接命令,在你的cpolar账户界面的步骤3中,复制该命令,到运行cpolar命令框中,回车执行,(之后,你需要打开自己新建的JavaWeb程序,配置好tomcat之后,运行它,默认端口8080,一般情况下,不需要改。)再输入cpolar http 8080 回车即可,会看到一个它经过某种转换的网址,复制该网址,去浏览器打开,这个地址就是你的http:localhost:8080,只是它可以让别人访问而已,你也可以,将该网站生成一个二维码,去扫码,也可以使用。
链接: cpolar官网
web资源分类
- 静态资源:无论访问多少次,内容不变;
- 动态资源:每次访问,结果都可能不一样;
Servlet
什么是Servlet
Servlet是运行在web上的一种应用程序。
如何编写一个Servlet
- 编写一个普通类DemoServlet
- 继承HttpServlet
- 重写service方法
- 配置@WebServlet注解,用于配置该Servlet的访问地址
//DemoServlet.java
package com.blb.servlet;
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;
//不加反斜杠的问题
@WebServlet("/demo")
public class DemoServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.service(req, resp);
System.out.println("hello Servlet");
}
}
Servlet接收网页发送过来的数据
HttpServletRequest:请求
HttpServletResponse:响应
request.getParameter("xxx"); //xxx为form表单输入框的name属性值
Servlet响应数据
乱码问题
- html页面乱码
- request乱码
- 文件乱码(就是.java中的中文注释乱码)
- jdbc乱码
- 数据库乱码
- 数据库表乱码
- tomcat日志乱码
- response乱码
html页面乱码的解决办法如下:
在html里面加
head>
<meta charset="UTF-8">
<title>标题</title>
</head>
request乱码的解决办法如下:
在Servlet类里面加(具体就是在重写service方法的方法体里面加上)
//设置request编码
req.setCharacterEncoding("UTF8");
文件乱码的解决办法如下:
将编码改为UTF-8
详细操作如下图:

jdbc乱码的解决办法如下:
将jdbc配置文件url后面加一段characterEncoding=utf8
这是我的jdbc.properties文件
driverClassName=com.mysql.cj.jdbc.Driver
jdbcUrl=jdbc:mysql:///db6?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
username=root
password=root
数据库乱码的解决办法如下:
将数据库的编码改为utf8
数据库表乱码的解决办法如下:
将数据库表的编码改为utf8
tomcat日志乱码的解决办法如下:
找到logging.properties文件
apache-tomcat-8.5.82\conf\logging.properties
将文件里面的UTF-8全部修改为GBK
response乱码的解决办法如下:
//设置response编码
resp.setCharacterEncoding("UTF8");
最后附上我的java源码
目录如下:

package com.blb.servlet;
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;
//不加反斜杠的问题
@WebServlet("/demo")
public class DemoServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.service(req, resp);
System.out.println("hello Servlet");
}
}
package com.blb.servlet;
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;
@WebServlet("/demo2")
public class DemoServlet2 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.service(req, resp);
System.out.println("hello hahahahaahhahhahaaaahhahhahahaha");
}
}
package com.blb.servlet;
import com.blb.utils.JdbcTemplateUtils;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
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;
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置request编码
req.setCharacterEncoding("UTF8");
//设置response编码
resp.setCharacterEncoding("UTF8");
//设置响应内容类型(告诉浏览器这是一个什么东西,以什么编码)
resp.setContentType("text/html;charset=UTF8");
//1.获取表单提交过来的数据
String name = req.getParameter("name");
String pwd = req.getParameter("pwd");
//2.判断用户名与密码是否正确
JdbcTemplate jdbcTemplate = JdbcTemplateUtils.getJdbcTemplate();
String password = null;
try {
password = jdbcTemplate.queryForObject("select userPassword from user where userName = ?", String.class, name);
} catch (DataAccessException e) {
e.printStackTrace();
}
if (password == null) {
//响应
resp.getWriter().write("用户名不存在");
resp.getWriter().write("user not exsits");
return;
}
if (!pwd.equals(password)) {
resp.getWriter().write("密码错误");
resp.getWriter().write("password error");
return;
}
resp.getWriter().write("登录");
resp.getWriter().write("login");
}
}
package com.blb.utils;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import java.io.IOException;
import java.util.Properties;
public class JdbcTemplateUtils {
private static HikariDataSource hikariDataSource;
private static JdbcTemplate jdbcTemplate;
private static DataSourceTransactionManager transactionManager;
private static DefaultTransactionDefinition transactionDefinition = new DefaultTransactionDefinition();
static {
try {
Properties properties = new Properties();
properties.load(JdbcTemplateUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"));
HikariConfig hikariConfig = new HikariConfig(properties);
hikariDataSource = new HikariDataSource(hikariConfig);
transactionManager = new DataSourceTransactionManager(hikariDataSource);
} catch (IOException e) {
// e.printStackTrace();
System.out.println("配置文件找不到,使用默认配置");
}
}
/**
* 获取JdbcTemplate
*
* @return
*/
public static JdbcTemplate getJdbcTemplate() {
if (jdbcTemplate == null) {
jdbcTemplate = new JdbcTemplate(hikariDataSource);
}
return jdbcTemplate;
}
/**
* 开启事务
*
* @return
*/
public static TransactionStatus beginTransaction() {
return transactionManager.getTransaction(transactionDefinition);
}
/**
* 开启事务
*
* @param transactionDefinition
* @return
*/
public static TransactionStatus beginTransaction(TransactionDefinition transactionDefinition) {
return transactionManager.getTransaction(transactionDefinition);
}
/**
* 提交事务
* @param transactionStatus
*/
public static void commit(TransactionStatus transactionStatus){
transactionManager.commit(transactionStatus);
}
/**
* 回滚事务
* @param transactionStatus
*/
public static void rollback(TransactionStatus transactionStatus){
transactionManager.rollback(transactionStatus);
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="login" method="post">
用户名:<input name="name"><br>
密码:<input name="pwd"><br>
<button>登录</button>
</form>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>宝贝</title>
</head>
<body>
欢迎您,我的宝贝!!!
</body>
</html>
Jar包:
链接:https://pan.baidu.com/s/1j3UIMRyowI5CNnbOZ3y0EQ
提取码:7987
–来自百度网盘超级会员V4的分享

521




被折叠的 条评论
为什么被折叠?



