SpringMVC使用过程

  • 将spring-framework-3.1.1.RELEASE-with-docs.zip/dist/下的所有jar包拷贝到项目的WEB-INF/lib目录下
  • web.xml

前端控制器配置:

 <!-- 用的是springmvc自带的servlet -->
  <servlet>
  	<servlet-name>springmvc</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 	<!--springmvc.xml  具体进行配置,这里我们只是读取配置文件  -->
 	<init-param>
 		<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>

​

           完整的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>
  
  <!-- springmvc 前端控制器配置 -->
  <!-- 用的是springmvc自带的servlet -->
  <servlet>
  	<servlet-name>springmvc</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 	<!--springmvc.xml  具体进行配置,这里我们只是读取配置文件  -->
 	<init-param>
 		<param-name>contextConfigLocation</param-name>
 		<param-value>classpath:springmvc.xml</param-value>
 	</init-param>
  </servlet>
  <servlet-mapping>
  <!--   第一种   *.action   只有访问到 springmvc/login.action  有.action才触发
                         springmvc
  		 第二种    /  符合现在网页的url 样式  RESTful风格
  		 第三种     /*    最好不要使用   最终处理完需要跳转到一个jsp  代表所有的内容都会经过
  		 DispatcherServlet  再解析jsp   会报错
   -->
  	<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>

只用SpringMVC开发web应用(没结合Spring时),好像不用配置listener-class;只有SpringMVC无非只需要创建SpringMVC的容器,那么只要有spring-mvc.xml配置文件就可以了,通常会在web.xml中<servlet> <init-param>  </init-param>  </servlet>部分配置,当然你硬要用ContextLoaderListener来搞SpringMVC也可以。  (配置了一个DispatchServlet后,该servlet在web应用程序启动时立即加载,DispatchServlet加载时会需要一个Spring mvc的配置文件,通过这个配置文件创建一个WebApplicationContext容器对象,也就是上下文环境。)   

  • springmvc.xml

         配置Controller:方式多种,使用扫描包的方式(Spring和SpringMVC都有),主要扫描Controller,把标记了@Controller注解的类转换为bean

<context:component-scan base-package="cn.neusoft.controller"></context:component-scan>

         开启注解,能够支持所有MVC注解

<mvc:annotation-driven />

         配置ViewResolver

<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<!-- 配置jsp 页面的前缀 -->
	<property name="prefix" value="/WEB-INF/jsp"></property>
	<!-- 配置后缀 -->
	<property name="suffix" value=".jsp"></property>
</bean>

        完整的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 ">

<!-- 方法一  配置Controller -->   
<!-- 非注解的controller配置要自己加载类,同时给controller起了name  -->
<bean id="UsersController1" name="/users.action" class="cn.neusoft.controller.UsersController1"></bean>

<!-- 方法二  项目中一般使用 扫描包的方式 进行  配置 -->
<!-- 好像主要给注解类controller来让spring加载进来的,如果只非注解的controller可以不写 -->
<context:component-scan base-package="cn.neusoft.controller"></context:component-scan>



<!-- 实际开发中使用    加载注解的  适配器、映射器  、   Json转换器     有两种方法,下面的是方法一,还有一种类似非注解的适配器和映射器配置 -->
<!-- 方法一   SpringMVC web 要用的配置和支持mvc注解,说白了就是使Controller中可以使用MVC的各种注解。 -->
<mvc:annotation-driven></mvc:annotation-driven>				

<!-- 方法二   非注解的    映射器   以及    适配器 -->
<!-- 配置处理器映射器 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!-- 配置处理器适配器 -->
	<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
<!-- 另外一个适配器 -->
	<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>



<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<!-- 配置jsp 页面的前缀 -->
	<property name="prefix" value="/WEB-INF/jsp"></property>
	<!-- 配置后缀 -->
	<property name="suffix" value=".jsp"></property>
</bean>


</beans>
  • 下面只使用Controller层和假数据演示

       Controller这里有两种写法,一种基于配置的,一种是基于注解的

       第一种,基于配置

该Controller类必须实现(implements)org.springframework.web.servlet.mvc.Controller  并 重写 其 ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception的方法;

并且需要在 springmvc.xml 里进行配置: 

<bean id="UsersController1" name="/users.action" class="cn.neusoft.controller.UsersController1"></bean>

* 并且对于HandlerMapping 需要使用 org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,HandlerAdapter 需要配置 org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter(这现在大多用<mvc:annotation-driven></mvc:annotation-driven>)

public class UsersController1 implements Controller {
	//两种返回信息+视图名的方法都可以
	//第一种:implements Controller  然后实现下面这个方法
	//第二种:见UsersController2,又有两种,用model存储数据和用request.setAttribute存储数据
	public ModelAndView handleRequest(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		// TODO Auto-generated method stub
		//模拟一下数据库中信息
		List<Userinfo> list = new ArrayList<Userinfo>();
		//向list  注入数据
		Userinfo user1 = new Userinfo();
		user1.setUserid(1);
		user1.setUsername("neusoft");
		user1.setPwd("123");
		Userinfo user2 = new Userinfo();
		user2.setUserid(2);
		user2.setUsername("东软");
		user2.setPwd("123");		
		
		list.add(user1);
		list.add(user2);
		
		ModelAndView mav = new ModelAndView();
		//在ModelAndView   把 list 的值  传递
		//相当于  实现了  request.setAttribute("users",list);
		mav.addObject("users",list);
		//指定一个显示的   jsp 页面
		mav.setViewName("/users");
		return mav;
	}

}

第二种,基于注解

只需要 @Controller 既可以标记该类位Controller,@RequestMapping 注解 实现对于url的 path 进行注册

基于注解时,可以通过在方法的参数中引入Model,也可以使用request.setAttribute存储数据

//使用@Controller  标识这个是一个控制器
@Controller
public class UsersController2 {
	
	//使用 RequestMapping   标识了 访问地址		 标注在方法上时,value 表示访问该方法的 URL 地址,提供进一步的细分映射信息;标注在类上时,value 相当于一个命名空间,即访问该 Controller 下的任意方法都需要带上这个命名空间,表示类中的所有响应请求的方法都是以该地址作为父路径。。
	//注意,我在项目的  web.xml中配置了   只能访问   .action的时候才能触发
	//网页地址中需要输入    http://localhost:8080/springmvc/users2.action
	//来访问该  地址
		
	//访问地址: http://localhost:8080/springmvc/test.action
	//注解的Controller  使用@RequestMapping 时的访问地址是在它的value后加上.action
	@RequestMapping("test")
	public String test(HttpServletRequest request){
		System.out.println("执行该方法");
		request.setAttribute("users2", "neusoft");
		//return   语句可以返回页面,  由于在springmvc配置中我们配置了前缀和后缀
		//会访问到      前缀+ /user2 + 后缀
		//页面跳转地址      相当于执行了   转发   request.getRequestDispatcher
		//跳转到   WEB-INF/jsp/users2.jsp
		return "/users2";
	}
	
	//访问地址:http://localhost:8080/springmvc/users2.action
	@RequestMapping("users")
	public String users(HttpServletRequest request){
		
		List<Userinfo> list = new ArrayList<Userinfo>();
		//向list  注入数据
		Userinfo user1 = new Userinfo();
		user1.setUserid(1);
		user1.setUsername("neusoft");
		user1.setPwd("123");
		Userinfo user2 = new Userinfo();
		user2.setUserid(2);
		user2.setUsername("东软");
		user2.setPwd("123");		
		
		list.add(user1);
		list.add(user2);
		request.setAttribute("users",list);
		return "/users";
	}
}

使用Model存储数据:

    /*
     * 映射了两个路径/talent/list,/talent
     * */
    @RequestMapping(value = {"", "/list"})                     //数组
    public String talentList(Talent conTalent, Model model, Integer pagecount) {                       
        //查询数据
        List<Talent> list = talentService.findList(conTalent);                      
        model.addAttribute("talents",list);

        //将视图处理的任务转交给jsp
        return "talent/talents";
    }
  • 页面(这里是jsp)接收获取的数据
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>My JSP 'users.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    <center>
    	<h1>用户列表</h1>
    	<table border="1">
    		<tr>
    			<td>用户编号</td>
    			<td>用户名</td>
    			<td>密码</td>
    		</tr>
    		<!-- 第二行开始要作信息显示了,信息比较多,我们使用循环 -->
    		<!-- c:forEach 标签   items 是用来接收数据的   var 用来定义别名 -->
    		<c:forEach items="${users }" var="d">
    		<tr>   <!--${d.userid }    .后面的  userid  是
    		        Userinfo 实体类中  属性的名字 ,这里   必须完全对应,大小写完全一致
    		  -->
    			<td><a href="#">${d.userid }</a></td>
    			<td>${d.username }</td>
    			<td><img alt="${d.pwd }" src="imgs/${d.pwd }"></td>
    		</tr>
    		</c:forEach>
    	</table>    
    </center>
  </body>
</html>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值