前言

  • Java Web 其实就是一个技术的总和,把Web看成一个容器而已主要使用JavaEE技术来实现.在加上各种中间件。
  • 整个javaWeb阶段的内容通过实际的案例贯穿学习, 所涉及到的技术知识点会在案例中根据不同的需求引入。
  • 首先了解javaWeb的整个技术体系,掌握常用的技术知识点。

我会将JavaWeb分为8篇左右的文章来记录自己的学习过程,也方便大家逐级递增难度的学习,如有错误或遗漏欢迎大家指出。

注:本篇文章承接上一篇JavaWeb文章JavaWeb--HTTP与Maven

下面我们进入正题!

6、Servlet

6.1、Servlet简介

  • Servlet就是sun公司开发动态web的一门技术
  • sun公司在这些api中提供了一个接口叫Servlet,如果想发开一个Servlet程序,则需要两步
    • 编写一个类实现Servlet接口
    • 把开发号的java类部署到web服务器中

通常我们把实现了Servlet接口的java程序叫做Servlet

6.2、HelloServlet

Servlet接口Sun公司有两个默认的实现类:HttpServlet,GenericServlet



1.构建一个普通的Maven项目,删掉里面的src目录,以后我们的学习就在这个项目里面建立Moudel;这个空的工程就题Maven主工程;

关于Maven父子工程的理解

父项目中会有

  <modules>
<module>servlet-01</module>
</modules>

子项目通常会有(这里如果没有可以手动添加)

<parent>
<artifactId>javaweb-02-servlet</artifactId>
<groupId>com.qjd</groupId>
<version>1.0-SNAPSHOT</version>
</parent>

注:父项目中的java子项目可以直接使用

3.Maven环境优化

​3.1.修改web.xml为最新的

在这里可以把最新的web.xml保存下来,下次直接拿来稍微修改就可以使用

web.xml


<web-app metadata-complete="true" version="4.0"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"> <servlet>
<servlet-name>hello</servlet-name>
<servlet-class></servlet-class>
</servlet> <servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>

​3.2.将Maven的结构搭建(java,resources)

4.编写一个Servlet程序

  • 编写一个普通类

    • 实现Servlet接口,这里我们直接继承HttpServlet
   public class HelloServlet extends HttpServlet {

   //由于get或post只是请求实现的方式不同,可以相互调用,业务逻辑都一样
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("进入了doGet方法"); //ServletOutputStream outputStream = resp.getOutputStream();
PrintWriter writer = resp.getWriter();//响应流
writer.println("Hello,Servlet");
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}

5.编写Servlet的映射

为什么需要映射?

我们写的是Java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要在web服务中注册我们写的Servlet,还需要给它一个浏览器能够访问的路径

<?xml version="1.0" encoding="UTF-8"?>

<web-app metadata-complete="true" version="4.0"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee">
<!--注册Servlet-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.qjd.servlet.HelloServlet</servlet-class>
</servlet>
<!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping> </web-app>

6.配置Tomcat

注意:配置项目发布的路径就可以了

7.启动测试

(1)为部署标记工件

(2)启动Tomcat发现在服务这个模块中显示了我们在HelloServlet中编写的“进入了doGet方法“”

(3)测试结果(注意这里的访问路径不要写错)

6.3、Servlet原理

Servlet是由web服务器调用,web服务器在收到浏览器的请求之后,会执行以下流程:

6.4、Mapping

1.一个Servlet可以指定一个映射路径

    <servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>

2.一个Servlet可以指定多个映射路径

    <servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping> <servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping> <servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello3</url-pattern>
</servlet-mapping>

