标签:Fix 商品 显示 类别 Servle numbers war hash conf
SpringMVC是Spring的一个模块,提供web层解决方案(基于mvc设计架构)
MVC是一个设计模式,在b/s系统的应用:
第十一步:DispatcherServlet向用户响应结果(jsp页面、json数据。。。。)
DispatcherServlet:前端控制器,由SpringMVC提供
HandlerMappting:处理器映射器,由SpringMVC提供
HandlerAdapter:处理器适配器,由SpringMVC提供
!!!Handler:处理器,需要程序员开发
ViewResolver:视图解析器,由SpringMVC提供
!!!View:真正视图页面需要由程序编写
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0-alpha-1</version>
<scope>provided</scope>
</dependency>
<!-- 前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 加载springmvc配置 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 配置文件的地址
如果不配置contextConfigLocation,
默认查找的配置文件名称classpath下的:servlet名称+"-serlvet.xml"即:springmvc-serlvet.xml
-->
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--
可以配置/ ,此工程 所有请求全部由springmvc解析,此种方式可以实现 RESTful方式,需要特殊处理对静态文件的解析不能由springmvc解析
可以配置*.do或*.action,所有请求的url扩展名为.do或.action由springmvc解析,此种方法常用
不可以/*,如果配置/*,返回jsp也由springmvc解析,这是不对的。
-->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<!-- 根据bean的name进行查找Handler 将action的url配置在bean的name中 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
程序编写Handler根据适配器的要求编写。
SimpleControllerHandlerAdapter适配器要求
通过源码中supports方法知道Handler必须要实现哪个接口,此SimpleControllerHanlderAdapter中需要实现Controller接口
public boolean supports(Object handler)
/* */ {
/* 42 */ return handler instanceof Controller;
/* */ }
public class ItemController1 implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
// 使用静态数据将商品信息列表显示在jsp页面
// 商品列表
List<Items> itemsList = new ArrayList<Items>();
Items items_1 = new Items();
items_1.setName("联想笔记本");
items_1.setPrice(6000f);
items_1.setCreatetime(new Date());
items_1.setDetail("ThinkPad T430 联想笔记本电脑!");
Items items_2 = new Items();
items_2.setName("苹果手机");
items_2.setPrice(5000f);
items_2.setDetail("iphone6苹果手机!");
itemsList.add(items_1);
itemsList.add(items_2);
ModelAndView modelAndView = new ModelAndView();
//将数据填充到request
// request.setAttribute("itemsList", itemsList);
modelAndView.addObject("itemsList", itemsList);
//指定转发的jsp页面
modelAndView.setViewName("/WEB-INF/jsp/itemsList.jsp");
return modelAndView;
}
}
<!-- 配置Handler 由于使用了BeanNameUrlHandlerMapping处理映射器,name配置为url -->
<bean id="itemController1" name="/itemList.action"
class="com.hao.controller.ItemController1" />
<!-- 配置视图解析器 要求将jstl的包加到classpath -->
<!-- ViewResolver -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<bean id="itemController1" name="/itemList.action"
class="com.hao.controller.ItemController1" />
<!--简单url映射 集中配置bean的id对应 的url -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/itemsTest1.action">itemController1</prop>
<prop key="/itemsTest2.action">itemController2</prop>
</props>
</property>
</bean>
要求Handler 实现 HttpRequestHandler接口
开发Handler
public class ItemController2 implements HttpRequestHandler {
@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 使用静态数据将商品信息列表显示在jsp页面
// 商品列表
List<Items> itemsList = new ArrayList<Items>();
Items items_1 = new Items();
items_1.setName("联想笔记本");
items_1.setPrice(6000f);
items_1.setCreatetime(new Date());
items_1.setDetail("ThinkPad T430 联想笔记本电脑!");
Items items_2 = new Items();
items_2.setName("苹果手机");
items_2.setPrice(5000f);
items_2.setDetail("iphone6苹果手机!");
itemsList.add(items_1);
itemsList.add(items_2);
request.setAttribute("itemsList", itemsList);
//转发到jsp页面
request.getRequestDispatcher("/WEB-INF/jsp/itemsList.jsp").forward(request, response);
}
}
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
springmvc.xml
中配置RequestMappingHandlerMapping
:使用RequestMappingHandlerMapping
需要在Handler
中使用@controller
标识此类是一个控制器,使用@requestMapping
指定Handler方法所对应的url
。org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
RequestMappingHandlerAdapter
,不要求Handler
实现任何接口,它需要和 RequestMappingHandlerMapping
注解映射器配对使用,主要解析Handler
方法中的形参。@Controller
public class ItemController3 {
//商品列表,@RequestMapping中url建议和方法名一致,方便开发维护
@RequestMapping("/queryItems")
public ModelAndView queryItems(){
// 使用静态数据将商品信息列表显示在jsp页面
// 商品列表
List<Items> itemsList = new ArrayList<Items>();
Items items_1 = new Items();
items_1.setName("联想笔记本");
items_1.setPrice(6000f);
items_1.setCreatetime(new Date());
items_1.setDetail("ThinkPad T430 联想笔记本电脑!");
Items items_2 = new Items();
items_2.setName("苹果手机");
items_2.setPrice(5000f);
items_2.setDetail("iphone6苹果手机!");
itemsList.add(items_1);
itemsList.add(items_2);
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("itemsList", itemsList);
//指定逻辑视图名
modelAndView.setViewName("itemsList");
return modelAndView;
}
//商品添加
//商品删除
}
@Controller
、@Service
、@component
、@Repsitory
<!-- 注解的handler,单个配置 -->
<!-- <bean class="com.hao.controller.ItemController3"/> -->
<!-- 使用spring组件扫描 -->
<context:component-scan base-package="com.hao.controller" />
//单独将商品类型的方法提出来,将方法返回值填充到request,在页面显示
@ModelAttribute("itemsType")
public Map<String, String> getItemsType()throws Exception{
HashMap<String, String> itemsType = new HashMap<String,String>();
itemsType.put("001", "数码");
itemsType.put("002", "服装");
return itemsType;
}
商品类别:
<select>
<c:forEach items="${itemsType }" var="item">
<option value="${item.key }">${item.value }</option>
</c:forEach>
</select>
<!-- 配置视图解析器 要求将jstl的包加到classpath -->
<!-- ViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
真正视图地址==前缀+逻辑视图名+后缀
标签:Fix 商品 显示 类别 Servle numbers war hash conf
原文地址:https://www.cnblogs.com/haoworld/p/springmvc-ru-men.html