开发
老规矩上链接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”%>