一、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";
}
}