当前位置: 首页 > news >正文

servlet相关

1. JSTL标签库

JSTL标签库:里面提供了大量的标签。如if标签、for标签等

目的是减少jsp中<%%>的出现

1.1 核心标签库

在这里插入图片描述

如何使用jstl标签

  1. 引入jstl标签库
  2. 在网页中引入标签库地址
<%--在网页中引入jstl标签的核心标签库的地址,prefix中的别名可以随意定义
引入核心标签库的地址 prefix:前缀 别名  uri:核心标签库的地址--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
  1. 使用相应的标签

可以结合EL表达式一起使用

if标签

<%
    User user=new User(1,"hzsd","456");
    request.setAttribute("user",user);
%>
<%--test:条件表达式 没有else--%>
<%--jstl标签库中的==和equals等价的--%>
<c:if test="${user.id==2}">
    第一个用户
</c:if>

for标签

<%
    List<User> list=new ArrayList<>();
    list.add(new User(1,"张一","121"));
    list.add(new User(2,"张二","122"));
    list.add(new User(3,"张三","123"));
    list.add(new User(4,"张四","124"));
    request.setAttribute("list",list);
%>
<table width="600" border="1px" cellspacing="0" align="center">
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>密码</th>
    </tr>
    <%--循环标签 items表示被循环的数组或集合 var:每次循环拿到的值赋值的变量 begin:从哪开始 end:到哪结束 step:步数--%>
    <c:forEach items="${list}" var="s">
        <tr>
            <td>${s.id}</td>
            <td>${s.name}</td>
            <td>${s.password}</td>
        </tr>
    </c:forEach>
</table>

choose when other标签

java中switch语句

<c:choose>
    <c:when test="${age>0 and age<10}">小学</c:when>
    <c:when test="${age>=10 and age<18}">高中</c:when>
    <c:when test="${age>=18 and age<25}">大学</c:when>
    <c:otherwise>家里蹲</c:otherwise>
</c:choose>

redirect重定向标签

<c:redirect url="add.jsp"></c:redirect>

1.2 格式化标签库

网页中引入格式化标签

<%--引入核心标签库的地址 prefix:前缀 别名  uri:核心标签库的地址--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="f" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        request.setAttribute("birthday",new Date());
    %>
    <%--value:要格式的数据  pattern:格式化后的样式--%>
   <f:formatDate value="${birthday}" pattern="yyyy年MM月dd日 HH:mm:ss"></f:formatDate>

   <input type="text" value="<f:formatDate value='${birthday}' pattern='yyyy-MM-dd'/>"/>
</body>
</html>

2. servlet

2.1 what

本质就是java类,做到了承上启下的作用,可以接收请求的数据,也可以把数据相应给前端页面

等价于处理页面,目的是为了减少<%%>的出现

2.2 why

目的是减少jsp中<%%>的使用

在这里插入图片描述

如果没有servlet,需要为每一个前端类型提供一种处理功能,替代处理界面

2.3 how

创建一个类并继承HttpServlet

public class MyServlet extends HttpServlet {

    //重写父类中的方法.接受参数以及业务处理
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        System.out.println("代码~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    }
}

在web.xml文件中注册该servlet,后续有简化方法,即在相应的类中添加注解

把servlet类的创建交于tomcat容器创建

<?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">

    <!--注册servlet-->
    <servlet>
        <!--servlet的名称可以随便起-->
        <servlet-name>myServlet</servlet-name>
        <!--指定自定义的servlet路径-->
        <servlet-class>com.ykq.servlet.MyServlet</servlet-class>
    </servlet>

    <!--请求路径映射到该servlet-->
    <servlet-mapping>
        <!--保证该名称必须和上面注册的名称一致-->
        <servlet-name>myServlet</servlet-name>
        <!--路径,可以随意定义,但必须加/-->
        <url-pattern>/my</url-pattern>
    </servlet-mapping>
</web-app>

2.4 servlet接收请求的参数值

 @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //编码设置
        req.setCharacterEncoding("utf-8");
        //接受参数
        String name = req.getParameter("name");
        String age = req.getParameter("age");
        System.out.println("name=========="+name+";age=========="+age);

        //跳转
//        resp.sendRedirect("aaa.html");

        req.getRequestDispatcher("aaa.html").forward(req,resp);
    }

2.5 完成登录

在这里插入图片描述

servlet中的代码

public class LoginServlet extends HttpServlet {
    private UserDao userDao=new UserDao();
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        String name = request.getParameter("name");
        String password = request.getParameter("password");
        User user = userDao.selectByNameAndPwd(name, password);
        if(user!=null){
            //获取session对象
            HttpSession session = request.getSession();
            //保存数据到session
            session.setAttribute("user",user);
            //跳转成功页面
            response.sendRedirect("success.jsp");
        }else{
            response.sendRedirect("login.jsp");
        }
    }
}

2.6 使用注解简化web.xml注册的代码

web版本为3.0以后

在这里插入图片描述

2.7 快速建立servlet【没有不用】

在这里插入图片描述

2.8 一个servlet实现多个请求

正常情况下一个表的操作都放在一个servlet中。处理多个请求

处理方法:发送请求时传递一个标志参数

