文章目录
- 一、概念
- 二、Idea搭建javaWeb项目
- 三、Servlet的生命周期
- 四、请求重定向
- 五、请求转发
- 六、jsp基本使用
- 七、JSTL标签库
- 八、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类!");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("客户端发起了Post请求!");}@Overrideprotected 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标签库
- 引入标签库
- 下载标签库地址
- mvnrespository.com
- 下载标签库地址
- 在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
- pom.XML
- 在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*/@Overridepublic void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);}/*** servlet 请求过滤* @param servletRequest* @param servletResponse* @param filterChain* @throws IOException* @throws ServletException*/@Overridepublic 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); }/*** 销毁*/@Overridepublic void destroy() {Filter.super.destroy();}}