3.一个Servlet可以指定通用映射路径

    <servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello/*</url-pattern>
</servlet-mapping>
<!--默认请求路径(不会进入index.jsp)-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

4.指定一些后缀或者前缀等

<!--可以自定义后缀实现请求映射(*前面不能加项目映射的路径)-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>*.qjd</url-pattern>
</servlet-mapping>

5.优先级问题

指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求

如下启动Tomcat默认进入ErrorServlet的404,但输入http://localhost:8080/s001/hello可以进入Hello.Servlet而不是404

public class ErrorServlet extends HttpServlet {

    @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
PrintWriter writer = resp.getWriter();
writer.println("<h1>404</h1>"); } @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
<!--注册Servlet-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.qjd.servlet.HelloServlet</servlet-class>
</servlet>
<!--Servlet的请求路径-->
<!--localhost:8080/s001/hello -->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping> <!-- 404-->
<servlet>
<servlet-name>error</servlet-name>
<servlet-class>com.qjd.servlet.ErrorServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>error</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

6.5、ServletContext

web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用

1、共享数据

我们在这个Servlet中保存的数据可以在另一个Servlet中拿到



例子:

  • 放置username的类

    public class HelloServlet extends HttpServlet {
    
        @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // this.getInitParameter() 初始化参数
    // this.getServletConfig() Servlet配置
    // this.getServletContext() Servlet上下文
    ServletContext context = this.getServletContext(); String username = "ikun";//数据
    context.setAttribute("username",username);//将一个数据保存在了ServletContext中,名字为:username,值为username (= "ikun";) }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    doGet(req, resp);
    }
    }
  • 读取username 的类

    public class GetServlet extends HelloServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ServletContext context = this.getServletContext();
    String username =(String) context.getAttribute("username"); resp.setContentType("text/html");
    resp.setCharacterEncoding("utf-8");
    resp.getWriter().println("名字是"+username);
    } @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    super.doGet(req, resp);
    }
    }
  • 配置web.xml

    <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.qjd.servlet.HelloServlet</servlet-class>
    </servlet> <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
    </servlet-mapping> <servlet>
    <servlet-name>getc</servlet-name>
    <servlet-class>com.qjd.servlet.GetServlet</servlet-class>
    </servlet> <servlet-mapping>
    <servlet-name>getc</servlet-name>
    <url-pattern>/getc</url-pattern>
    </servlet-mapping>
  • 测试访问(理解6.5开始的图):

    • 直接访问http://localhost:8080/s002/getc不能显示出名字(名字存在http://localhost:8080/s002/hello中)

    • 先访问http://localhost:8080/s002/hello再访问http://localhost:8080/s002/getc可以得到名字

2、获取初始化参数

  • 在web.xml中配置参数

    <!--    配置一些web应用的初始化信息-->
    <context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8</param-value>
    </context-param>
  • 得到参数

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
        ServletContext context = this.getServletContext();
    String url = context.getInitParameter("url");
    resp.getWriter().println(url);
    }
  • 在web.xml中注册

    <servlet>
    <servlet-name>gp</servlet-name>
    <servlet-class>com.qjd.servlet.ServletDemo03</servlet-class>
    </servlet> <servlet-mapping>
    <servlet-name>gp</servlet-name>
    <url-pattern>/gp</url-pattern>
    </servlet-mapping>

3、请求转发

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("进入了ServletDemo04"); ServletContext context = this.getServletContext();
context.getRequestDispatcher("/gp").forward(req,resp);//转发的请求路径并调用forward实现请求转发 }

4、读取资源文件

Properties

  • 在java目录下新建properties
  • 在resources目录下新建properties

发现都被打包到同一个路径下:classes,我们俗称这个路径为classpath(类路径)

注意:如果这里没有将properties放在resources目录下,可能会导致读取不成功,我们需要在build中配置resources , 来防止我们资源导出失败的问题

<!--    在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>
</resource>
</resources>
</build>

思路:需要一个文件流

  1. db.properties

    username=root
    password=123456
  2. ServletDemo05

    public class ServletDemo05 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("进入了ServletDemo05");
    InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
    Properties prop = new Properties();
    prop.load(is);
    String username = prop.getProperty("username");
    String password = prop.getProperty("password"); resp.getWriter().println(username+":"+password); } @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    super.doGet(req, resp);
    }
    }
  3. web.xml

    <servlet>
    <servlet-name>sd5</servlet-name>
    <servlet-class>com.qjd.servlet.ServletDemo05</servlet-class>
    </servlet> <servlet-mapping>
    <servlet-name>sd5</servlet-name>
    <url-pattern>/sd5</url-pattern>
    </servlet-mapping>
  4. 访问测试

6.6、HttpServletResponse

web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象和一个代表响应的HttpServletResponse对象

  • 如果要获取客户端请求过来的参数:找HttpServletRequest
  • 如果要给客户端响应一些信息:找HttpServletResponse

1、简单分类

负责向浏览器发送数据的方法

ServletOutputStream getOutputStream() throws IOException;

PrintWriter getWriter() throws IOException;

负责向浏览器发送响应头的方法

void setCharacterEncoding(String var1);

void setContentLength(int var1);

void setContentLengthLong(long var1);

void setContentType(String var1);

响应的状态码常量

200:请求响应成功

202:接受

3**:

重定向:重新到我给你的新位置去

400:错误的请求

404:找不到资源

5**:服务器代码错误(502网关错误)

以下具体的状态码了解即可,重点记住以上关于Http重点的状态码

    int SC_CONTINUE = 100;
int SC_SWITCHING_PROTOCOLS = 101;
int SC_OK = 200;
int SC_CREATED = 201;
int SC_ACCEPTED = 202;
int SC_NON_AUTHORITATIVE_INFORMATION = 203;
int SC_NO_CONTENT = 204;
int SC_RESET_CONTENT = 205;
int SC_PARTIAL_CONTENT = 206;
int SC_MULTIPLE_CHOICES = 300;
int SC_MOVED_PERMANENTLY = 301;
int SC_MOVED_TEMPORARILY = 302;
int SC_FOUND = 302;
int SC_SEE_OTHER = 303;
int SC_NOT_MODIFIED = 304;
int SC_USE_PROXY = 305;
int SC_TEMPORARY_REDIRECT = 307;
int SC_BAD_REQUEST = 400;
int SC_UNAUTHORIZED = 401;
int SC_PAYMENT_REQUIRED = 402;
int SC_FORBIDDEN = 403;
int SC_NOT_FOUND = 404;
int SC_METHOD_NOT_ALLOWED = 405;
int SC_NOT_ACCEPTABLE = 406;
int SC_PROXY_AUTHENTICATION_REQUIRED = 407;
int SC_REQUEST_TIMEOUT = 408;
int SC_CONFLICT = 409;
int SC_GONE = 410;
int SC_LENGTH_REQUIRED = 411;
int SC_PRECONDITION_FAILED = 412;
int SC_REQUEST_ENTITY_TOO_LARGE = 413;
int SC_REQUEST_URI_TOO_LONG = 414;
int SC_UNSUPPORTED_MEDIA_TYPE = 415;
int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
int SC_EXPECTATION_FAILED = 417;
int SC_INTERNAL_SERVER_ERROR = 500;
int SC_NOT_IMPLEMENTED = 501;
int SC_BAD_GATEWAY = 502;
int SC_SERVICE_UNAVAILABLE = 503;
int SC_GATEWAY_TIMEOUT = 504;
int SC_HTTP_VERSION_NOT_SUPPORTED = 505;

2、常见应用

1.向浏览器输出消息

(前面的练习就是)

2.下载文件
  • 要获取下载文件的路径

  • 下载的文件名是什么

  • 设置想办法让浏览器能够支持下载我们需要的东西

  • 获取下载文件的输入流

  • 创建缓冲区

  • 获取OutputStream对象

  • 将FileOutputStream写入到buffer缓冲区

  • 使用OutputStream将缓冲区中的数据输出到客户端

代码实现

public class FileServlet extends HttpServlet {

    @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//要获取下载文件的路径
String realPath = "E:\\JavaWeb\\Javaweb\\javaweb-02-servlet\\response\\src\\main\\resources\\3.jpg";
System.out.println("下载文件的路径"+realPath); //下载的文件名是什么
String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1); //设置想办法让浏览器能够支持Content-Disposition下载我们需要的东西,中文命名的文件用
//URLEncoder.encode(fileName,"utf-8")解决乱码问题
resp.setHeader("Content-Disposition","attachment; filename="+ URLEncoder.encode(fileName,"utf-8")); //获取下载文件的输入流
FileInputStream in = new FileInputStream(realPath); //创建缓冲区
int len = 0;
byte[] buffer = new byte[1024]; //获取OutputStream对象
ServletOutputStream out = resp.getOutputStream(); //将FileOutputStream写入到buffer缓冲区
//使用OutputStream将缓冲区中的数据输出到客户端
while ((len = in.read(buffer))>0){
out.write(buffer,0,len);
}
in.close();
out.close(); } @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}

测试访问

3.验证码功能

验证怎么来的?

  • 前端实现

  • 后端实现,需要用到Java的图片类,生成一个图片

    public class ImageServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //如何让浏览器3秒自动刷新一次
    resp.setHeader("refresh","3"); //在内存中创建一个图片
    BufferedImage bufferedImage = new BufferedImage(80,60,BufferedImage.TYPE_INT_RGB); //得到图片
    Graphics2D graphics =(Graphics2D) bufferedImage.getGraphics();//画笔 //设置图片的背景颜色
    graphics.setColor(Color.BLUE);
    graphics.fillRect(0,0,80,60); //给图片写数据
    graphics.setColor(Color.CYAN);
    graphics.setFont(new Font(null,Font.BOLD,20));
    graphics.drawString(makeNum(),0,20); //告诉浏览器这个请求用图片的方式打开
    resp.setContentType("image/jpg"); //网站存在缓存
    resp.setDateHeader("expires",-1);
    resp.setHeader("cache-control","no-cache"); //把图片写给浏览器
    ImageIO.write(bufferedImage,"jpg", resp.getOutputStream()); } //生成随机数
    private String makeNum(){
    Random random = new Random();
    String s = random.nextInt(9999999) + "";
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < 7-s.length() ; i++) {
    sb.append("0");
    }
    String s1 = sb.toString() + s;
    return s;
    } @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    doGet(req, resp);
    }
    }

测试访问:每5秒钟刷新生成随机数(这个页面有点丑,大家请见谅)



4.实现重定向

一个web资源收到客户端请求后,它会通知客户端去访问另一个web资源,这个过程叫做重定向

常见场景:

用户登录

 void sendRedirect(String var1) throws IOException;

测试:

public class RedirectServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//重定向
resp.sendRedirect("/r/img"); }
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}

测试访问

注:网页404时代表代码没有问题,只是路径出错了

jsp测试

  • index.jsp

    <html>
    <body>
    <h2>Hello World!</h2> <%--这里提交的路径需要寻找到项目的路径--%>
    <%--pageContext.request.contextPath代表当前的项目--%>
    <form action="${pageContext.request.contextPath}/login" method="get">
    用户名: <input type="text" name="username"><br> 密码: <input type="password" name="password"><br>
    <input type="submit">
    </form> <%@page contentType="text/html; ISO-8859-1" pageEncoding="UTF-8" %> </body>
    </html>
  • success.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
    <title>Title</title>
    </head>
    <body> <h1>Success</h1> </body>
    </html>
  • RequestTest

    public class RequestTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("进入这个请求了"); //处理请求
    String username = req.getParameter("username");
    String password = req.getParameter("password"); System.out.println(username+":"+password); //重定向时候一定要注意,路径问题,否则404
    resp.sendRedirect("/r/success.jsp"); } @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    doGet(req, resp);
    }
    }

测试访问:

6.7、HttpServletRequest

HttpServletRequest代表客户端的请求,用户通过Http协议访问服务器,Http请求中的所有信息会被封装到HttpServletRequest,

通过这个HttpServletRequest的方法,获得客户端的所有信息



获取参数,请求转发

代码实现

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username"); String password = req.getParameter("password");
String[] hobbies = req.getParameterValues("hobby");
System.out.println("=====================================");
System.out.println(username);
System.out.println(password);
System.out.println(Arrays.toString(hobbies));
System.out.println("====================================="); //通过请求转发
//注意:这里的 / 代表当前的web应用(转发不用写/ 重定向写/)
req.getRequestDispatcher("/success.jsp").forward(req,resp); } @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}

测试访问

思考题:请你聊聊重定向和转发的区别

相同点:页面都会实现跳转

不同点:

  • 请求转发的时候,URL不会发生变化 307
  • 重定向的时候,URL地址栏会发生变化 302

到这里关于Servlet的知识就结束啦≧ω≦,希望对大家有所帮助!

大家觉得文章还可以的话可以点个推荐支持博主啊 (u‿ฺu✿ฺ)

JavaWeb--Servlet详解的更多相关文章

  1. JavaWeb Cookie详解

    代码地址如下:http://www.demodashi.com/demo/12713.html Cookie的由来 首先我们需要介绍一下,在Web开发过程中为什么会引入Cookie.我们知道Http协 ...

  2. Servlet详解

    原文出处:http://blog.csdn.net/q547550831/article/details/50458456 Servlet详解 基本概述 Session在计算机中,尤其是在网络应用中, ...

  3. Java Servlet详解(体系结构+注解配置+生命周期)

    Java Servlet详解(注解配置+生命周期) 什么是Servlet : (Server applet)? 顾名思义:服务端的小程序 Servlet只是一个接口,定义了Java被浏览器访问到(To ...

  4. JavaWeb配置详解(结合框架SpringMVC)

    详解 先说一说常识性的东西,我们的JavaWeb程序运行一开始走的是web.xml文件,这是我们的核心文件,可以说没有web.xml文件我们就无法运行项目,这个文件长什么样子,读者自己新建一个web项 ...

  5. Java Web(一) Servlet详解!!

    这篇文章到上一篇,距离的有点遥远呀,隔了大概有两个月把,中间在家过了个年,哈哈~ 现在重新开始拾起,最近在看一本个人觉得很棒的书,<Java Web 整合开发王者归来>,现在写的这一系列基 ...

  6. (转)Java Web(一) Servlet详解!!

    https://www.cnblogs.com/whgk/p/6399262.html 这篇文章到上一篇,距离的有点遥远呀,隔了大概有两个月把,中间在家过了个年,哈哈~ 现在重新开始拾起,最近在看一本 ...

  7. JavaWeb Session详解

    代码地址如下:http://www.demodashi.com/demo/12756.html 记得把这几点描述好咯:代码实现过程 + 项目文件结构截图 + ## Session的由来 上一篇博文介绍 ...

  8. web开发(一)-Servlet详解

    在网上看见一篇不错的文章,写的详细. 以下内容引用那篇博文.转载于<http://www.cnblogs.com/whgk/p/6399262.html>,在此仅供学习参考之用. 一.什么 ...

  9. JavaWeb笔记一、Servlet 详解

    一.创建一个 Servlet 简单实现类 1.创建一个 HelloServlet 类(测试 Servlet 接口方法) 1 //创建一个 HelloServlet 类并实现 Servlet 接口 2 ...

  10. Mac下Intellij IDea发布JavaWeb项目 详解三 (为所有Module配置Tomcat Deployment 并测试web 网页 配置Servlet)

    step4 为所有项目配置Deployment 4.1 如图 4.2 [+][Artifact] 4.3 将这里列出的所有内容选中后,点[OK] 4.4 选完是这样,表示,这三个java ee 项目会 ...

随机推荐

  1. Blazor和Vue对比学习(基础1.8):Blazor中实现计算属性和数据监听

    1.7章<传递UI片断>,需要做几个案例,这部分暂停消化几天.我们先把基础部分相对简单的最后两章学习了. 计算属性和数据监听是Vue当中的概念,本质上都是监听数据的变化,然后做出响应.两者 ...

  2. linux篇-centos7搭建apache服务器(亲测可用)

    1安装apache yum install httpd httpd-devel -y 2开启服务器 systemctl start httpd.service 3开机自启 systemctl enab ...

  3. 上半年最中意的 GitHub 更新「GitHub 热点速览 v.22.21」

    2022 年的热点速览加入 GitHub 产品动态之后,这次的图片显示是最得我意的,因为可以提升图片查看人的看片体验.而 GitHub 社区方面,GitHub 官方发布了部分开源项目的新版本.与此同时 ...

  4. python之数据类型的内置方法(set、tuple、dict)与简单认识垃圾回收机制

    目录 字典的内置方法 类型转换 字典取值 修改值 计算字典长度 成员运算 删除元素 获取元素 更新字典 快速生成字典 setdefault()方法 元组的内置方法 类型转换 索引与切片操作 统计长度 ...

  5. 关于『HTML5』第一弹

    关于『HTML5』:第一弹 建议缩放90%食用 祝各位国庆节快乐!!1 经过了「过时的 HTML」.「正当时的 Markdown」的双重洗礼后,我下定决心,好好学习HTML5  这回不过时了吧(其实和 ...

  6. XtraBackup 搭建从库的一般步骤及 XtraBackup 8.0 的注意事项

    搭建从库,本质上需要的只是一个一致性备份集及这个备份集对应的位置点信息.之前介绍的几个备份工具(MySQL中如何选择合适的备份策略和备份工具)均可满足. 这里,我们重点看看如何基于 XtraBacku ...

  7. script标签crossorigin属性及同源策略和跨域方法

    首先介绍(同源策略) 同源策略是浏览器最核心且基本的安全约定,要求协议.域名.端口都相同为同源,如果非同源时请求数据浏览器会在控制台抛出跨域异常错误,同源策略是浏览器的行为,即使客户端请求发送了,服务 ...

  8. vue根据后端菜单自动生成路由(动态路由)

    vue根据后端菜单自动生成路由(动态路由) router.js import Vue from 'vue' import Router from 'vue-router' import store f ...

  9. Redis 中的事务分析,Redis 中的事务可以满足ACID属性吗?

    Redis 中的事务 什么是事务 1.原子性(Atomicity) 2.一致性(Consistency) 3.隔离性(Isolation) 4.持久性(Durability) 分析下 Redis 中的 ...

  10. vue-cli在webpack环境下怎样生成开发环境模板(适合初学者)

    1.事先安装好cnpm(淘宝镜像) npm install -g cnpm --registry=https://registry.npm.taobao.org 这是网址,可以自己用命令行工具输入命令 ...