Spring

 

导入包

建spring文件

 

 

 applicationContext.xml中(spring.xml文件)

<!-- 控制反转IOC,依赖注入DI 面向切面编程AOP(通知,有一个代理,可以在已固定的类方法中进行功能拓展)
@Controller 与前端打交道
@Component将一个类作为实体类放入Spring容器中
@Repository 将一个类作为业务逻辑处理层放入Spring容器中
-->

<?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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd">

 <bean id="xiao" class="model.Girl" > <!-- p:name="开导" p:age="24" scope="singleton" -->
	
<!-- set方法注入  -->
   <!-- <property name="name" value="xiaobai"></property>
	<property name="age" value="17"></property>-->
<!-- 构造器是根据类型放入值,类中一定要有这个构造方法 -->	
	<!-- 	<constructor-arg index="0" value="拜拜"></constructor-arg>
		<constructor-arg index="1" value="14"></constructor-arg>
		<constructor-arg index="2" ref="nowtime"></constructor-arg>    -->
		<!-- <context:annotation-config /> -->
		<property name="list"><!--通过构造方法中的名字往实体类中传值 -->
			<list>
				<value>java</value>
				<value>jjdkas</value>
				<value>dakame</value>
			</list>
			<map><!-- ref是引用的意思,传时间之类的引用 -->
				<entry key-ref="" value-ref="" value=""></entry>
			</map>
		</property>
	</bean> 
	<bean id="nowtime" class="java.util.Date"></bean>
<!-- <aop:config proxy-target-class="true"></aop>-->
 </beans>

 

<!--如果还有一个dept类,这个类中有girl这个实体类属性,可以如下这样写来
	调用,在test中直接实例化并打印dept就行  -->
	<!-- <bean id="dept" class="com.hanqi.model.Dept">
		<property name="appUser" ref="appUser"></property>
	</bean> -->

  看看实体类咋写的package model;

import java.util.Date;
import java.util.List;
//com.model/com.domain/com.entity/com.pojo都是指实体类

public class Girl {
	private String name;
	private int age;
	private Date birthday;
	private List<String> list;//假如有
	
	public void sayhello() {
		System.out.println(name +"说:你好!!!!!!");
	}
	public Girl() {
		super();
	}
	public Girl(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	
	public Girl(String name, int age, Date birthday) {
		super();
		this.name = name;
		this.age = age;
		this.birthday = birthday;
	}
	
	public Girl(String name, int age, Date birthday, List<String> list) {
		super();
		this.name = name;
		this.age = age;
		this.birthday = birthday;
		this.list = list;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public List<String> getList() {
		return list;
	}
	public void setList(List<String> list) {
		this.list = list;
	}
	@Override
	public String toString() {
		return "Girl [name=" + name + ", age=" + age + ", birthday=" 
+ birthday + ", list=" + list + "]";
	}	
}

test怎么打印出来的

package test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import model.Girl;

public class test {

	public static void main(String[] args) {
		ApplicationContext ac = new ClassPathXmlApplicationContext
				("conf/applicationContext.xml");//从src下开始
		        //Girl girl = (Girl)ac.getBean("xiao");
		Girl girl1 = ac.getBean(Girl.class);//用这种泛型
		System.out.println(girl1);
		        /*girl.setName("笨蛋");
		        girl.setAge(18);
		        girl.sayhello();*/	
		close(ac);
	}

	public static void close(ApplicationContext ac) {
		ClassPathXmlApplicationContext c = (ClassPathXmlApplicationContext)ac;
		c.close();
	}	
}
            

  

 第二种方法

        

     

 

<?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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!--这种在类名上添加注解的方式,只是用来给Spring添加配置的 
	有一些实体类并不需要放到Spring中 .这种方式破坏了类中的单一职责原则-->
	<!--上下文 组件 扫描.人话:扫描上下文中所有带着component标签的类  指定一个包
	lib中要有spring-aop这个包才行!-->
	<context:component-scan base-package="com.hanqi.model" />
</beans>

  

SpringMVC环境搭建


1, 导包(spring框架的jar)
2, 在web.xml中声明springmvc的核心servlet---org.springframework.web.servlet.DispatcherServlet
声明springmvc配置文件的位置
也可以使用默认值, 将springmvc的配置文件放在WEB-INF下, 
并且配置文件的名称一定为<servlet-name></servlet-name>里面的名字加上"-servlet"
3, 配置springmvc的配置文件
配置扫描器
配置视图解析器(InternalResourceViewResolver)
前缀
后缀
开启mvc注解驱动<mvc:annotation-driver />
4, 新建Controller控制器(@Controller)
5, 控制器类里面编写方法, 方法的返回值被视图解析器解析作为返回的视图层
返回值可以是String或者ModelAndView

常用注解
@Controller
@RequestMapping
@RequestParam
@PathVariable
@SessionAttribute
@ModelAttribute
@ResponseBody

SpringMVC的文件上传和下载

 例

//运行页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
<a href="helloworld2?aabbcc=xiaohua">链接</a>
</body>
</html>

  

 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_3_0.xsd"

	id="WebApp_ID" version="3.0">

	<!-- The front controller of this Spring Web application, 
responsible for 

		handling all application requests -->
	<servlet>
		<servlet-name>hanqi</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 		<init-param>           
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:conf/springmvc2.xml</param-value>
		</init-param> -->

		<!-- 启动时加载 如果不写上面那个inint-param默认,就会自动去找
与servlet-name相同的名加个后缀(-servlet.xml的文件)-->
		<!-- 当数值大于等于0的时候, 启动时加载, 数值越小, 优先级越高 -->
		<load-on-startup>1</load-on-startup>
	</servlet>

	<!-- Map all requests to the DispatcherServlet for handling -->
	<servlet-mapping>
		<servlet-name>hanqi</servlet-name>

		<url-pattern>/</url-pattern>
	</servlet-mapping>

</web-app>

  

  如下:

原来叫springmvc2.xml,现在改名为hanqi-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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-4.3.xsd">

<context:component-scan base-package="com.hanqi.controller" />//还有这句
	
	<!-- 视图解析器 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="suffix" value=".jsp"></property>
		<property name="prefix" value="/WEB-INF/page/"></property>
		
	</bean>
	<mvc:annotation-driven />  <!--注意加上这句-->
</beans>

  

  TestController.java ----控制层

package com.hanqi.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.hanqi.model.AppUser;

// @Component @Repository @Service
// @Autowired @Resource

@Controller
public class TestController {
	
	@RequestMapping("test/{dfghsdfgdsf}/aaaa")
	public String testDynaicParam(
@PathVariable("dfghsdfgdsf")String path) {
//动态路径改变(在真正的主页那里,可以写多个jsp,
这样就会在网址上输入哪个,跳哪个页面)
		//System.out.println(path);
		return path;
	}
	
	
	@RequestMapping("/helloworld2")
	public ModelAndView helloWorld(
			ModelAndView mav, 
			@RequestParam("aabbcc")String username) {
//写一个modelandview这个类,自动获取和返回前台数据,甚至传入的名不一致也可以
//写个注解匹配上
		// ModelAndView mav = new ModelAndView();
		System.out.println(username);
		AppUser user = new AppUser();
		user.setRealname("超级管理员2");
		mav.addObject("currentUser", user); // request.setAttribute();
		mav.setViewName("success"); 
 相当于下面的request.getServletDispatcher...重定向到哪里(hanqi-servlet.xml)
		return mav;//把这些东西返回回去
	}

/*	@RequestMapping("/helloworld2")
	public String helloWorld(HttpServletRequest request,
	HttpServletResponse response) {
		String username = request.getParameter("username");
		// System.out.println(username);
		request.setAttribute("msg", "外面出太阳了");
		return "success";
	}*/
}

  

//走到真正的主页 

<%@ page language="java" contentType="text/html; 
charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
<h1>访问成功的页面 !</h1>
${currentUser.realname}
</body>
</html>

 //这是建的那个类

package com.hanqi.model;

public class AppUser {
	private String realname;

	public String getRealname() {
		return realname;
	}

	public void setRealname(String realname) {
		this.realname = realname;
	}
	
}

  

 

 

 

 

 

 

 

 

 

 

posted @ 2018-01-30 10:01  子言小竹  阅读(233)  评论(0编辑  收藏  举报