首页 > 编程语言 >JavaWeb三大组件之Servlet

JavaWeb三大组件之Servlet

时间:2024-10-11 21:49:33浏览次数:3  
标签:JavaWeb Servlet writer request String servlet response 三大 name

1. Servlet

一、Servlet介绍

1、概念

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

2、实现过程

1.客户端发送请求至服务器端;

2.服务器将请求信息发送至 Servlet;

3.Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;

4.服务器将响应返回给客户端。

3、生命周期

1.客户端请求该 Servlet;

2.加载 Servlet 类到内存;

3.实例化并调用init()方法初始化该 Servlet;

4.service()(根据请求方法不同调用doGet() 或者 doPost(),此外还有doHead()、doPut()、doTrace()、doDelete()、doOptions()、destroy())。

二、Request对象(获取请求信息)

2.1获取相应消息数据

2.2 获取请求参数

String getParameter(String name):根据参数名称获取参数值  
String[] getParameterValues(String name):根据参数名称获取参数值的数组
Enumeration<String> getParameterNames():获取所有请求的参数名称
 Map<String,String[]> getParameterMap():获取所有参数的map集合

2.3请求转发

1. 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)

2. 使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response)

2.4 共享数据

void setAttribute(String name,Object obj):存储数据

Object getAttitude(String name):通过键获取值

void removeAttribute(String name):通过键移除键值对

post乱码解决

在获取参数前,设置request的编码request.setCharacterEncoding("utf-8");

三、Response对象(设置响应消息)

3.1 设置响应消息

3.2 重定向

方法:response.sendRedirect("路径");

特点:1. 地址栏发生变化

2. 重定向可以访问其他站点(服务器)的资源

3. 重定向是两次请求。不能使用request对象来共享数据

重定向与转发的区别

forward:一般用于用户登陆的时候,根据角色转发到相应的模块。

redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等。

四、综合案例

4.1新建项目步骤

4.2 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.beiyou</groupId>
    <artifactId>servlet</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>servlet</name>
    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
        <junit.version>5.8.1</junit.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.2</version>
            </plugin>
        </plugins>
    </build>
</project>

4.3 web.xml

<?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-name>HelloServlet</servlet-name>
        <servlet-class>com.beiyou.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello-servlet</url-pattern>
    </servlet-mapping>
</web-app>

4.4 HelloServlet.java

package com.beiyou.servlet;

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

//@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet {
    private String message;

    public void init() {
        message = "Hello World!";
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //response.setContentType("text/html");
        response.setHeader("Content-Type","text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1> Servlet 你好,这是您要的麻婆豆腐 </h1>");
        out.println("</body></html>");
    }

    public void destroy() {
    }
}

4.5 乱码-解决

中文乱码

解决ide控制台乱码

五、使用注解

@WebServlet(name = "helloServlet", value = "/hello-servlet")

1.1 使用JSP页面

1、编写a.jsp页面

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

<!DOCTYPE html>
<html>
<head>
    <title>JSP - Hello World</title>
</head>
<body>
<h1>
    <%= "潘周聃1写死" %>
</h1>
<hr/>
<h1>
    <%
        Object value = request.getAttribute("name");
        out.println(value);
    %>
</h1>
<hr/>
<h1>
    ${requestScope.name}
</h1>
<hr/>
<h1>
    id: ${requestScope.user.id}
</h1>
<h1>
    姓名: ${requestScope.user.name}
</h1>


</body>
</html>

request和requestScope的区别_xiangwang2016的博客-CSDN博客_requestscope

EL表达式中,param和requestScope的区别在看param和requestScope之前,不妨先了解下在java下request的情况:1. request对象通常用来接收客户端提交到服务端的数据,如:在servlet或者action中可以用request.getParameter()的方法获取获取参数内容;2. requestScope通常是在servlet或者ac...

https://blog.csdn.net/xiangwang2016/article/details/85119692

2、Servlet传递参数到jsp页面

  public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
      
        //通过请求作用域对象HttpServletRequest接口添加共享数据
        request.setAttribute("name","苍老师");//将数据写入请求作用于对象name(key名称)
        Map<String,Object> map  = new HashMap<>();
        map.put("id",1);
        map.put("name","潘周聃");
        request.setAttribute("user",map);        //通过请求转发索要a.jsp并写入到响应体中
        request.getRequestDispatcher("a.jsp").forward(request,response);           
    }

<body>

<%
  Object o= request.getAttribute("name") ;
  out.println(o);
%>

 基本类型:${requestScope.name}
 对象id:${requestScope.user.id}
 对象name:${requestScope.user.name}
</body>

 

1.2 使用模板引擎

1.引入模板库

 <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-impl</artifactId>
            <version>1.2.5</version>
   </dependency>

2. servlet 传递集合

public class User {
    private int id;
    private String  name;
}

   request.setAttribute("userLst",userLst);

request.getRequestDispatcher("template.jsp").forward(request,response);

3. 页面头加上渲染方式

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<h1>使用模板引擎</h1>

<table>
    <c:forEach items="${requestScope.userLst}" var="user">
        <tr>
            <td>${user.id }</td>
            <td>${user.name }</td>
        </tr>
    </c:forEach>
</table>

1.3 使用Post接受表单请求

1.书写表单

<form method="post" action="a">
    <input type="text" name="id" placeholder="请输入名 ">
    <input type="text" name="name" placeholder="请输入姓 ">
    <input type="submit" value="提交" >
</form>

2.书写doPost

  @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //处理表单数据
        req.setCharacterEncoding("UTF-8");
        String id = req.getParameter("id");
        String name = req.getParameter("name");
        //构造一个响应页
        resp.setHeader("Content-Type","text/html;charset=utf-8");
        //一旦调用getWriter方法,此时header的内容就不能更改
        Writer writer = resp.getWriter();
        writer.write("<html>");
        writer.write("id: "+id);
        writer.write("<br/>");
        writer.write("name: "+name);
        writer.write("</html>");

    }

