开发
老规矩上链接https://boogipop.com/图都是这里的,语言也很精简
nginx
正向代理
通过中间人牵线搭桥

反向代理
给服务器配置代理服务器,客户端不知道服务端的真实ip

客户端对代理无感知,客户端不需要任何配置就可以访问,只需要将请求发送到反向代理服务器去选择目标服务器的数据,然后返还给客户端
Boogipop的例子,反向代理服务器就是服务员,服务端就是厨师,你要什么服务员就给你拿什么
挺生动的
负载均衡
基本的请求与响应

并发数越来越高,用这样的系统可能会导致服务器瘫痪
所以可以使用代理服务器分配到不同的服务端,实现负载均衡

动静分离
仍然是代理服务器,根据发送的请求,分配到对应的服务器

环境配置
javaweb
配置tomcat
tomcat +http
maven配置不说了(之前搞了很久才会,早知道早看大佬文章了)



设置你访问的路径,假如你设置为/kino那访问的时候就加一个URL/kino这个过程叫做虚拟映射,也就是路由吧
pom文件
pom.xml是maven的核心配置文件,在这里添加依赖
maven由于约定大于配置,之后可能遇到我们写的配置文件,无法被导出或者生效的问题,解决方案是在pom.xml下的bulid节点添加以下内容:
 <!--在build中配置resources,来防止我们资源导出失败的问题-->
<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>servlet在pom.xml中设置路由
Hello servlet
servlet就是sun公司开发动态页面所用的东西
sun公司在这些API中实现了一种接口叫做:Servlet,如果你想要开发一个Servlet程序,只需要完成2个小步骤
- 编写一个类,实现Servlet接口
- 把开发好的java类部署到web服务器中
把实现了Servlet接口的java程序,叫做Servlet
先创建一个普通的maven,然后把src目录删掉
在pom.xml中加入
<dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
  </dependency>
  <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
  <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.3</version>
  </dependency>接着创建一个新Module,类型为webapp

修改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"
         metadata-complete="true">
</web-app >
红色框这些都是需要自己创建的,java记得把他变蓝
然后可以创建程序,给了个默认接口HttpServlet

我们选择重写GET和POST方法
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();
        writer.print("hello servlet");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    }
}写完后要有关键一步,注册servlet
在web.xml中注册并设置路由
//两个servlet-name名字相同即可
<servlet>
    <servlet-name>hello</servlet-name>   
    <servlet-class>com.zero.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/index</url-pattern>   //路由
</servlet-mapping>然后要配置tomcat,跟上面一样(记得war包)

我们在web.xml中设置的路由是建立在Application context的路由基础上的


servlet原理
public void service(ServletRequest req, ServletResponse resp) 
//req请求,resp响应
Mapping
路由能使用通配符,但通配符的优先级更低,所以访问/index仍然是HelloServlet的内容
<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.zero.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/index</url-pattern>
</servlet-mapping>
<servlet>
    <servlet-name>error</servlet-name>
    <servlet-class>com.zero.servlet.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>error</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>ServletContext对象
共享数据
//
	@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        servletContext.setAttribute("user","zeropeach");
        resp.getWriter().println("i am in 1231231");
   }//    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        Object user = servletContext.getAttribute("user");
        resp.getWriter().println("you are "+user);
    }


能获取web.xml设置的初始值
<context-param>
    <param-name>cmd</param-name>
    <param-value>heiheiehi</param-value>
</context-param>ServletContext servletContext = this.getServletContext();
String cmd = servletContext.getInitParameter("cmd");
resp.getWriter().println(cmd);
实现跳转
//index.jsp
<html>
<head>
    <title>跳转</title>
</head>
<body>
<%@page pageEncoding="utf-8" %>
<form action="${pageContext.request.contextPath}/index" method="post">
    用户<input type="text" name="username"><br>
    密码<input type="text" name="password"><br>
    <input type="submit">
</form>
</body>
</html>@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String username = req.getParameter("username");
    String password = req.getParameter("password");
    if (username.equals("admin")&&password.equals("admin")){
        System.out.println("成功");
        resp.sendRedirect("/s1/success.jsp");
    }
}<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.zero.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/index</url-pattern>
</servlet-mapping>这里post请求对应doPost方法
jsp
<%= 变量或表达式%> <%=new java.util.Date()%>
<%
int sum=0;
for(int i=0;i<=100;i++){
    sum+=i;
}
    out.println("<h1>sum="+sum+"</h1>");
%><%
    int i =10;
%>
<%
    out.println(i);
%><%--在代码嵌入HTML--%> 
<%    for(int i=0;i<5;i++){ %>    
<h1>hello world <%=i%></h1> 
<%    } %><%!%>声明方法和变量
<% page errorPage=”路径”%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>FILTER
Listener
SpringMVC
什么是MVC架构?MVC是Model、View、Controller
Model : 数据以及信息,相当于数据库
View : 前端页面
Controller : 根据用户从视图层输入的指令,选取数据层中的数据,然后进行对应的操作
EL表达式
语法:${…}
调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应的对象,找不到返回””(空字符串)
pageContext中最重要的方法:findAttribute方法,
使用pageContext.findAttribute方法能从
四个域(page, request, session, context)中寻找存储的数据,查找的顺序也是从小到大(page—>request—>session—>context),
只要在某个域中能查到相对应的键值对,就返回,
如果四个域都没有则返回null。
这个方式对于EL表达式是最重要的,
例如JSP页面中有一个EL表达式: ${data}
最终在Servlet中就会被翻译成 pageContext.findAttribute(“data”)。
查找的顺序从小到大(page—>request—>session—>context)
pageContext.setAttribute("name","asd")
request.setAttribute("name","asd")
session.setAttribute("name","asd")
application.setAttribute("name","asd")<%=pageContext.getAttribute("name")%>
<%=pageContext.getRequest().getAttribute("name")%>
<%=pageContext.getSession().getAttribute("name")%>
<%=pageContext.getServletContext.getAttribute("name")%>注意事项
<%@ page isELIgnored=”false”%>