1 手写实现SpringMVC,第一节:项目基本结构
来源:互联网 发布:淘宝的淘金币在哪里 编辑:程序博客网 时间:2024/05/16 08:39
SpringMVC是当今最流行的web框架之一,下面就以如何手工实现一个类似SpringMVC的框架,来看一下SpringMVC是如何工作的。
最终目标是达到如下类似于SpringMVC的项目呈现
@Controller@RequestMapping("/web")public class MyAction { @Autowired QueryService queryService; @Autowired ModifyService modifyService; @RequestMapping("/search") public void search(@RequestParam("name") String name, HttpServletRequest request, HttpServletResponse response) { String result = queryService.search(name); out(response, result); } @RequestMapping("/add") public void add(@RequestParam("name") String name, @RequestParam("addr") String addr, HttpServletRequest request, HttpServletResponse response) { String result = modifyService.add(name, addr); out(response, result); } @RequestMapping("/remove") public void remove(@RequestParam("name") Integer id, HttpServletRequest request, HttpServletResponse response) { String result = modifyService.remove(id); out(response, result); } private void out(HttpServletResponse response, String str) { try { response.getWriter().write(str); } catch (IOException e) { e.printStackTrace(); } }}这里面的所有注解均为自己实现,项目不依赖任何框架,就是一个单纯的Sevlet项目。
本文基于在网上看的咕泡学院的教学视频来实现。至于SpringMVC的本身的源码解析可参考之前转载的一篇文章。
项目知识点介绍
通过对上面一个最基础的类SpringMVC的项目结构,大概分析如下知识点。
1 自定义注解(@Controller,@RequestParam,@AutoWired等)的使用
2 反射(使用IOC给AutoWired赋值)
3 请求分发、解析
4 其他
搭建项目基本结构
所有的注解、赋值、分发等均为自己实现,不依赖任何框架。
创建一个空的项目
新建一个java web项目,在idea里就是新建Java Enterprise---Web Application,eclipse里就是Dymatic web project。
一个空的项目如上图。
添加一个入口Servlet
package com.tianyalei.mvc;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/** * Created by wuwf on 17/6/28. * 入口Sevlet */public class DispatcherServlet extends HttpServlet { @Override public void init(ServletConfig config) throws ServletException { System.out.println("我是初始化方法"); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { out(resp, "请求到我啦"); } private void out(HttpServletResponse response, String str) { try { response.setContentType("application/json;charset=utf-8"); response.getWriter().print(str); } catch (IOException e) { e.printStackTrace(); } }}这是一个普通的Servlet,里面包含初始化和get、post方法,方便起见,我们让get也走post方法,并在post里输出一句话。
配置web.xml
如果想让Servlet生效,能处理web请求,需要在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_3_1.xsd" version="3.1"> <servlet> <servlet-name>dispatchServlet</servlet-name> <servlet-class>com.tianyalei.mvc.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatchServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping></web-app>我们配置该Servlet拦截/*也就是所有的请求,那么发起的所有web请求,都将进入DispatcherServlet,之后我们通过分析请求的url,来决定由哪个Controller来处理请求。
这也是Struts2和SpringMVC不同的一个地方,Struts2是通过filter来拦截所有请求,SpringMVC是通过Servlet。
上面就已经完成了一个Servlet的配置,就可以响应web请求了。这也是大部分学JavaWeb开发的第一课。
部署到Tomcat,启动,访问任何一个url,可以看到post里输出的提示。
下一篇,来看一下自定义注解,和给注解赋值。
阅读全文
0 0
- 1 手写实现SpringMVC,第一节:项目基本结构
- 手写springmvc
- 手写MFC----第一节DECLARE_DYNCREATE(mydoc)
- springmvc项目基本配置
- 深度解析SpringMvc实现原理手写SpringMvc框架
- 纯手写SpringMVC框架,用注解实现springmvc过程
- 深度解析SpringMvc实现原理手写SpringMvc框架
- 纯手写SpringMVC框架,用注解实现springmvc过程
- Pascal 手写PE结构的实现
- leaf开源服务器第一节-分析项目结构
- SpringMVC入门-第一节:简介
- 手写MFC----第一节DECLARE_DYNCREATE(mydoc)[转载]
- 第一节:网页基本标签
- 手写springMVC框架
- 手写SpringMVC框架
- 自己手写一个springmvc
- 手写SpringMVC框架
- 第一节:springmvc的helloworld实例
- leetcode_ Add to List 121. Best Time to Buy and Sell Stock
- 1011. A+B和C (15) Python 2 编译
- Java飞机大战0_2
- 防止表单重复提交
- listener.ora模板;tnsnames.ora模板
- 1 手写实现SpringMVC,第一节:项目基本结构
- jsp页面获取绝对和相对路径
- Java wait和notify结合使用
- 智能制造信息化系统·详解
- Android视频进阶之旅(一)_概念介绍
- 删除当前目录下指定文件或者文件夹的批处理
- Java高并发处理
- 比特币客户端使用的数据库levelDB介绍
- [绍棠] iOS 各个界面相互push 以及 如何判断当前页面是push进入还是present进入