spingmvc浅尝之一:小试牛刀

Spring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对Struts 2的超越。现在越来越多的开发团队选择了Spring MVC。

Struts2也是非常优秀的MVC构架,优点非常多比如良好的结构,拦截器的思想,丰富的功能。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降,应避免使用这些功能。而Struts2的多层拦截器、多实例action性能都很好。

Spring的官方下载网址是:http://www.springsource.org/download

Eclipse 下载地址  http://yunpan.cn/Q7ws623WhxEZg  提取码 ca2c

小马哥说过,最好的学习方法就是活学活用,所以先配置一个小项目感受一下。

1)新建一个web project,这里我用的是Eclipse。

导入相关包

2)配置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">
    <!-- web.xml 的加载顺序是:context-param - listener - filter - servlet ,
	而同个类型之间的实际程序调用的时候的顺序是根据对应的 mapping 的顺序进行调用的 -->

         <listener>
	  	<listener-class>org.springframework.web.context.ContextLoaderListener </listener-class>
  	</listener>
 <!-- 使用ContextLoaderListener配置时,需要告诉它Spring配置文件的位置 -->
 <!-- 如果没有指定,上下文载入器会在/WEB-INF/applicationContext.xml中找Spring配置文件 -->
 <!-- 我们可以通过在Servlet上下文中设置contextConfigLocation参数,来为上下文载入器指定一个或多个Spring配置文件 -->
 <!-- 注意:contextConfigLocation参数是一个用逗号分隔的路径列表,其路径是相对于Web系统的根路径的 -->

<!-- SpringMVC的前端控制器 -->
  <!-- 当DispatcherServlet载入后,它将从一个XML文件中载入Spring的应用上下文,该XML文件的名字取决于<servlet-name> -->
 <!-- 这里DispatcherServlet将试图从一个叫做springmvc-servlet.xml的文件中载入应用上下文,其默认位于WEB-INF目录下 -->
<!-- 所以ContextLoaderListener参数值也可写成<param-value>classpath:applicationContext-*.xml</param-value> -->
 <servlet>
     <servlet-name>springMVC</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 

      <load-on-startup>1</load-on-startup>
 </servlet>
   <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
         <url-pattern>/</url-pattern>
    </servlet-mapping>
<!-- 解决编码问题-->
 <filter>
      <filter-name>encodingFilter</filter-name>
      <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
      <init-param>
         <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
      </init-param>
  <init-param>
