java-servlet
2023-12-13 08:43:26
一、概念
- 定义
- 运行在服务端的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标签库
- 引入标签库
- 下载标签库地址
- 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 */ @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(); } }
文章来源:https://blog.csdn.net/Fu_Shi_rong/article/details/134896306
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!