3.Post传输Json数据

3.1 引入fastjson包

   <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.28</version>
      </dependency>

3.2 form表单提交

url:http://localhost:8080/demo/bBody:{"id":5,"name":"zhouxingxing"}

3.3 书写doPost方法

 @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //读取request body 数据
        ServletInputStream inputStream = request.getInputStream();

        InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");

        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

        String  jsonStr = "";

        String  line;

        while ((line = bufferedReader.readLine()) != null){

            jsonStr += line;

        }

        // 转成对象

        JSONObject jsonObject = JSONObject.parseObject(jsonStr);


        JSONObject jsonObject2 = new JSONObject();
        //正常成功时候返回的格式
        jsonObject2.put("code",0);
        jsonObject2.put("data",jsonObject);
        jsonObject2.put("message","请求成功");
        //失败的时候返回的格式

       // jsonObject2.put("code",1);
       // jsonObject2.put("data",null);
       // jsonObject2.put("message","连接数据库失败");


        response.setCharacterEncoding("utf-8");

        response.setContentType("application/json");

        response.getWriter().write(String.valueOf(jsonObject2));


//        PrintWriter writer = response.getWriter();
//        writer.println("<html>");
//        writer.println("<body>");
//        writer.println("id -> "+jsonObject.getString("id"));
//        writer.println("<br/>");
//        writer.println("name -> "+jsonObject.getString("name"));
//        writer.println("</body>");
//        writer.println("</html>");

    }

成功:

失败:

 

标签:JavaWeb,Servlet,writer,request,String,servlet,response,三大,name
From: https://blog.csdn.net/zhzjn/article/details/142864171

相关文章

  • 三大翻译软件推荐
    在全球化的今天,外贸已经成为许多企业拓展市场的重要途径。然而,语言障碍仍然是外贸业务中的一大挑战。尤其是在跨文化、跨语言的交流中,确保双方能够顺畅沟通显得尤为重要。这时,一款好用的翻译软件就能为外贸人员提供巨大的帮助。本文将推荐三款出色的翻译软件,帮助外贸业务人员更......
  • 毕业设计项目-基于JavaWeb技术的在线考试系统设计与实现源码+万字论文
    项目简介基于springboot实现的,主要功能如下:技术栈后端框框:springboot/mybatis前端框架:html/JavaScript/Css/vue/elementui运行环境:JDK1.8/MySQL5.7/idea(可选)/Maven3(可选)/tomcat8+(可选)jdk版本:最好是javajdk1.8,我们在这个平台上运行的,其他版本理论上也可以是否需要mave......
  • 基于javaweb宠物领养平台管理系统设计和实现
    基于javaweb宠物领养平台管理系统设计和实现......
  • springboot+vue基于javaweb电费管理系统【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着信息化技术的飞速发展,各行各业的管理效率与服务质量均得到了显著提升。在电力行业中,电费管理作为其核心业务流程之一,直接关系到电力企业的运营效益与用户的满意度。传统的电费管理方式大多依赖于人工操作,不仅耗时费力,还容易出错,难......
  • JAVAWEB实现文件上传下载功能实例解析
    需求:大文件上传,批量上传,断点续传,文件夹上传,大文件下载,批量下载,断点下载,文件夹下载文件夹:上传下载需要支持层级结构,采用非压缩方式文件大小:100G前端:vue2,vue3,vue-cli,jquery,html,webuploader后端:JSP,springbootweb服务:tomcat数据库:mysql,oracle,达梦,国产化数据库服务......
  • 基于数据可视化+Javaweb实现的物流管理系统设计与实现(源码+数据库+论文+部署+文档+讲
    文章目录前言系统演示录像论文参考代码运行展示图技术框架SpringBoot技术介绍系统测试系统测试的目的系统功能测试推荐选题:代码参考实现案例找我做程序,有什么保障?联系我们前言......
  • springboot+vue【开题+程序+论文】基于javaweb的校友管理系统
    系统程序文件列表开题报告内容研究背景随着信息技术的迅猛发展和互联网的广泛普及,校友管理成为了各高校和校友会工作的重要组成部分。传统的校友管理方式,如纸质档案、电话沟通、邮件联络等,已难以满足当前高效、便捷、互动的管理需求。特别是在全球范围内,校友分布广泛,信息更......
  • JavaWeb婚恋交友服务系统
    本系统采用Eclipse2022作为开发工具,MySql8.0作为数据库,并运用Java编程语言和Web、JavaScript、Vue、Html5+Css3等技术搭建B/S架构的网站。它包括两个主要功能模块:前台和后台。前台模块实现了用户注册登录、个人信息管理、发布个人信息、留言、报名线下活动、支付活动费用、......
  • JavaWeb基础-学习笔记02
    02MySQL数据库、SQL、数据库设计、事务、JDBC1.MySQL数据库1.1MySQL的安装:包含两种安装方式,解压包安装、压缩包安装。通过解压包安装:下载压缩包后进行解压、添加my.ini初始化配置文件、添加环境变量;添加mysqld服务、启动该服务。期间遇到的一些问题和解决方案:找......
  • idea2023-快速搭建一个本地tomcat的javaWeb项目(从0到1保姆教学)
    前言如何在新版idea中搭建一个javaWeb项目,并且应用在物理的tomcat中,本文将进行从零到一,完成搭建步骤,以及相关注意事项的讲解。为什么需要配置tomcat?我们开发的javaWeb项目,最后都需要打包部署到真正的物理tomcat上发布运行;在开发阶段,我们想要测试javaWeb项目,除了使用maven......