zoukankan      html  css  js  c++  java
  • 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;
    	}
    	
    }
    

      

     

     

     

     

  • 相关阅读:
    分布式存储
    存储知识学习
    洛谷 P1003 铺地毯 (C/C++, JAVA)
    多线程面试题系列3_生产者消费者模式的两种实现方法
    多线程面试题系列2_监视线程的简单实现
    多线程面试题系列1_数组多线程分解
    《深度学习》阅读笔记1
    素数在两种常见情况下的标准最优算法
    dfs与dp算法之关系与经典入门例题
    百度之星资格赛2018B题-子串查询
  • 原文地址:https://www.cnblogs.com/ziyanxiaozhu/p/8383714.html
Copyright © 2011-2022 走看看