Servlet
1.request 和 response的结构
请求结构
一个HTTP请求由以下部分组成:
- 请求行(request line):包含请求方法,URI和HTTP协议版本信息。
- 请求头部(header):包含一些附加的元数据,如客户端浏览器的类型,所期望的响应内容等。
- 消息正文(message body):在某些情况下,可以通过消息体传递请求参数和数据,比如POST和PUT请求。
以下是一个示例请求结构:
1 GET /api/users?group=admin HTTP/1.1 2 Host: example.com 3 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0 4 Accept: application/json
其中:
GET
是请求方法,/api/users?group=admin
是URI,HTTP/1.1
是HTTP协议版本。Host
,User-Agent
和Accept
是请求头部字段。- 消息正文为空。
响应结构
一个HTTP响应由以下部分组成:
- 状态行(status line):包含HTTP协议版本,数字状态码和相应文本描述。
- 响应头部(header):与请求头类似,包含响应元数据,例如服务器类型,返回的内容类型等。
- 响应正文(message body):包含实际的相应内容。
以下是一个示例响应结构:
HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Content-Length: 1234 {"id": 1, "name": "John Doe", ... }
其中:
HTTP/1.1
是HTTP协议版本号,200
是状态码,OK
是对状态码的描述。Content-Type
2.java中可以通过以下几种方式对request进行增强:
-
使用filter(过滤器):filter是servlet中的一种机制,可以在请求被处理之前或者响应被发送回客户端之前拦截http请求和响应。在filter中,可以通过httpservletrequestwrapper来增强request对象。
-
自定义httpservletrequestwrapper类:这是一个包装器类,可以通过继承httpservletrequestwrapper来重写其中的方法,从而达到增强httpservletrequest对象的目的。
-
使用框架封装好的httpservletrequestwrapper类:比如spring框架中的httpservletrequestwrapper:servletrequestwrapper是基于组合模式的设计,提供了默认实现的servletrequestwrapper和servletresponsewrapper,同时也提供了模板模式中需要实现的抽象方法。
-
使用aspectj实现aop
3.Controller层 void 方法如何对前端返回数据
-
首先,在Controller方法上添加@ResponseBody注解,表示该方法返回的是响应体内容而不是视图名称。
-
然后在方法中构造需要返回给前端的数据对象。可以使用JavaBean、Map、List等集合来封装数据。
-
最后,Spring MVC框架会自动将数据序列化为JSON或其他格式的数据,并将其设置为HTTP响应的主体内容,以便客户端可以正确解析和显示。
示例代码:
1 import org.springframework.stereotype.Controller; 2 import org.springframework.web.bind.annotation.RequestMapping; 3 import org.springframework.web.bind.annotation.ResponseBody; 4 5 @Controller 6 public class ExampleController { 7 8 @RequestMapping("/example") 9 @ResponseBody 10 public String exampleMethod() { 11 // 构造需要返回的数据对象 12 String data = "Hello World!"; 13 return data; // 将数据对象返回给前端客户端 14 } 15 }
这个示例Controller方法会返回一个字符串“Hello World!”,该字符串会被自动序列化为JSON格式并发送给客户端。客户端可以使用JavaScript库如jQuery和AngularJS等解析JSON格式数据并进行显示。