开发

老规矩上链接https://boogipop.com/图都是这里的,语言也很精简

nginx

正向代理

通过中间人牵线搭桥

image-20230916171437179

反向代理

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

image-20230916171626433

客户端对代理无感知,客户端不需要任何配置就可以访问,只需要将请求发送到反向代理服务器去选择目标服务器的数据,然后返还给客户端

Boogipop的例子,反向代理服务器就是服务员,服务端就是厨师,你要什么服务员就给你拿什么

挺生动的

负载均衡

基本的请求与响应

image-20230916172125171

并发数越来越高,用这样的系统可能会导致服务器瘫痪

所以可以使用代理服务器分配到不同的服务端,实现负载均衡

image-20230916172136692

动静分离

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

image-20230916172431286

环境配置

javaweb

配置tomcat

tomcat +http

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

image-20230916201811624

image-20230916201829256

image-20230916201910077

设置你访问的路径,假如你设置为/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

image-20230916215920852

修改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 >

image-20230916220315151

红色框这些都是需要自己创建的,java记得把他变蓝

然后可以创建程序,给了个默认接口HttpServlet

image-20230916220630784

我们选择重写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包)

image-20230916221136554

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

image-20230916221255984

image-20230916215650016

servlet原理

public void service(ServletRequest req, ServletResponse resp) 
//req请求,resp响应

image-20230916223636244

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);
    }

image-20230916225723367

image-20230916225745267

image-20230916225752556

能获取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);

image-20230916230454868

实现跳转

//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”%>


开发
https://zer0peach.github.io/2023/09/16/开发/
作者
Zer0peach
发布于
2023年9月16日
许可协议