02_入门程序(非注解方式,了解)

【工程所需jar包】

【建工程几个注意点】(看红色框)

【工程截图】

【编写代码流程】

1.配置前端控制器:web.xml】

在web.xml中编写前端控制器。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    id="WebApp_ID" version="2.5">
  <display-name>SpringMVC001</display-name>
  
  <!-- springMVC前端控制器 -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
    <!-- contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器、适配器等等)-->   
<param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>

[ 注意1 ]

<init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:springmvc.xml</param-value>
</init-param>

contextConfigLocation配置springmvc加载的配置文件,

如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-servlet.xml(springmvc-servlet.xml)

[ 注意2 ]

 <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.action</url-pattern>
  </servlet-mapping>

对于<url-pattern>,

第一种: *.action ,  访问以" .action "结尾,由前端控制器DispatcherServlet进行解析

第二种:   /          ,  所有访问的地址都要由前端控制器DispatcherServlet进行解析,对于静态文件需配置无需DispatcherServlet进行解析。

第三种:   /*        ,   这种配置方式错误的,使用这种方式配置,最终要转发到一个jsp页面时,仍然会由DispatcherServlet解析jsp地址,不能根据jsp页面找到handler,导致报错。

 

2配置处理器适配器:springmvc.xml】

在classpath下的springmvc.xml中配置 处理器适配器:

<!-- 
    处理适配器 注意:所有的处理适配器都实现了HandlerAdapter接口
--> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />

查看源代码

此处理器适配器能执行实现Controller的Handler:

Controller接口源码:

 

3.开发Handler: ItemsController.java】

package cn.Higgin.ssm.controller;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import cn.Higgin.ssm.po.Items;

public class ItemsComtroller implements Controller{

    @Override
    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        
        //调用Service查找数据库,查询商品列表,这里使用静态数据模拟
        List<Items> itemsList=new ArrayList<Items>();
        //向list中填充数据
        Items item1=new Items();
        item1.setName("华硕笔记本");
        item1.setPrice(600f);
        item1.setDetail("华硕啦啦啦啦啦啦啦啦啦");
        
        Items item2=new Items();
        item2.setName("联想笔记本");
        item2.setPrice(300f);
        item2.setDetail("联想啦啦啦啦啦啦啦啦啦");
        
        itemsList.add(item1);
        itemsList.add(item2);
        
        //返回ModelAndView
        ModelAndView modelAndView=new ModelAndView();
        //相当于request的setAttribute,在jsp页面中通过itemList来获取
        modelAndView.addObject("itemsList",itemsList);
        //指定视图
        modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
        
        System.out.println("提示:ItemsComtroller.............");
        
        return modelAndView;
    }
}

[ 注意 ]

Handler处理器需要实现Controller接口,才能由springmvc.xml配置的

<bean  class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />

中的org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter处理器适配器进行执行。

4.配置Handler:springmvc.xml】

将编写的Handler在spring容器中进行加载

<!--Handler -->
<bean name="/queryItems.action" class="cn.Higgin.ssm.controller.ItemsComtroller"/>

5.配置处理器映射器:springmvc.xml】

在springmvc.xml中配置处理器映射器

<!-- 
       处理器映射器 
    将bean的name作为url进行查找,需要在配置Handler时指定beanname(即url)
--> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

6.配置视图解析器:springmvc.xml】

在springmvc.xml配置解析jsp的视图解析器

<!-- 
    视图解析器 解析jsp页面,默认使用jstl标签,classpath下面必须有jstl的jar包
--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>

 

【完整springmvc.xml】

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:mvc
="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx
="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <!-- 配置Handler --> <bean name="/queryItems.action" class="cn.Higgin.ssm.controller.ItemsComtroller"/> <!-- 处理器映射器 将bean的name作为url进行查找,需要在配置Handler时指定beanname(即url)--> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!-- 处理适配器 注意:所有的处理适配器都实现了HandlerAdapter接口--> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> <!-- 视图解析器 解析jsp页面,默认使用jstl标签,classpath下面必须有jstl的jar包--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/> </beans>

7.前端页面:itemsList.jsp】

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"  prefix="fmt"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查询商品列表</title>
</head>
<body> 
<form action="${pageContext.request.contextPath }/item/queryItem.action" method="post">
查询条件:
<table width="100%" border=1>
<tr>
<td><input type="submit" value="查询"/></td>
</tr>
</table>
商品列表:
<table width="100%" border=1>
<tr>
    <td>商品名称</td>
    <td>商品价格</td>
    <td>生产日期</td>
    <td>商品描述</td>
    <td>操作</td>
</tr>
<c:forEach items="${itemsList }" var="item">
<tr>
    <td>${item.name }</td>
    <td>${item.price }</td>
    <td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
    <td>${item.detail }</td>
    
    <td><a href="${pageContext.request.contextPath }/item/editItem.action?id=${item.id}">修改</a></td>

</tr>
</c:forEach>

</table>
</form>
</body>

</html>

 

【运行结果】

访问:http://localhost:8080/SpringMVC001/queryItems.action

控制台输出,说明执行了ItemsComtroller.java中的代码

 

【比较两种页面访问出错的情况对比】

 【错误1】

故意改错访问地址为:http://localhost:8080/SpringMVC001/queryItems1111111.action

错误分析:处理器映射器根据url找不到对应的Handler,即url错误。

 

【错误2】

修改ItemsController.java中的指定视图

改为:

访问正确的url,出现的错误如下:

错误分析:处理器映射器根据url找到了Handler,转发的jsp页面找不到,说明jsp页面地址错误了。

 

posted @ 2016-09-09 17:07  HigginCui  阅读(831)  评论(0编辑  收藏  举报