1、C/S架构和B/S架构
1.1 C/S架构和B/S架构
C/S和B/S是软件发展过程中出现的两种软件架构方式。
1.2 C/S架构(Client/Server 客户端/服务器)
- 特点:必须在客户端安装特定软件
- 优点:图形效果显示较好(如:3D游戏)
- 缺点:服务器的软件和功能进行升级,客户端也必须升级、不利于维护
- 常见的C/S程序:QQ、微信等
1.3 B/S架构(Browser/Server 浏览器/服务器)
- 特点:无需安装客户端,任何浏览器都可直接访问
- 优点:涉及到功能的升级,只需要升级服务器端
- 缺点:图形显示效果不如C/S架构
- 需要通过HTTP协议访问
2、Tomcat部署和相关配置
2.1 tomcat安装配置
2.1.1 下载
本次使用的是:Tomcat8.5.30 解压缩版本
下载地址:http://tomcat.apache.org/
2.1.2 解压安装
将下载的tomcat压缩包解压即可安装完毕
- 文件路径不可以存在中文和特殊符号
- 不建议将服务器文件夹放在层次很多的文件目录下
2.1.3 配置tomcat
1、修改catalina.bat文件
- 依次进入apache-tomcat-8.5.30/bin目录下,找到catalina.bat文件
修改如下图所示的属性,JAVA_HOME为jdk所在的文件目录;JRE_HOME为jre坐在的文件目录。
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_241\bin
set JRE_HOME=C:\Program Files\Java\jdk1.8.0_241\jre
2、配置环境变量
- 新建:
- CATALINA_BASE:tomcat的路径
- CATALINA_HOME:tomcat的路径
- 编辑:
- path:%CATALINA_BASE%\bin;%CATALINA_HOME%\bin ;
3、idea配置tomcat
- Run – Edit Configur… – “+” – Tomcat Service --local – 配置 – 配置Server和Deployment Deployment – “+” – Artifact --添加项目名
URL:服务器启动后,项目部署结束,会自动打开浏览器并访问初始地址Deployment:配置需要启动的项目
3、Servlet
3.1 Servlet作用
- 接收客户端请求,完成操作。
- 动态生成网页(页面数据可变)。
- 将包含操作结果的动态网页响应给客户端
3.2 编写Servlet
- 继承HttpServlet
- 重写init()、doGet()、doPost()、destroy()以及最重要的**service()**方法
- 在核心的service()方法中获取来自前端的账号和密码输入框内容并在控制台输出,同时响应客户端,将获取到的账号密码内容覆盖原页面
package servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Author wzy
* @Date 0025 2020-12-25 11:55
* @Version 1.0
*/
public class RegisterServlet extends HttpServlet {
public RegisterServlet() {
System.out.println("无参构造方法");
}
@Override
public void init() throws ServletException {
System.out.println("初始化方法");
}
/* @Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决post请求的乱码
// request.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
//解决响应乱码的问题
response.setContentType("text/html;charset=utf-8");
//获取前端发送的请求数据
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("registerServlet--username:"+username);
System.out.println("registerServlet--password:"+password);
System.out.println(username+":"+password);d
System.out.println();
//响应客户端 -- 覆盖原页面
response.getWriter().write(username+":"+password);
}*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
//解决请求中文乱码情况
req.setCharacterEncoding("utf-8");
//解决响应中文乱码情况
resp.setContentType("text/html;charset=utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println("username:"+username);
System.out.println("password:"+password);
resp.getWriter().write("千山鸟飞绝,万径人踪灭");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost");
//解决请求中文乱码情况
req.setCharacterEncoding("utf-8");
//解决响应中文乱码情况
resp.setContentType("text/html;charset=utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println("username:"+username);
System.out.println("password:"+password);
}
@Override
public void destroy() {
System.out.println("销毁方法");
}
}
3.3 配置Servlet
在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>servlet</servlet-name> <!--项目名称-->
<servlet-class>servlet.RegisterServlet</servlet-class> <!--项目相对路径-->
</servlet>
<servlet-mapping>
<servlet-name>servlet</servlet-name> <!--与项目名称一致-->
<url-pattern>/RegisterServlet</url-pattern> <!--servlet类名称,注意前边的斜杠(/)-->
</servlet-mapping>
</web-app>
3.4 运行测试
注意:
- Servlet的生命周期
- Servlet 是多任务单例模式
- 客户端发送请求到达服务器,服务器会根据请求到达对应的项目的 web.xml 配置文件,
根据配置信息找到对应的 Servlet 类,如果是初次发送请求,会先执行构造方法,再执行init() ,再根据提交方式执行 doGet() 或者是 doPost() ,Servlet销毁的时候会执行 destroy()。如故不是初次发送请求,会直接根据提交方式执行 doGet() 或者是 doPost() ,Servlet销毁的时候再执行 destroy()。
- request:请求,客户端发送数据给服务器
- response:响应,服务器发送数据给客户端
- 表单提交方式
- 根据 form 表单的 method 属性决定提交方式
- get:数据会展示在 url 地址上
- post:数据是通过请求头携带
- 解决乱码问题
- post请求乱码问题:request.setCharacterEncoding(“utf-8”);
- 解决响应乱码问题:response.setContentType(“text/html;charset=utf-8”);
运行截图: