JavaEE之--------SpringMVC框架的搭建(注解实现)

Spring这个强大的平台,可以放很多bean,当然像之前那样自己配置多个类确实麻烦

现在采用简单的注解实现

首先我们需要导入spring的包,带很多种

我们需要配置spring的配置文件

首先我们查看web.xml文件的配置

<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
	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_3_0.xsd">
  <display-name></display-name>	

  <context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:beans.xml<!--加载处于classpath下面目录的xml文件,通过核心类ContextLoaderListener进行加载-->
		</param-value>
  </context-param>

  <filter>
    <filter-name>char</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  	<init-param><!-- spring框架中自带的字符编码解析其,就不用我们自己去写字符编码过滤器 --->
  	<param-name>encoding</param-name>
  	<param-value>UTF-8</param-value>
  	</init-param>
  </filter>
  <filter-mapping>
     <filter-name>char</filter-name>
     <servlet-name>hncu</servlet-name><!-- 拦截的路径是serlvet的name是hncu的 -->
  </filter-mapping>

  <listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <servlet>
     <servlet-name>hncu</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 配置核心分配器 -->
  	<!-- 可以通过自己配置namespace来指定SpringMVC配置文件名 -->
  	<init-param>
  	  <param-name>namespace</param-name>
  	  <param-value>hncu-servlet</param-value><!--解决在项目启动的时候系统自动加载的servlet-name.xml文件的麻烦,可以自己进行配置-->
  	</init-param>
  </servlet>
  <servlet-mapping>
     <servlet-name>hncu</servlet-name>
     <url-pattern>/sp/*</url-pattern><!-- 拦截路径进去springmvc的范围 -->
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app></span>

web.xml文件中一般只是配置spring的加载器,和拦截进去springmvc的路径。

beans.xml(spring的配置文件)

<span style="font-size:18px;"><?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:context="http://www.springframework.org/schema/context"
		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.0.xsd
				http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
				http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

	<!--配置可以识别@RequestMapping注解的类  -->
	<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean><!-- 配置默认的注解类 -->
	<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"><!-- 进行url地址映射,不配置这个的时候,当项目启动会需要一个name-servlet-->
    <!--xml文件这两个文件原本就是属于同一个空间的内容,要是不进行地址映射,程序是查找不到 -->
	</bean>

    <bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">  <!-- 当控制器请求之后,返回值的肯定会转到某个页面,就需要地址资源绑定 -->
       <property name="basenames">
         <list> <!--默认查询classpath:hncu.properties  -->
            <value>hncu</value> <!-- 指定资源配置文件名为hncu.properties -->
         </list>
       </property>
       <property name="defaultParentView" value="hncu"></property>
    </bean>

    <!-- 配置一个用于文件上传的核心类     注意:id一定要配
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >
    </bean>
    -->
    <!-- 这是自动扫描的项目里面,下面配置的路径里面待有注解的类,进行自动扫描 -->
    <context:component-scan base-package="cn.hncu">
    </context:component-scan>

</beans></span>

资源绑定核心类的书写

<span style="font-size:18px;">hncu.(class)=org.springframework.web.servlet.view.JstlView
hncu.url=/jsps/hello.jsp</span>

这里面可以指定资源是某种类型,这里是jsp,和可以是xml,和pdf等文件

基本的配置就搞定了;

现在需要是前台请求后台,就不需要写serlvet

前台代码

  <span style="font-size:18px;"><hr/>
    <h2>学生信息输入</h2>
    <form action='<c:url value="/sp/saveStud"></c:url>' method="post">
       <input type="text" name="name" /><br/>
       <input type="text" name="age" /><br/>
       <input type="text" name="addr.city" /><br/>
       <input type="submit">
    </form></span>

我们能看到在上面的urll地址请求中,直接请求的是 /sp/savaStud,sp是进入springmvc,后面的路径就只需要我们在类的方法上面添加注解就可以搞定了。

<span style="font-size:18px;">@Controller
public class StudController {
	@Resource(name="studService") //注入
	private IStudService service;

	@RequestMapping(value="/saveStud",params={"name"})
	public String save(User user){
    	service.save(user);
		return "hncu";
    }
}</span>

这个简单的代码就是能够让前台访问到这里

注意:必须配置之前的配置文件

请求的类里面必须在类前面添加@controller注解,在相应的方法时,添加@RequestMapping(value="/savaStud");这就能请求这个函数了,当我们需要什么参数的,只需要在函数的添加即可,如 需要 request和response对象,serlvet里面的对象,这里的就可以直接添加。

还可以要求必须传什么值进来,和不准传什么值进来等等,在参数里都可以进行。

下面是代码的演示:

<span style="font-size:18px;">@Controller //声明这是采用注解的类
//@RequestMapping(value="/aa")   //这里声明就是为下面路径的父页面,则下面的访问路径的前面都必须带这个如访问  m1就是  项目名/sp/aa/aa
public class MyControllerAnno implements ServletContextAware{

	@RequestMapping(value="/aa") //当这样标明之后,我们采用项目名+/拦截路径名/aa就可以访问  用于影射路径的---由这里的value值决定访问地址
	public String m1(){
		System.out.println("进来了");
		return "xyz";
	}

	//可以随意添加 Servlet API类的参数类型作为入参
	@RequestMapping(value="/m2")
	public String m2(@RequestParam("nm")String name,HttpServletRequest req,
			Integer age){
		System.out.println("name:"+name+",age:"+age);
		System.out.println("name2:"+req.getParameter("nm"));
		return "hncu";
	}

	//http://localhost:8080/springmvc2/sp/m3/aa/22  这种访问方式需要直接访问
	@RequestMapping(value="/m3/{na}/{ag}")
	public String m3(@PathVariable("na")String name,@PathVariable("ag")Integer age){
		System.out.println("name:"+name+",age:"+age);//aa , 22
		return "hncu";
	}

	//http://localhost:8080/springmvc2/sp/m4
	//@RequestMapping(value="/m4",params={"nm","age!=100"}) //访问时必须带参数nm但age!=100
	//@RequestMapping(value="/m4",params={"nm","!age"}) //访问时必须带参数nm但不能带age
	//@RequestMapping(value="/m4",params={"nm","age"}) //访问时必须还nm和age两个参数
	@RequestMapping(value="/m4",params={"nm","age"},headers={"referer=http://localhost:8080/springmvc2/","content-type=application/*"}) //防盗链和限制必须是form或ajax提交
	public String m4(){
		System.out.println("name.....");
		return "hncu";
	}

	//级联的值对象数据也能封装
	//http://localhost:8080/springmvc2/sp/m5?name=Jack&age=24&addr.city=SZ
	@RequestMapping(value="/m5")
	public String m5(User user){
		System.out.println("user:"+user);
		return "hncu";
	}

	//同时从请求路径中接收参数和从表单中接收参数,读取方式在下面有例子
	@RequestMapping(value="/m6/{nm}")
	public ModelAndView m6(@PathVariable("nm") String name, @RequestParam("age") Integer age,@RequestParam("addr") String addr){
		System.out.println("name:"+name+",age:"+age);
		System.out.println("addr:"+addr);
		ModelAndView mv = new ModelAndView();
		mv.setViewName("hncu");
		mv.addObject("name", name);
		mv.addObject("addr", addr);
		return mv;
	}

	//绑定其他数据 ,如http协议的相应头//测试地址:http://localhost:8080/springmvc2/sp/m7?name=JJJJJ&addr.city=BJ
	@RequestMapping(value="/m7")
	public String m6(HttpSession s,
			@RequestHeader("accept")String accept,
			@CookieValue("JSESSIONID") String sessionId , User user){
		System.out.println("JSESSIONID1:"+s.getId());
		System.out.println("JSESSIONID2:"+sessionId);
		System.out.println("accept:"+accept);
		System.out.println("user:"+user);
		return "hncu";
	}

	//绑定到数组、集合等类型的请求参数(入参)上
	@RequestMapping(value="/m8",method={RequestMethod.PUT,RequestMethod.POST})//限定请求方式只能:PUT或POST
	public String m8(@RequestParam("h") String[] hobies,
			@RequestParam("ss") List<String> ss ){
		System.out.println(Arrays.toString(hobies));
		System.out.println("List:"+ss);
		return "hncu";
	}

	//演示文件的下载
	@RequestMapping(value="/m9")
	public void m9(OutputStream out,HttpSession session,HttpServletResponse resp) throws Exception{
		String filename=session.getServletContext().getRealPath("/upfile/中文.jsp");
		resp.setContentType("application/force-download");//文件下载必须要设置相应头
		resp.setHeader("Content-Disposition", "attachment;filename=中文.jsp");
		InputStream in =new  FileInputStream(filename);
		Streams.copy(in, out, true);
	}

//	演示文件上传(用SpringMVC中提供的组件来实现)---多文件    MultipartFile<---FileItem
	@RequestMapping(value="/m10")
	public String m10(@RequestParam(value="nm")List<MultipartFile> files) throws Exception, IOException{
		//根据这里可以可以去name为nm的值,所以,我们可以在前台动态的添加文件选择框,供用户使用
		String path=sc.getRealPath("/upfile");
		System.out.println(path);
		System.out.println("长度"+files.size());
		for(MultipartFile file:files){
			Streams.copy(file.getInputStream(), new FileOutputStream(path+"/"+file.getOriginalFilename()), true);
		}
		return "hncu";
	}

	private ServletContext sc; //需要实现ServletConextAware
	@Override
	public void setServletContext(ServletContext arg0) {
		this.sc=arg0;
	}</span>

这些就是能实现了,但是在我们的架构层中就不行了,我们需要配置注解就能搞定了,就不用像之前那种采用spring的依赖注入了。

如简单的演示

数据库层  dao

只需要添加@Repository(value="dao") 就可以了

<span style="font-size:18px;">@Repository(value="dao")
public class AaDao{

}</span>

逻辑层 Service

以前的service需要注入dao,现在直接注解搞定

@Service(value="service")
public class StudService {
	@Resource(name="dao")
	private IStudDao dao;//直接就可以这样用了

同样的 controller中也是需要这样的

@Controller
public class StudController {
	@Resource(name="service")
	private IStudService service;}

基本上springmvc+spring直接访问数据库就可以架构起来了。

时间: 2024-10-14 14:07:22

JavaEE之--------SpringMVC框架的搭建(注解实现)的相关文章

SpringMvc框架MockMvc单元测试注解及其原理分析

来源:https://www.yoodb.com/ 首先简单介绍一下Spring,它是一个轻量级开源框架,简单的来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架.特点方便解耦,简化开发,AOP编程的支持声明式,事务的支持以及降低Java EE API的使用难度等. 目前主流的Web MVC框架除了Struts之外就是SpringMVC,不过要想灵活运用SpringMVC来应对大多说的web开发除了必须掌握其配置和原理外还需要会测试.在Spring3.

【JavaEE】Springmvc+Spring+Hibernate搭建方法及example

前面两篇文章,分别介绍了Springmvc和Spring的搭建方法,本文再搭建hibernate,并建立SSH最基本的代码结构. Hibernate和前面两个比就比较复杂了,Hibernate是一个orm的框架,也就是负责面向对象中的对象(Object)和关系型数据库这个关系(Relation)之间的映射(Mapping).因为关系型数据库的思维方式,和编程的时候对于对象的理解是有偏差的,所以也有一些面向对象的数据库,但是随着这些orm框架的完善,面向对象的数据库就销声匿迹了. 当然,我这篇文章

springmvc框架的搭建

1引入jar包 jar包下载地址http://maven.springframework.org/release/org/ 以下是我引入的jar包 aopalliance-1.0.jaraspectjrt.jaraspectjweaver.jarcommons-beanutils-1.8.0.jarcommons-codec-1.6.jarcommons-collections-3.1.jarcommons-dbcp-1.2.1.jarcommons-fileupload-1.2.1.jarco

SpringMVC01--&gt;SpringMVC框架环境搭建(注解方式)

1.导入jar包 2.在web.xml中配置前端控制器DispatcherServlet 2.1 如果不配置<init-param>,则默认找/WEB-INF/<servlet-name>-servlet.xml.配置<init-param>是为了改变默认加载的配置文件名称和路径 <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0&q

Spring学习之SpringMVC框架快速搭建实现用户登录功能

关于SpringMVC的介绍我就不多说了,网上一搜一大堆,好多大鸟的博客都有详细的描述,之前看的跟开涛学SpringMVC,写的非常好,SpringMVC运行的流程和原理讲的非常的细致在此我引用一下开涛前辈的图片和文字,大家要是想看原文就点击上面的链接. SpringMVC处理请求的流程图 大家一定要仔细的看,最好是拿张纸,画一画,可比你光看有效果,大家可以与纯MVC模式对比一下,这样理解起来就不是那么的难了. 对上面的图在此细化 在此我们可以看出具体的核心开发步骤: DispatcherSer

基于maven从头搭建springMVC框架

0.准备工作 首先将eclipse和需要的插件准备好,例如maven插件,spring IDE插件. 1.建立maven下的webapp项目 1.新建一个maven项目,类型为webapp,如下图 2.然后给项目命名,加入groupId等 3.配置项目的发布目录,在 Deployment Assemly下,如图 2.配置Spring和Maven 1.配置pom.xml,添加如下包依赖.版本不一定要对应,后边可能会用到些新的包,缺少哪些包可以后续去百度然后加入到pom.xml中 <dependen

SpringMVC框架使用注解执行定时任务

在项目开发过程中,免不了会有一些定时任务.今天就给大家一个SpringMVC框架中利用注解的方式执行定时任务的示例代码 使用到的JAR文件: 点击下列Jar文件会跳到我的网盘下载 aopalliance-1.0.jarcommons-logging-1.1.3.jarspring-aop-3.2.4.RELEASE.jarspring-beans-3.2.4.RELEASE.jarspring-context-3.2.4.RELEASE.jarspring-core-3.2.4.RELEASE.

spring MVC 框架的搭建(myeclipse +maven)--(上)

spring mvc 的框架搭建过程如下,这个框架建议新手去看,因为搭建的是一个比较简单的矿建,当然里面涉及到的spring +hibernate相关的知识,是值得学习的. 这个项目是基于maven的主要是maven 能够很好的帮我们管理jar 包. spring mvc 框架搭建过程如下: 第一步:使用maven引入springMVC所需要的jar包 引入与springmvc相关的jar包,在pom.xml的<dependencise>标签下添加以下3个jar包 (1) spring-web

springMvc框架实现

springMvc框架是基于MVC设计模式,的spring实现,它主要一下三个核心功能 1 跳转 2 ioc 3 aop(暂不实现) 自己手动书写springMvc框架,通过注解方式实现了跳转和ioc两个核心功能,工程结构如下: 分别创建注解@Controller package com.hongsen.annotation; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @int