Tópico de salto simples
Pessoalmente, recomendo praticar o processo de construção novamente. Se você se sentir problemático, pode copiar diretamente o projeto anterior, mas precisa modificar um pouco de informação no POM.xml.
<PuerpId> com.hanpang.springmvc </frugiD> <ArtifactId> springmvc-demo01 </stutifactId> <versão> 0.0.1-snapshot </versão>
1. Classes de configuração do núcleo e classes de carregamento
pacote com.hanpang.config; importar org.springframework.context.annotation.comPonentsCan; importar org.springframework.context.annotation.configuration; importar; org.springframework.web.servlet.config.annotation.enablewebmvc;@confguration@enablewebmvc@componentscan (bashepackages = "com.hanpang. **.
package com.hanpang.config; importar org.springframework.web.servlet.support.abstractAnnotationConfigDispatcherServletLizerZer; public classe webinitializer estende abstratoNotationConfigDispatcherSletLitializer {@OverrideRide (ClassectEct <?] [] {Webconfig.class}; } @Override Classe protegida <?> [] GetServletConfigClasses () {return null; } @Override Protected String [] getServletMappings () {return new String [] {"/"}; }}2.JaVaweb Stage Jump Method
Observe os parâmetros formais no método SpringMVC, a estrutura completa a operação de instanciação para nós.
pacote com.hanpang.web; importar java.io.ioException; importar javax.servlet.servletexception; importar javax.servlet.http.httpServletReQuest; import javax.sertlet.http.httpSotreposOnse; org.springframework.web.bind.annotation.requestmapping; importar org.springframework.web.servlet.modlandview; @controller // diga que é um controlador de classe public e HEATHETRONGROTLAINDRONGROLLER {@RequestMapping (Path = "/"/"/"/"/testing) solicitação, httpServletResponse resposta) lança servletexception, ioexception {System.out.println ("Os parâmetros formais são instanciados por padrão"); request.getRequestDispatcher ("/web-inf/jsp/Demo01.jsp"). Forward (solicitação, resposta); retornar nulo; } @RequestMapping (PATH = "/TEST02") Public ModelAndView Way Tradicional Jump_redirect (solicitação httpServletRequest, httpServletResponse resposta) lança IoException {System.out.println ("Os parâmetros formais são instantados por padrão"); Response.sendRedirect (request.getContextPath ()+"/view/result01.jsp"); retornar nulo; }} Nota: quase não usamos mais esse método, apenas uma simples demonstração e revisão, pelo menos podemos usar esse método para obter a API do servlet !!!
3. Demonstre como o controlador salta para JSP
No final do exemplo, adicionaremos o analisador JSP View. No começo, ainda seguiremos o método tradicional e teremos um processo passo a passo.
pacote com.hanpang.web; importar java.io.ioException; importar javax.servlet.servletexception; importar javax.servlet.http.httpServletReQuest; import javax.sertlet.http.httpSotreposOnse; org.springframework.web.bind.annotation.requestmapping; importar org.springframework.web.servlet.modlandView; @controlador // diga que é um ModelArtMunder de It) ModelArnGeND) ModelArnGend), por @ @ @@RequestMapping (Path = "/"/Test03) ModelAndView (); mav.setViewName ("/web-inf/jsp/Demo01.jsp"); retornar mav; } @ReQuestMapping (PATH = "/test04") public ModelAndView Defina o método de redirecionamento () {ModelAndView MAV = new ModelAndView (); mav.setViewName ("Redirect: /view/Result01.jsp"); // ou //mav.setViewName(urlBasedViewResolver.redirect_url_prefix+"/view/result01.jsp "); retornar mav; }} Parece o método de palco da Web Java, mas um prefixo simples é definido durante o redirecionamento.
4. Demonstre como o controlador salta para o controlador
Semelhante a ligar de um servlet para outro
pacote com.hanpang.web; importar java.io.ioException; importar javax.servlet.servletexception; importar javax.servlet.http.httpServletReQuest; import javax.sertlet.http.httpSotreposOnse; org.springframework.web.bind.annotation.requestMapping; importar org.springframework.web.servlet.modlandView; @controlador // diga que é um ModelNuvVualizador de ModelAndring e ModelArgNep e ModelArgNevVualizador de ModelArgNep e ModelArt e ModelArgNewring DemoR01 -ModelArgNewrling {@requestMapping (Path = "/"/Test05 ") ModelAndView (); mav.setViewName ("/test03"); retornar mav; } @RequestMapping (path = "/test06") public ModelAndView Set Redirection () {ModelAndView MAV = new ModelAndView (); Mav.SetViewName ("Redirect:/test04"); retornar mav; }} 5. Adicione o analisador de visualização JSP
Durante a demonstração acima, descobrimos que o SetViewName no ModelAndView é usado para completar o salto. Os dados passados aqui são uma string, mas o método de processamento é diferente. Quando o caminho do salto é redirecionado prefixado:, o método de processamento é diferente.
Além disso, se tivermos várias seqüências semelhantes a/web-inf/jsp/demo01.jsp, descobrimos que existem muitas partes públicas. A SpringMVC nos fornece uma classe especializada no manuseio de solicitações de controlador que encaminhe páginas JSP.
Observe minha descrição: se você achar que a string que você passou não possui nenhum identificador de prefixo, por padrão, use o analisador de visualização JSP de configuração para lidar com isso e preencher a operação de encaminhamento de solicitação
Nota: Configurar a classe de configuração do núcleo
pacote com.hanpang.config; importar org.springframework.context.annotation.bean; importar org.springframework.context.annotation.comPonentsCan; import org.springframework.context.annotation.configuration; importação.springframeweb.web.web.web.web.lex.LervVerw.LerVwerweb.LeRVIVERT.LEVVERVIENT.LEVERVERVERVERVERVERVERVERVERVERVERVERG.NETROURVID.LEVERVERVERVERVERG.NOTATION.MERVERG.SPRINGROWBEB.WEBEB.LEVERVERVERVERVERG.SPRINGROVERVERVERVERG. org.springframework.web.servlet.config.annotation.enablewebmvc; importar org.springframework.web.servlet.view.internalResourceViewResolver; import org.springframework.web.servlet.view.jstlview;@configuration@enablewebmvc@componentsCan (BasEpackages = "com.hanpang. **. InternoResourceViewResolver (); jspViewResolver.SetViewClass (jstlView.class); // springmvc suporta jstl tag jspViewResolver.setPrefix ("/web-inf/"); jspViewResolver.SetSuffix (". JSP"); retornar jspViewResolver; }} ** NOTA: ** Por favor, preste atenção à anotação no método @bean
O método é equivalente ao código em XML da seguinte forma
<bean id = "jsPresourceViewResolver"> <propriedade name = "prefixo" value = "/web-inf/"/> <propriedade name = "sufixo" value = ".
Melhorar o código JSP de salto do controlador
Esse analisador de visualização pode encaminhar apenas solicitações JSP e é inválido para redirecionamentos. Por favor, preste atenção ao conteúdo do comentário do código
@RequestMapping (PATH = "/TEST03") Public ModelAndView por padrão, ele é solicitado Forwarding () {ModelAndView MAV = new ModelAndView (); //mav.setViewName("/web-inf/jsp/demo01.jsp "); // Avançado: por padrão, ele será tratado usando o analisador JSP View, // Prefixo+"JSP/Demo01"+Suffix => /web-inf/jsp/demo01.jsp Mav.setViewName ("JSP/Demo01"); // Descobri que a string não possui modificação de prefixo MAV; } @ReQuestMapping (PATH = "/test04") public ModelAndView Defina o método de redirecionamento () {ModelAndView MAV = new ModelAndView (); // O analisador invalida o redirecionamento MAV.SetViewName ("Redirect: /view/result01.jsp"); retornar mav; } Melhorar o código do controlador de salto do controlador
@RequestMapping (Path = "/test05") Public ModelAndView Defina diretamente o caminho de mapeamento () {ModelAndView MAV = new ModelAndView (); mav.setViewName ("/test03"); retornar Mav;}Depois de configurar o analisador JSP View, teste o código acima novamente e veja os resultados do acesso com surpresa.
Ele está em conformidade com o que dissemos antes "/test03" é uma string que será processada por padrão usando o analisador JSP View. Então, como melhorá -lo?
Você pode definir o prefixo "Forward:", e o código é aprimorado da seguinte maneira:
@RequestMapping (Path = "/test05") Public ModelAndView Defina diretamente o caminho de mapeamento () {ModelAndView MAV = new ModelAndView (); Mav.SetViewName ("Forward:/test03"); // ou //mav.setViewName(urlBasedViewResolver.forward_url_prefix+"/test03 "); retornar Mav;} Quando a string for modificada com a frente:, a situação de processamento muda para converter da solicitação do controlador para outro controlador. Se o redirecionamento for realizado, o código será o seguinte:
@RequestMapping (Path = "/test06") public ModelAndView set redirect () {ModelAndView MAV = new ModelAndView (); Mav.SetViewName ("Redirect:/test04"); retornar Mav;} 6.InternalResourceViewResolver Apêndice
InternalResourceViewResolver: é uma subclasse do URLBasedViewResolver, por isso suporta todos os recursos suportados pelo URLBasedViewResolver.
Em aplicações práticas, o internoResourceViewResolver também é o resolvedor de visualização mais amplamente usado. Então, quais são os recursos exclusivos do internoResourceViewResolver?
Do ponto de vista literal, podemos interpretar o internoResourceViewResolver como um resolvedor de exibição de recursos internos. Este é um recurso do internoResourceViewResolver.
InternalResourceViewResolver resolverá os nomes de visualização retornados nos objetos internosResourceView. O InternalResourceView armazenará os atributos do modelo retornado pelo método do processador do controlador nos atributos de solicitação correspondente e redirecionará a solicitação para o URL de destino no lado do servidor por meio do requestDispatcher.
Por exemplo, no internoResourceViewResolver, prefixo =/web-inf/, sufix = .jsp é definido no internoResourceViewResolver e, em seguida, o nome da exibição retornado pelo método do processador do controlador solicitado é o teste. No momento, o InternalResourceViewResolver analisará o teste em um objeto InternalResourceView, primeiro armazenará os atributos de modelo retornado no atributo httpServletRequest correspondente e depois usará o requestDispatcher para encaminhar a solicitação para /web-inf/test.jsp no lado do servidor. Essa é uma característica muito importante do internoResourceViewResolver. Todos sabemos que o conteúdo armazenado em / web-inf / não pode ser solicitado diretamente através da solicitação de solicitação. Por motivos de segurança, geralmente colocamos o arquivo JSP no diretório da Web-Inf e a maneira como os saltos internos do RESOURCEVIEW no lado do servidor podem resolver bem esse problema. Abaixo está uma definição de um internoResourceViewResolver. De acordo com esta definição, quando o nome de visualização lógico retornado é teste, o internoResourceViewResolver adicionará um prefixo e sufixo definidos, forme "/web-inf/test.jsp" e depois o use como um URL do InternalResourceView para criar um novo objeto de internalResourceView.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.