<pre>        <param-name>forceEncoding</param-name>  
         <param-value>true</param-value>     
   </init-param>  
 </filter> 
  <!-- encoding filter for jsp page --> 
  <filter-mapping>      
      <filter-name>encodingFilter</filter-name>    
      <url-pattern>/*</url-pattern> 
  </filter-mapping>
<!-- 通过错误码来配置error-page ,配置了当系统发生404错误时,跳转到错误处理页面NotFound.-->

	<error-page>
	    <error-code>404</error-code>
	    <location>/page404.html</location>
	</error-page>
	<!--  通过异常的类型配置error-page ,配置了当系统发生java.lang.NullException(即空指针异常)时,跳转到错误处理页面error.jsp  -->
	<error-page>
	    <exception-type>java.lang.NullPointerException</exception-type>
	    <location>/WEB-INF/jsp/error.jsp</location>
	</error-page>
</web-app>




其次是springmvc-servlet.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
           http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.1.xsd
           http://www.springframework.org/schema/mvc
           http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">

    <!-- 启动扫描所有的controller -->
    <context:component-scan base-package="com.test.action"/>

    <!--  主要作用于@Controller,激活该模式

    	下面是一种简写形式,完全可以手动配置替代这种简写形式;
    	 它会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,
    	   是spring MVC为@Controllers分发请求所必须的
     -->
<!--     <mvc:annotation-driven/> -->
    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8" />
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

    <!-- 配置js,css等静态文件直接映射到对应的文件夹,不被DispatcherServlet处理 -->
    <mvc:resources location="/WEB-INF/resources/**" mapping="/resources"/>
    <mvc:resources mapping="/javascript/**" location="/static_resources/javascript/"/>
    <mvc:resources mapping="/styles/**" location="/static/css/"/>
    <mvc:resources mapping="/images/**" location="/static/images/"/> 

    <!-- 配置页面访问地址www.xxx.com/about返回的静态html文件 -->
    <mvc:resources mapping="/about/**" location="/WEB-INF/html/"/>
    <!-- 走servlet的默认配置,先走默认的web.xml配置的servlet,没有的话才找对应controller -->
    <mvc:default-servlet-handler />

    <!-- jsp页面解析器,当Controller返回XXX字符串时,先通过拦截器,然后该类就会在jsp/目录下,查找XXX.jsp文件-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    	<property name="prefix" value="/WEB-INF/jsp/"></property>
    	<property name="suffix" value=".jsp"></property>
    </bean>

    <bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding">
			<value>UTF-8</value>
		</property>
		<property name="maxUploadSize">
			<value>32505856</value><!-- 上传文件大小限制为31M,31*1024*1024 -->
		</property>
		<property name="maxInMemorySize">
			<value>4096</value>
		</property>
	</bean>

 </beans>

3)核心控制器 UserController

package com.tgb.web.controller.annotation;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class UserController {

	@RequestMapping(value="/user/addUser",method=RequestMethod.POST)
	public ModelAndView addUser(){

		String result = "this is addUser-----";
		return new ModelAndView("/jquery","result",result);
	}
	@RequestMapping(value="/user/delUser",method=RequestMethod.GET)
	public ModelAndView delUser(){

		String result = "this is delUser";
		return new ModelAndView("/jquery","result",result);
	}
	@RequestMapping(value="/user/toUser",method=RequestMethod.GET)
	public ModelAndView toUser(){

		return new ModelAndView("/jquery");
	}
<ol class="dp-j" start="1"><li class="alt"><span><span class="comment">
 //ModelAndView类在SpringMVC中是一个很重要的概念     
//控制器执行方法都必须返回一个ModelAndView,ModelAndView对象保存了视图以及视图显示的模型数据      
//第一个参数:视图组件的逻辑名称。这里视图的逻辑名称是userlist,视图解析器会使用该名称查找实际的View对象
//第二个参数:传递给视图的,模型对象的名称</span><span>  </span></span></li><li class="alt">
//第三个参数:传递给视图的,模型对象的值  

 }

jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript" src="../js/jquery-1.7.1.min.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<!-- <script type="text/javascript">
	$(document).ready(function(){
		alert(11);
	});
</script> -->
</head>
<body>
	<h>jquery请求</h>
	<form action="/springmvc01/user/addUser" method="post">

	<input type="submit" value="post request" >
	</form>

	<br>
	<div>
		${result }
	</div>

</body>
</html>

四、配置tomcat 启动,并访问localhost

http://localhost:8080/springmvc01/user/addUser

时间: 2024-10-13 13:51:56

spingmvc浅尝之一:小试牛刀的相关文章

浅尝awk

前几天写了sed,这次来继续学习一下它的好兄弟,awk,用了两者,一个这样的感觉,两者都可以用来处理匹配,如果想对文本做处理,sed的删除,匹配,替换要用的频繁一些,如果要深入文本的每一行,对每一行进行一些列处理,例如,统计,然后格式化输出,awk就可以派上用场了 查看自己ubuntu当前的awk which awk,其实用的是/usr/bin/mawk 在学习sed篇中,我们知道,sed是读取文本的每一行到一个模式空间,然后对模式空间的内容进行处理,其实awk差不多,它也是对模式空间进行处理,

浅尝MongoDB

浅尝MongoDB NoSQL Mongo 数据库 安装mongoDB Linux 以linux环境为例,安装mongodb,最简单的方式就是 利用自带的包管理器 我的环境是 linux deepin 15.4 (基于debian 8) sudo apt install mongodb ~$ mongo -version MongoDB shell version: 3.2.11 当你看到这个说明你的mogodb已经安装完成. Windows 略 windows很容易 去官网下个包,无脑下一步即

浅尝key-value数据库(二)——MongoDB的优与劣

浅尝key-value数据库(二)——MongoDB的优与劣 MongoDB的名字取自英文单词"humongous"的中间五个字母,是一个C++开发的基于分布式文件存储的数据库开源项目.他的文件存储格式是BSON(Binary JSON),因此可以高效存储二进制数据,例如图像.视频等大对象. 由于我是CentOS x86_64的系统,于是安装MongoDB非常简单: vi /etc/yum.repos.d/mongo.repo [10gen] name=10gen Repository

浅尝key-value数据库(一)——一览NoSQL

浅尝key-value数据库(一)——一览NoSQL 最近由于一个项目的关系,研究了一下key-value数据库这个最近很火的概念.本系列从项目需求的角度分析并测试了几个key-value数据库的性能. key-value数据库,又称作NoSQL数据库,他的最基本的基础原理就是CAP. CAP是2000年PODC上Eric Brewer提出的一个概念,即 C -> Consistency; A -> Availability; P -> Tolerance to network Part

浅尝key-value数据库(三)——MongoDB的分布式

浅尝key-value数据库(三)——MongoDB的分布式 测试了单机MongoDB的随机读和写入性能,这一节来讲一讲MongoDB的分布式. MongoDB的分布式分成两种,一种是Replication,一种是Sharding.我们主要来看一下Sharding. 先贴一张结构示意图: MongoDB Auto-Sharding的配置非常简单,在不同的机器分别开启shard, config server, mongos的进程即可.(假设config serevr的IP为192.168.1.11

浅尝ECMAScript6

浅尝ECMAScript6 简介 ECMAScript6 是最新的ECMAScript标准,于2015年6月正式推出(所以也称为ECMAScript 2015),相比于2009年推出的es5, es6定义了更加丰富的语言特性,基于该标准的Javascript语言也迎来了语法上的重大变革.本文列举了部分es6新特性,希望之前没接触es6的小伙伴读完本文能对下一代js编程有一个初步的认识. 箭头函数 箭头函数用 "=>"简化函数定义,类似于C#, Java8中的Lambda表达式,支

浅尝CKRule规则引擎

最近在参与一家材料公司的ERP系统开发,主要负责仓储系统.由于该公司的业务流程相对复杂且多变,做得那是万般痛苦,成天沉浸在业务变更代码大改的死循环里,久而久之,有种遥遥无期的绝望. 怎样才能很好或者说比较轻松的去适应这样的复杂业务变化?最近真没少在园里看大神们的贴子,但是收获甚微,也许是我个人理解的深度不够.前两天无聊的时候,把心里的唠叨在圈子里发了下,后来有人给我推荐了个叫“CKRule”的规则引擎.规则引擎?小弟孤陋寡闻还是第一次听,一番百度后找到了CKRule的官网,果断下载了试用版.文件

Python图形界面开发编程:wxPython(浅尝篇)

Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里.Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中. wxPython:wxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,

来自后端的突袭? --开包即食的教程带你浅尝最新开源的C# Web引擎 Blazor

来自后端的突袭? --开包即食的教程带你浅尝最新开源的C# Web引擎 Blazor 在今年年初, 恰逢新春佳节临近的时候. 微软给全球的C#开发者们, 着实的送上了一分惊喜. 微软正式开源Blazor ,将.NET带回到浏览器. 这个小惊喜, 迅速的在dotnet开发者中间传开了. 而就在昨天(2018年3月22日) Blazor发布了它的第一次Release. Blazor到底是个什么样的东西呢?我们是否真的可以携着C#语言进入前端的市场中? 不如现在就跟我一起体验dotnet blazor