java-servlet

文章目录

一、概念

  • 定义
    • 运行在服务端的Java应用程序。
  • 作用
    • 处理客户端发送的请求及响应处理的结果。

二、Idea搭建javaWeb项目

  • javaWeb项目

  • 新建一个servlet类

            /*
          * Copyright (C) Mr.Fu Corp.
          * All Right Reserved.
          */
         package com.example.comjavaweb;
         
         import jakarta.servlet.Servlet;
         import jakarta.servlet.ServletException;
         import jakarta.servlet.http.HttpServlet;
         import jakarta.servlet.http.HttpServletRequest;
         import jakarta.servlet.http.HttpServletResponse;
         
         import java.io.IOException;
         
         /**
          * @author FuShr.2023--5-23
          * @verdion V1.0
          */
         public class DemoServlet extends HttpServlet {
             public DemoServlet()
             {
                 System.out.println("DemoServlet类!");
             }
             @Override
             protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                 System.out.println("客户端发起了Post请求!");
             }
         
             @Override
             protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                 System.out.println("客户端发起了Get请求!");
             }
         } 
    
  • 在web.xml文件中创建映射

            <?xml version="1.0" encoding="UTF-8"?>
         <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
                  version="5.0">
             <!--配置Servlet类-->
             <servlet>
                 <servlet-name>DemoServlet</servlet-name>
                 <servlet-class>com.example.comjavaweb.DemoServlet</servlet-class>
             </servlet>
         
             <!--配置Servlet类映射-->
             <servlet-mapping>
                 <servlet-name>DemoServlet</servlet-name>
                 <url-pattern>/demo</url-pattern>
             </servlet-mapping>
         </web-app>
    
  • html增加代码

        <form action="demo" method = "get">
           <input type="submit" value="get请求">
        </form> 
    
  • 使用注解的方式映射

     @WebServlet(name = "helloServlet", urlPatterns = "/hello-servlet")
     # name:servlet 名称
     # urlPatterns:servlet 路径
    

三、Servlet的生命周期

  • 生命周期
    • 实例化--初始化[init]--调用分发请求service-- destroy[销毁]

四、请求重定向

  • 概念
    • 地址栏请求,超链接;重定向之后地址栏内容发生变化。
      • 代码如下

        resp.sendRedirect("index.jsp?txt_name="+txt_name+"&txt_pwd="+txt_pwd);

五、请求转发

  • 从请求到结束只能发生一次请求,请求过程中地址栏不发生变化。
    • 代码如下

      //设置参数
       req.setAttribute("txt_name",txt_name);
       req.setAttribute("txt_pwd",txt_pwd); 
       //请求转发
       req.getRequestDispatcher("index.jsp").forward(req,resp);
      

六、jsp基本使用

  • JSP实质就一个servlet文件。(jsp->转译java文件)->在编译成.class文件->执行.class文件.
  • jsp的基本结构
    • 代码如下

          <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> 页面指令
          <!DOCTYPE html>
          <html>
          <head>
              <title>HOME</title>
          </head>
          <body>
          
          </body>
          </html>
          <%%> --java的小脚本,在这里就和在方法里面编写的代码一样
          <%! %>声明,能够在这个里面定义方法
          <%= %> 表达式
      
      • 使用前提

        • 必须有依赖jsp-api.jar
      • 示例代码

          <%@ page import="java.util.Date" %>
          <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
          <%! public String  getTime(){
              return new Date().toLocaleString();
          } %>
          <!DOCTYPE html>
          <html>
          <head>
              <title>HOME</title>
          </head>
          <body>
          <!--显示登录的账号和密码-->
          <h1>HOME 页面</h1>
          <p>
             用户名:<%= request.getAttribute("txt_name")%>
          </p>
          <p>
              密码:<%= request.getAttribute("txt_pwd")%>
          </p>
          </body>
          </html>
        

七、JSTL标签库

  • 引入标签库
  • 在jsp页面引入标签库
    • pom.XML

        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>jakarta.servlet.jsp.jstl</artifactId>
            <version>2.0.0</version>
        </dependency>
      
        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-spec</artifactId>
            <version>1.2.5</version>
        </dependency>
      
        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-impl</artifactId>
            <version>1.2.5</version>
        </dependency>
      
      • 注意:对应tomcat的版本为:10.1.16 jdk版本:JDK 21
  • 在jsp页面使用标签库
    • 示例代码

          //引入jstl标签库
          <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
          <table>
            <c:forEach begin="1" end="10" step="1" var="i" >
            <tr>
            <td>${i}</td>
            </tr>
            </c:forEach>
          </table> 
       </html>
      

八、Servlet 过滤器

  • 基本语法

      # 继承Filter 接口,并实现函数
          package Filter;
    
          import jakarta.servlet.*;
          import jakarta.servlet.annotation.WebFilter; 
          import java.io.IOException;
        
          @WebFilter(filterName = "HelloServletFilter",urlPatterns = "/*")
          public class HelloServletFilter implements Filter {
              /**
               * 过滤器初始化
               * @param filterConfig
               * @throws ServletException
               */
              @Override
              public void init(FilterConfig filterConfig) throws ServletException {
                  Filter.super.init(filterConfig);
              }
          
              /**
               *  servlet 请求过滤
               * @param servletRequest
               * @param servletResponse
               * @param filterChain
               * @throws IOException
               * @throws ServletException
               */
              @Override
              public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
                  //将servletRequest,servletResponse 对象强转成为Http的请求和响应对象
                  HttpServletRequest httpServletRequest =  (HttpServletRequest)servletRequest;
                  HttpServletResponse httpServletResponse = (HttpServletResponse)servletResponse;
                  //获取请求路径和ip地址、主机名 端口
                  System.out.println(httpServletRequest.getRemoteAddr());
                  System.out.println(httpServletRequest.getRequestURI());
                  System.out.println(httpServletRequest.getRemotePort());
                  System.out.println(httpServletRequest.getRemoteHost());
                  //设置编码格式
                  httpServletRequest.setCharacterEncoding("UTF-8");
                  httpServletResponse.setContentType("text/html;charset=UTF-8");  
                  //转发给下一个过滤器或者对应的servlet 响应请求
                  filterChain.doFilter(httpServletRequest,httpServletResponse); 
              }
          
              /**
               * 销毁
               */
              @Override
              public void destroy() {
                  Filter.super.destroy();
              }
          }
    
相关推荐
码农小苏245 分钟前
2024年记 | 凛冬将至
开发语言
努力进修20 分钟前
【Java-数据结构】Java 链表面试题下 “最后一公里”:解决复杂链表问题的致胜法宝
java
小蒜学长36 分钟前
校园网上店铺的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·美食
xiao--xin42 分钟前
LeetCode100之子集(78)--Java
java·算法·leetcode·回溯
我惠依旧1 小时前
安卓程序作为web服务端的技术实现(二):Room 实现数据存储
android·java·开发语言
你爱写程序吗(新H)1 小时前
基于微信小程序游泳馆管理系统 游泳馆管理系统小程序 (设计与实现)
java·spring boot·微信小程序·小程序
LNsupermali1 小时前
二叉树的最大深度(遍历思想+分解思想)
java·数据结构
上海迪士尼351 小时前
parametric_vector = linspace(0, 1, num_points);详细解释
开发语言·算法·matlab
码农小灰1 小时前
Spring MVC中HandlerInterceptor的作用及应用场景
java·spring boot·后端·spring·mvc
爱是小小的癌2 小时前
Java-数据结构-二叉树习题(3)
java·数据结构·算法