试讲,Servlet Json相关内容

本文深入讲解Servlet和JSON的基础知识,包括Servlet如何作为Web服务器与应用程序间的桥梁,以及JSON作为数据交换格式的特点和应用。通过具体代码示例,展示如何在Java项目中使用JSON进行数据传输,实现前后端分离开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、servlet简介
Servlet 是什么?
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

二、Json简介
JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)。JSON 是轻量级的文本数据交换格式,和XML一样也是纯文本的,具有独立于语言,自我描述性,更易理解等特点,具有层级结构(值中存在值)可通过 JavaScript 进行解析数据,可使用 AJAX 进行传输。

Object 对象在 JSON 中是用 { } 包含一系列无序的 Key-Value 键值对表示的,实际上此处的 Object 相当于 Java 中的 Map<String, Object>,而不是 Java 的 Class 。注意 Key 只能用 String 表示。
例如一个employee 对象是包含 3 个员工记录(对象)的数组表示如下:

{
	"employees": [
		{ "firstName":"Bill" , "lastName":"Gates" },
		{ "firstName":"George" , "lastName":"Bush" },
		{ "firstName":"Thomas" , "lastName":"Carter" }
	]
}

三、为什么要学习这项技术
在实际开发中,不管是传统项目,还是互联网项目,不管是SSM,还是SpringBoot项目,都要使用Json格式的字符串进行数据传输,
这项技术可以保证,不论是手机端,电脑端,还是其他终端,后端只需要传对应格式的Json串即可,真正实现了数据的统一,实现
了前后端完全分离开发。

四、代码
1 Maven依赖:

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

2 User实体类代码:

public class User {
    private String name;
    private int age;
    
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

3 Application代码:

import com.example.demo.servlet.HelloServlet;
import com.example.demo.servlet.JsonServlet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Bean  //一定要加,不然这个方法不会运行
    public ServletRegistrationBean getServletRegistrationBean() {  //一定要返回ServletRegistrationBean
        ServletRegistrationBean bean = new ServletRegistrationBean(new JsonServlet());     //放入自己的Servlet对象实例
        bean.addUrlMappings("/JsonServlet");  //访问路径值
        return bean;
    }
}

4 yml文件代码:

thymeleaf:
  mode: HTML
  encoding: utf-8
  cache: false
  prefix: classpath:/templates/
  suffix: .html
spring:
  resources:
    static-locations: classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,classpath:/templates/

5 Servlet代码:

import com.alibaba.fastjson.JSON;
import com.example.demo.entity.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "JsonServlet")
public class JsonServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //>>处理POST请求参数乱码
        request.setCharacterEncoding("utf-8");
        //>>处理响应正文乱码
        response.setContentType("text/html;charset=utf-8");
        String userJson = request.getParameter("user");
        User user = JSON.parseObject(userJson, User.class);//Json转对象
        System.out.println("Json转对象  " + user);
        user.setAge(user.getAge() +1);
        String userStr = JSON.toJSONString(user);//对象转Json
        System.out.println("对象转Json  " + userStr);
        response.getWriter().append(userStr).println();

    }
}

6 Html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>测试ajax</title>
    <script src="jquery-3.4.1.min.js"></script>
    <script type="text/javascript">
        function ajaxFun() {
            var obj = new Object();
            obj.name = $("#first").val();
            obj.age = $("#second").val();
            var strData = JSON.stringify(obj);//对象转Json
            console.log("对象转Json", strData);
            var userJson = {"user": strData};
            $.ajax({
                type: "POST",                            //传数据的方式
                url: "JsonServlet",                             //servlet地址

                data: userJson,            //传的数据  form表单 里面的数据
                success: function (result) {
                    var user = JSON.parse(result);
                    console.log("Json转对象", user);
                    $("#showName").val(user.name);
                    $("#showAge").val(user.age)
                }
            });
        }

    </script>
</head>
<body>
<H1 align="center">请输入两个字符串</H1>
<div align="center">
    <form id="form" method="post">
        name:<input type="text" name="name" id="first">
        age:<input type="text" name="age" id="second">
        <button type="button" onclick="ajaxFun()">长一岁</button>
    </form>
    姓名:<input type="text" id="showName">
    年龄:<input type="text" id="showAge">
</div>
</body>
</html>

五、总结
通过本次课,学习到了Servlet+Ajax+Json的开发模式,真正的项目或许不用Servlet,但是底层也是Servlet实现的,学好本节课内容,对今后的开发工作
是大有裨益的。

注:
若要通过Ctroller访问,需加上以下代码

依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

controller代码:

@Controller
public class IndexController {

    @RequestMapping("index")
    public String index(){
        return "index";
    }
}
内容概要:本文针对国内加密货币市场预测研究较少的现状,采用BP神经网络构建了CCi30指数预测模型。研究选取2018年3月1日至2019年3月26日共391天的数据作为样本,通过“试凑法”确定最优隐结点数目,建立三层BP神经网络模型对CCi30指数收盘价进行预测。论文详细介绍了数据预处理、模型构建、训练及评估过程,包括数据归一化、特征工程、模型架构设计(如输入层、隐藏层、输出层)、模型编译与训练、模型评估(如RMSE、MAE计算)以及结果可视化。研究表明,该模型在短期内能较准确地预测指数变化趋势。此外,文章还讨论了隐层节点数的优化方法及其对预测性能的影响,并提出了若干改进建议,如引入更多技术指标、优化模型架构、尝试其他时序模型等。 适合人群:对加密货币市场预测感兴趣的研究人员、投资者及具备一定编程基础的数据分析师。 使用场景及目标:①为加密货币市场投资者提供一种新的预测工具和方法;②帮助研究人员理解BP神经网络在时间序列预测中的应用;③为后续研究提供改进方向,如数据增强、模型优化、特征工程等。 其他说明:尽管该模型在短期内表现出良好的预测性能,但仍存在一定局限性,如样本量较小、未考虑外部因素影响等。因此,在实际应用中需谨慎对待模型预测结果,并结合其他分析工具共同决策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值