• web开发概述


    学习 web 开发,需要先安装一台 web 服务器,将开发好的 web 项目部署在 web 服务器中供外界访问 .
    Web服务器是指驻留于因特网上某种类型计算机的程序.
    可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览;它是一个容器,是一个连接用户与程序之间的中间件。
    WEB服务器有很多,流行的WEB服务器有Tomcat 、 WebSphere 、WebLogic、Jboss等。
    创建一个java项目,然后进行添加框架

    点击项目右键,选择第二个添加依赖 ,选择如下图

    将Tomcat集成到项目中

    1.将工具栏设置显示

    2.点击长方形框

     进行命名

     选择到配置Tomcat的根目录

     

    之后可自行设置端口,在进行项目的部署

    最下面便是访问的地址,名字自己取,然后点击应用

     通过配置的地址进行访问后端

     设置后,代码如果修改会自动更新过去

    Servlet 概述
    Servlet是Server Applet的简称,意思为用Java编写的服务器端的程序.它运行在web服务器中,web服务器负责Servlet和客户的通信以及调 用Servlet方法。
    Servlet的作用:
    1.接收用户发送的请求数据
    2.调用其他的java程序来处理请求
    3.根据处理结果,将结果响应给客户端

    Servlet 创建和使用
    1.创建一个类继承javax.servlet.http包下的HttpServlet
    2.在web.xml文件中配置Servlet
    3.运行Servlet程序通过浏览器访问 http:localhost:8080/ 项目名 / 配置的 url
    由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被 外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文 件中使用元素和
    元素完成。

    使用细节

    元素用于注册Servlet,它包含有两个主要的子元素:
    ,分别用于设置Servlet的注册名称和
    Servlet的完整类名。
    一个元素用于映射一个已注册的Servlet的一个对外访问路
    径,它包含有两个子元素:,分别用于指定
    Servlet的注册名称和Servlet的对外访问路径。
    url-pattern配置模式:”/”代表当前web应用的根目录
    精确匹配 例如/test 访问http://127.0.0.1/项目名/test
    myServlet
    /test
    1. <servlet>
    2. <servlet-name>loginservlet-name>
    3. <servlet-class>com.ffyc.webback.servlet.LoginServletservlet-class>
    4. <load-on-startup>1load-on-startup>
    5. servlet>
    6. <servlet-mapping>
    7. <servlet-name>loginservlet-name>
    8. <url-pattern>/loginurl-pattern>
    9. servlet-mapping>
    创建发布 web 项目 - web.xml 文件
    Web.xml文件为web应用的配置文件,它必须放在web应用目录WEB-INF目录下。
    Web.xml文件用于对web应用下的web资源进行配置,服务器在启动时会读取web.xml文件中的内容。
    Servlet 生命周期
    1. import javax.servlet.ServletException;
    2. import javax.servlet.http.HttpServlet;
    3. import javax.servlet.http.HttpServletRequest;
    4. import javax.servlet.http.HttpServletResponse;
    5. import java.io.IOException;
    6. /*
    7. 后端用来处理登录请求的servlet
    8. 1.继承HttpServlet
    9. 2.重写方法
    10. Servlet接口,是javaWeb最顶级接口,定义servlet中的方法
    11. abstract GenericServlet implements Servlet
    12. destroy();
    13. init();
    14. abstract class HttpServlet extends GenericServlet
    15. service();
    16. LoginServlet extends HttpServlet 也就遵循servlet规范,请求到服务器时.服务器也要遵照servlet规范调用对应的方法
    17. */
    18. public class LoginServlet_back extends HttpServlet {
    19. /*
    20. 创建阶段
    21. serlvet对象不由我们创建,是由服务器创建的,创建有两种情况:
    22. 1.默认的,在第一访问对应的servlet时创建.
    23. 2.1 >=0 就会在服务器启动时将servlet创建并初始化.
    24. 服务器为每个servlet只创建一个对象(单例的),
    25. */
    26. public LoginServlet(){
    27. System.out.println("LoginServlet无参构造方法");
    28. }
    29. /*
    30. 初始化阶段:
    31. 在servlet创建成功后,执行完构造方法后,会立即调用init(),来实现一些初始化操作(只执行一次)
    32. */
    33. @Override
    34. public void init(ServletConfig config) throws ServletException {
    35. System.out.println(config.getServletName());
    36. System.out.println("init"+config);
    37. }
    38. /*
    39. 服务阶段:
    40. 对象创建,初始化完成后,一旦有客户端请求,就会执行service(),提供服务.
    41. HttpServletRequest req,(表示请求)
    42. HttpServletResponse resp(表示响应)
    43. */
    44. @Override
    45. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    46. System.out.println("service");
    47. System.out.println("service"+req);
    48. System.out.println("service"+resp);
    49. }
    50. /*
    51. 销毁阶段: 当服务器关闭,servlet在真正的销毁之前,服务器会调用destroy(),掉用的是已经生成的servlet对象的destory()方法执行一些最终的操作
    52. 例如打印日志,例如将内存数据保存到硬盘
    53. */
    54. @Override
    55. public void destroy() {
    56. System.out.println("destroy");
    57. }
    58. }

    HttpServlet类中具有servic方法和doGet和post方法,系统会自动调用service方法,在service方法中会自动识别前端发来的请求,可以通过请求的类型去判断请求的方式,掉用doGet或者Post方法,我们需要在继承HttpServlet类的子类中去重写我们需要的doGet方法或者Post方法
    1. @WebServlet("/lg") //通过该标签可以快速配置该类的访问地址,不用再去web.xml中进行配置
    2. public class LoginServlet_2 extends HttpServlet {
    3. /*
    4. 处理doGet方式请求
    5. */
    6. @Override
    7. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    8. System.out.println("doGet");
    9. System.out.println(req.getParameter("name"));
    10. System.out.println(req.getParameter("age"));
    11. }
    12. /*
    13. 处理post方式请求
    14. */
    15. @Override
    16. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    17. System.out.println("doPost");
    18. req.setCharacterEncoding("UTF-8");
    19. String account = req.getParameter("account");
    20. String password = req.getParameter("password");
    21. System.out.println(account);
    22. System.out.println(password);
    23. System.out.println(req.getParameter("xb"));
    24. System.out.println(Arrays.toString( req.getParameterValues("ck")));//在接收多选框的时候使用getParameterValues
    25. //响应
    26. resp.setContentType("text/html;charset=utf-8");
    27. PrintWriter printWriter = resp.getWriter();
    28. printWriter.print("

      登录成功

      "
      );
    29. //printWriter.print("账号或密码错误");
    30. }
    31. }

     在doPost方法中文容易出现乱码:

    1.防止在使用请求时出现乱码,在使用请求前先进行处理

     req.setCharacterEncoding("UTF-8");
    2.防止在响应时出现乱码,在响应前进行处理
    resp.setContentType("text/html;charset=utf-8");
    http 协议
    什么是HTTP?
    超文本传输协议 (HyperText Transfer Protocol)服务器传输超文本到本地浏览器的传送协议,互联网上应用最为流行的一种网络协议,用于 定义客户端浏览器和服务器之间交换数据的过程。
    HTTP是一个基于TCP/IP通信协议来传递数据.
    HTTP是一个属于应用层的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统

     

    http 请求
    http请求?
    客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个http请求。
    请求包括:请求行,请求头,请求体 .
    请求行 包含http请求方式,请求资源名称,http版本 .
    请求头 包含主机地址,以及客户端的一些环境信息,以键值对的形式传递.
    Host: 127.0.0.1:8088 请求的主机地址
    Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    浏览器能够处理的内容类型
    Accept-Encoding: gzip, deflate, br 浏览器能够处理的压缩编码
    Accept-Language: zh-CN,zh;q=0.9 浏览器当前设置的语言
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, likeGecko) Chrome/69.0.3497.100 Safari/537.36 使用的浏览器和操作平台信息
    Connection: keep-alive 浏览器与服务器之间连接的类型
    请求体 代表着浏览器在post请求方式中传递给服务器的参数,请求体中参数以键值形式传递, 多个用&链接,服务器接收到后再解析.
    username=admin&userpwd=123 http 请求
    GET方式:
    超链接访问,默认是GET方式
    form提交,不指定method,默认为GET方式
    POST方式:
    form提交,指定method=“POST”
    Get方式与post方式的区别
    Get方式主要是从服务器获取信息;post主要是想服务器提交信息
    Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据 放置在请求体中提交。
    GET方式提交的数据大小受限制一般1kb(不同浏览器也会有不同);而 POST则没有此限制。
    请求和响应是Web交互最基本的模式,在Servlet中,用HttpServletRequest来表示请求。
    HttpServletRequest :封装了请求的信息,可以从中获取任何请求信息。
    getParameter(name) --- String 通过name获得值
    getParameterValues --- String[ ] 通过name获得多值

    前端可以接收后端通过添加gson.jar包,将后端数据转换成json格式的字符串供后端进行接收处理

    核心代码如下:

    1. Gson gson=new Gson(); //创建转换类
    2. String ad=gson.toJson(admin); //通过该方法可以将对象转换为json的字符串
    3. printWriter.println(ad); //传入前端

    在前端有两种接收后端返回值后存储数据的方法:

    1. window.localStorage//本地存储,在浏览器中存储,浏览器关闭也还存在
    2. Window.sessionStorage //会话键存储,浏览器关闭会话结束,数据清除

    使用第二种方法进行使用

    1. window.sessionStorage.setItem("admin",resp.data.name); //存入需要使用的数据
    2. var ac=window.sessionStorage.getItem("admin"); //通过键名存储时接收到存储在Window对象中的数据
    3. window.sessionStorage.clear(); //清除存储的用户数据

    在前端进行页面跳转的时候需要进行判断是否是满足条件的跳转有两种方式

    1.在前端进行设置路由跳转设置

    this.$router.push("/main");//进行路由跳转,跳转到指定的路由界面
    1. //路由导航守护 一旦发生路由跳转就会执行该函数 to到哪里去 from是从哪里来 next放行
    2. rout.beforeEach((to,from,next)=>{
    3. if(to.path=='/login'){
    4. //如果用户访问的登录页,直接放行
    5. return next(); }
    6. else{
    7. var token = window.sessionStorage.getItem("admin");
    8. if(token==null){ //为空表示没有登录 返回到登录界面
    9. return next("/login");
    10. }else{
    11. next();
    12. }
    13. }
    14. })
    web 会话跟踪机制
    从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。
    会话( Session )跟踪是 Web 程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是 Cookie Session Cookie 通过在客户端记录信息确定用户身份, Session 通过在服务器端记录信息确定用户身份。
    由于 HTTP 是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通 行证。这样服务器就能从通行证上确认客户身份了。
    ● Session 是另一种记录客户状态的机制 , 它在用户第一次打开浏览器连接到后端服务器时 , 由服务器创建产生 , 生成一个 id , 作为会话标识 .
    服务器通过 Cookie 将生成的会话 id 响应到浏览器中 , 之后每次请求将浏览器端的会话id 向服务器端
    提交 , 服务器就可以得知是哪个客户端发起的请求 .

    session

    Servlet API中,定义了HttpSession接口,用来封装会话对象。
    HttpSession是接口,会话对象是Web容器创建的,在Servlet中使用HttpServletRequest中的方法获得会话对象。
    public HttpSession getSession():获取跟当前请求相关的session,如果不存在session,就创建一个新的session对象返回。

     

    1.浏览器第一次向后端只提交数据。没有会话id

    2.浏览器就id号返回

    3.之后浏览器的请求都含有id号

     

     在main.js中设置

     

     

    过滤器
    Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Servlet, 从而实现一些 特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信 息等一些高级功能。
    作用:对服务器web资源进行拦截(权限控制,通过拦截资源进行权限控制,是否可以访问)
    Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人 员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截.
    1. import javax.servlet.*;
    2. import javax.servlet.annotation.WebFilter;
    3. import javax.servlet.http.HttpServletRequest;
    4. import javax.servlet.http.HttpServletResponse;
    5. import java.io.IOException;
    6. @WebFilter(urlPatterns = "/*")
    7. public class CorsFilter implements Filter {
    8. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
    9. throws IOException, ServletException {
    10. HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
    11. HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
    12. System.out.println("跨域过滤器");
    13. //允许携带Cookie时不能设置为* 否则前端报错
    14. httpResponse.setHeader("Access-Control-Allow-Origin", httpRequest.getHeader("origin"));//允许所有请求跨域
    15. // 在使用时将origin替换成信任的IP
    16. httpResponse.setHeader("Access-Control-Allow-Methods", "*");//允许跨域的请求方法GET, POST, HEAD 等
    17. httpResponse.setHeader("Access-Control-Allow-Headers", "*");//允许跨域的请求头
    18. httpResponse.setHeader("Access-Control-Allow-Credentials", "true");//是否携带cookie
    19. filterChain.doFilter(servletRequest, servletResponse);
    20. }
    21. }
    1. import javax.servlet.*;
    2. import java.io.IOException;
    3. public class EncodFilter implements Filter {
    4. @Override
    5. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    6. System.out.println("编码过滤器");
    7. servletRequest.setCharacterEncoding("utf-8");
    8. servletResponse.setCharacterEncoding("utf-8");
    9. filterChain.doFilter(servletRequest,servletResponse);//向下执行
    10. }
    11. }
    1. import com.ffyc.webback.model.Admin;
    2. import javax.servlet.*;
    3. import javax.servlet.http.HttpServletRequest;
    4. import javax.servlet.http.HttpSession;
    5. import java.io.IOException;
    6. import java.io.PrintWriter;
    7. public class IsLoginFilter implements Filter {
    8. @Override
    9. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    10. HttpServletRequest request=(HttpServletRequest)servletRequest;
    11. HttpSession session=request.getSession();
    12. System.out.println("登录权限");
    13. Admin admin=(Admin) session.getAttribute("admin");
    14. if(admin==null){ //后端验证失败
    15. PrintWriter printWriter=servletResponse.getWriter();
    16. printWriter.print(201); //告诉后端验证失败
    17. }else{
    18. filterChain.doFilter(servletRequest,servletResponse);//向下执行
    19. }
    20. }
    21. }

    在web.xml中配置上述三个过滤器

    1. corsFilter
    2. com.ffyc.webback.filter.CorsFilter
    3. corsFilter
    4. /*
    5. encodFilter
    6. com.ffyc.webback.filter.EncodFilter
    7. encodFilter
    8. /*
    9. isLoginFilter
    10. com.ffyc.webback.filter.IsLoginFilter
    11. isLoginFilter
    12. /back/*

  • 相关阅读:
    量化交易学习笔记(2) 优化突破策略
    [论文笔记]Sentence-BERT[v2]
    【OpenCV实现图像:OpenCV利用Python创作热力图】
    SpringBoot+Mybaits搭建通用管理系统实例四:业务逻辑Service层功能实现
    抽奖小程序源码:多功能萝卜抽奖系统微信小程序抽奖功能源码【更新】
    c++代码区域折叠
    hadoop MapReduce运营商案例关于用户基站停留数据统计
    哈希表的原理
    Redis--list列表
    小谈设计模式(3)—策略模式
  • 原文地址:https://blog.csdn.net/weixin_57197500/article/details/126247489