Maison >Java >javaDidacticiel >Analyse détaillée des vues SpringMVC et du style REST (avec code)
Cet article vous apporte une analyse détaillée des vues SpringMVC et du style REST (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Qu'est-ce qu'un résolveur de vue ?
Les deux interfaces les plus importantes utilisées par springMVC pour gérer les vues sont ViewResolver et View.
La fonction principale de ViewResolver est de résoudre un nom de vue logique en une vue réelle. Dans SpringMVC, l'objet View est utilisé pour présenter l'objet View au client, et ViewResolver convertit uniquement le nom de vue logique en. une vue réelle. Un objet View qui se résout en un objet.
La fonction principale de l'interface View est de traiter les vues et de les renvoyer au client.
Le flux d'exécution de l'analyseur de vue :
Une fois la méthode de requête exécutée, un objet ModelAndView est finalement renvoyé For. ceux qui renvoient String , View, ModelMap et d'autres types SpingMVC finiront par les assembler en interne dans un objet ModelAndView, qui contient le nom logique et la vue de l'objet modèle. StringMVC utilise l'analyseur de vue pour obtenir l'objet de vue final. La vue finale peut être une vue JSP ou une autre vue sous forme de fichier. Le processeur de rendu ne se soucie pas de la méthode finalement adoptée. Le processeur se concentre sur le travail de production des données du modèle et a toujours réalisé un découplage complet du MVC.
Vue :
Le rôle de la vue est de restituer les données du modèle et de présenter les données du modèle à l'utilisateur sous une forme ou une autre. Afin de réaliser le découplage du modèle de vue et de la technologie d'implémentation spécifique, Sping définit une interface View. Les objets View sont instanciés par le résolveur de vues et, comme les vues sont sans état, elles ne présentent pas de problèmes de sécurité des threads.
Classes d'implémentation de vues couramment utilisées :
InternalResourceView : encapsule les ressources JSP dans une vue et est l'analyseur de vues utilisé par springmvc par défaut.
JstlView : L'introduction du package jstl springmvc dans un projet JSP utilisera automatiquement cet analyseur.
MapingJackJsonView : Sortie du modèle en mode Json via l'ObjectMapper du framework open source Jackson.
AbstractExcelView : La classe abstraite de la vue de document Excel, qui construit un document Excel basé sur POI
AbstractPdfVIew : La classe abstraite de vue de document PDF, qui construit un document PDF basé sur iText
BeanNameViewResolver : résolvez le nom de la vue logique en un Bean, et l'identifiant du Bean est égal au nom de la vue logique.
Le rôle du résolveur de vue est relativement simple, analysant la vue logique dans un objet de vue spécifique. Tous les résolveurs de vue doivent implémenter l'interface ViewResolver.
JSP est la technologie de vue la plus couramment utilisée, vous pouvez utiliser InternalResourceView comme analyseur de vue
Tant que la balise JSTL est introduite dans le projet, springmvc convertira automatiquement la vue InternalResourceView en JstlView, qui est sa sous-classe.
Chaque analyseur de vue implémente l'interface Ordered et développe un attribut d'ordre, grâce auquel la priorité de l'analyseur peut être définie. Plus l'ordre est petit, plus la priorité est élevée. Printemps MVC analysera le nom de la vue logique en fonction de la priorité de l'ordre de l'analyseur de vue jusqu'à ce que l'analyse soit réussie et que l'objet de vue soit renvoyé, sinon une ServletException sera levée
Vue personnalisée :
@Component public class MyView implements View { @Override public String getContentType() { return "text/html"; } @Override public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception { response.getWriter().println("<h1>Spring MVC Custom view</h1>"); } }
Nous devons implémenter cette vue personnalisée dans l'interface View, puis remplacer les deux méthodes dans l'interface. Ensuite, nous déclarons cette classe comme Bean et la remettons au printemps pour la gestion. Ici, nous configurons un résolveur beanName.
<!-- 配置BeanName解析器 --> <bean id="beanNameViewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver"> <property name="order" value="1"/> </bean>
Ensuite, écrivez une requête. Cette requête renvoie le nom du Bean. Par défaut, la première lettre est en minuscule et affichée en casse camel.
@RequestMapping("myView") public String myView(){ System.out.println("myView load ..."); return "myView"; }
Cela complétera notre vue personnalisée.
Désactivé et redirection :
Si la chaîne de retour contient "redirection :" ou "forward:", SpringMvc effectuera un traitement spécial.
Si nous devons accéder directement à la vue, nous pouvons la configurer comme ceci
<!– 直接配置对应的视图访问路径 --> <mvc:view-controller path="/hello" view-name="hello.jsp" /> <!-- 如果配置了mvc-controller会导致其它页面没法正常访问,还需要添加一个标签 --> <mvc:annotation-driven />
Chapitre REST
REST (Representational State Transfer) : c'est-à-dire le transfert d'état de la couche de présentation (ressource).
Ressources : Une entité sur le réseau, ou une information sur le réseau. Il peut s'agir d'un morceau de texte, d'une chanson, d'une image, etc. Vous pouvez utiliser une URL pour y pointer. Chaque ressource possède une URL spécifique et unique. Pour accéder à cette ressource, il suffit d'accéder directement à l'URI.
Couche de représentation : la forme sous laquelle les ressources sont présentées.
Transfert d'état : chaque fois qu'une requête est émise, elle représente une interaction entre le client et le serveur. Le protocole HTTP est un protocole sans état, c'est-à-dire que tous les états sont stockés côté serveur. Si le client souhaite faire fonctionner le serveur, il doit utiliser certains moyens pour faire subir une transformation d'état au serveur. Cette transformation est basée sur la couche de présentation, il s'agit donc de la transformation d'état de la couche de présentation.
在我们的SpringMVC之中支持HTTP四种请求状态,REST规定的HTTP协议中四种表示操作方式的动词
GET请求:获取资源
POST请求:新建资源
PUT:更新资源
DELETE:删除资源
我们需要在WEB.xml中配置实现PUT,DELETE请求方式,大家都知道在我们传统的HTML中只有GET,POST两种请求方式。
<!-- 配置HiddenHttpMethodFilter过滤器实现PUT,DELETE请求 --> <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class> org.springframework.web.filter.HiddenHttpMethodFilter </filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
GET请求
GET请求: <a href="rest/testRest/10">test RestGet请求</a><br><br> @RequestMapping(value="/testRest/{id}",method=RequestMethod.GET) public String testRestGet(@PathVariable Integer id){ System.out.println("GET请求,获取id为:" + id + "的对象!"); return SUCCESS; }
Post请求
POST请求: <form action="rest/testRest" method="post"> <input type="submit" value="post请求" /> </form> @RequestMapping(value="/testRest",method=RequestMethod.POST) public String testRestPost(){ System.out.println("POST请求,添加新的对象!"); return SUCCESS; }
PUT和DELETE请求想要使用必须添加上面的过滤器,并且在Post请求中加上隐藏域name="_method",value="PUT/DELETE"。
PUT,请求其实是由POST请求转换而来的。
PUT请求: <form action="rest/testRest" method="post"> <!-- 添加隐藏域,名称为_method,value为请求方式 --> <input type="hidden" name="_method" value="PUT" /> <input type="submit" value="put请求" /> </form> @RequestMapping(value="/testRest",method=RequestMethod.PUT) public String testRestPut(){ System.out.println("PUT请求,更新操作!"); return SUCCESS; }
DELETE请求
DELETE请求: <form action="rest/testRest/10000" method="post"> <!-- 添加隐藏域,名称为_method,value为请求方式 --> <input type="hidden" name="_method" value="DELETE" /> <input type="submit" value="delete请求" /> </form> @RequestMapping(value="/testRest/{id}",method=RequestMethod.DELETE) public String testRestDelete(@PathVariable Integer id){ System.out.println("DELETE请求,删除操作!" + id); return SUCCESS; }
重复一次第一章的内容在我们springmvc拦截所有请求会导致css,js,图片等不能引入我们可以这样解决:
<!--将非mapping配置下的请求交给默认的Servlet来处理--> <mvc:default-servlet-handler/> <!--如果添加了默认servlet,mvc请求将无效,需要添加annotation-driven--> <mvc:annotation-driven></mvc:annotation-driven>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!