本文主要是介绍JSD-2204-WebServer(项目终章)-Day18,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.V25(版本)
利用反射机制重构DispatcherServlet,使得将来添加新的业务时DispatcherServlet 不必再添加分支判断(不进行修改)实现: 1:新建包com.webserver.annotation 2:在annotation包下添加两个注解@Controller:用于标注哪些类是处理业务的Controller类@RequestMapping:用于标注处理某个业务请求的业务方法 3:将com.webserver.controller包下的所有Controller类添加注解@Controller并将里面用于处理某个业务的方法标注@RequestMapping并指定该方法处理的请求 4:DispatcherServlet在处理请求时,先扫描controller包下的所有Controller类并找到处理该请求的业务方法,使用反射调用.
1.1项目目录
1.2Java文件
1.2.1Controller(注解)
package com.webserver.annotations;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Controller {
}
1.2.2RequestMapping(注解)
package com.webserver.annotations;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RequestMapping {String value();
}
1.2.3ClientHandler
package com.webserver.core;import com.webserver.http.EmptyRequestException;
import com.webserver.http.HttpServletRequest;
import com.webserver.http.HttpServletResponse;import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.net.Socket;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;/*** 该线程任务是负责与一个客户端进行一次HTTP交互* 浏览器与服务端交互组从一问一答的原则。因此服务端处理一次HTTP交互,步骤如下:* 1:解析请求(接受浏览器发送过来的请求内容)* 2:处理请求(根据浏览器发送的请求理解其意图并进行对应的处理)* 3:发送响应(将处理结果发送给浏览器)***/
public class ClientHandler implements Runnable{private Socket socket;public ClientHandler(Socket socket){this.socket = socket;}public void run() {try {//1解析请求HttpServletRequest request = new HttpServletRequest(socket);HttpServletResponse response = new HttpServletResponse(socket);//2处理请求DispatcherServlet servlet = new DispatcherServlet();servlet.service(request,response);//3发送响应response.response();} catch (IOException e) {e.printStackTrace();} catch (EmptyRequestException e) {} catch (ClassNotFoundException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} finally {try {//按照HTTP协议要求,一次交互后要断开连接socket.close();} catch (IOException e) {e.printStackTrace();
这篇关于JSD-2204-WebServer(项目终章)-Day18的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!