在这里插入图片描述

@WebServlet(name = "StudentServlet",urlPatterns = "/StudentServlet")
public class StudentServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //接受操作的标志
        String method = req.getParameter("method");
        if("add".equals(method)){
             add(req,resp);
        }else if("delete".equals(method)){
             delete(req,resp);
        }else if("update".equals(method)){
            update(req,resp);
        }else{
            list(req,resp);
        }
    }

    private void list(HttpServletRequest req, HttpServletResponse resp) {
    }

    private void update(HttpServletRequest req, HttpServletResponse resp) {
        System.out.println("~~~~~~~~~~~~~~~~~~~修改学生update~~~~~~~~~~~~~");
    }

    //删除学生的操作
    private void delete(HttpServletRequest req, HttpServletResponse resp) {
        //接受删除学生的id
        //调用dao完成删除功能
        //跳转
        System.out.println("~~~~~~~~~~~~~~delete删除学生~~~~~~~~~~~~~~~");
    }

    //添加学生
    private void add(HttpServletRequest req, HttpServletResponse resp) {
        System.out.println("~~~~~~~~~~~~~~add添加学生~~~~~~~~~~~~~~~~~~~~");
    }
}

2.9 servlet的生命周期

servlet对象从创建到销毁经历哪些阶段。每个阶段执行相应的方法

  1. 创建new[只会执行一次]
  2. 初始化阶段[只会执行一次]
  3. 服务阶段[每次请求都会执行]
  4. 销毁阶段[服务器关闭时]
public class MyServlet extends HttpServlet {
    //只执行一次。----单例模式[节省内存]
    public MyServlet(){
        //创建servlet经历的方法
        System.out.println("构造servlet方法");
    }
    //初始化方法只执行一次
    @Override
    public void init(ServletConfig config) throws ServletException {
        //本servlet局部参数
        String name = config.getInitParameter("name");
        String age = config.getInitParameter("age");
        //获取web全局参数
        String address = config.getServletContext().getInitParameter("address");
        System.out.println("初始化阶段"+name+";"+age+";"+address);
    }

    //每次请求都会经过service服务阶段
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("服务阶段---");
    }

    @Override
    public void destroy() {
        System.out.println("销毁阶段");
    }
}


<?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">
    
    <!--全局参数-->
    <context-param>
        <param-name>address</param-name>
        <param-value>bj</param-value>
    </context-param>
    <servlet>
        <servlet-name>my</servlet-name>
        <servlet-class>com.ykq.servlet.MyServlet</servlet-class>
        <!--初始化的参数-->
        <init-param>
            <param-name>name</param-name>
            <param-value>ldh</param-value>
        </init-param>
        <init-param>
            <param-name>age</param-name>
            <param-value>18</param-value>
        </init-param>
        <!--服务器启动时加载该servlet: 优点:客户访问速度快。 缺点:服务器启动慢了-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>my</servlet-name>
        <url-pattern>/My</url-pattern>
    </servlet-mapping>
</web-app>

3. 注意点

  1. 退出登录:因为是保存到session会话中的信息,是在Servlet Java代码中实现退出登录,又因为Java中没有session对象,必须先通过req.getSession()方法获取,才能调用session的removeAttribute方法移除session会话中的信息

所有,实现步骤:

  private void loginOut(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //获取会话对象
        HttpSession session = req.getSession();
        session.removeAttribute("user");
        resp.sendRedirect("login.jsp");
    }

  1. 过滤器也可以通过添加注解实现注册该过滤器

相关文章:

  • 机器视觉3D相机打光效果如何判断好坏,机器视觉3D相机打光效果评估方法
  • 【电路笔记】-简单的LED闪烁器
  • EndNote与Word关联:科研写作的高效助力
  • 基于CentOS7安装kubesphere和Kubernetes并接入外部ES收集日志
  • CH340 自动下载电路分析
  • 五、Three.js顶点UV坐标、纹理贴图
  • 程序员学商务英语之At the Hotel
  • 22.回溯算法4
  • [LeetCode力扣hot100]-快速选择和快排
  • 突破“第一崇拜“:五维心理重构之路
  • 数据库二三事(6)
  • C++ mutex常见问题
  • 【Linux】动静态库
  • 【Git 学习笔记_27】DIY 实战篇:利用 DeepSeek 实现 GitHub 的 GPG 密钥创建与配置
  • Spring Boot3.x集成Flowable7.x(一)Spring Boot集成与设计、部署、发起、完成简单流程
  • 解决Tensorflow找不到GPU的问题
  • 单页图床HTML源码+本地API接口图床系统修复版源码
  • 【大模型】蓝耘智算云平台快速部署DeepSeek R1/R3大模型详解
  • 响应式数据ref()和reactive()的使用
  • 嵌入式八股,内存泄漏
  • 网站建设可以帮助花店怎么样/苏州疫情最新情况
  • wordpress首页不显示文章/seo基本步骤
  • 旅游电子商务网站建设情况/天津网站seo设计
  • 电商平台网页设计/企业网站seo托管怎么做
  • 永康建设网站/被公司优化掉是什么意思
  • 苏州做网站的企业/天堂网