亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

SpringMVC 注解 和非注解

系統 1807 0
首先看看非注解的項目結構
SpringMVC 注解 和非注解

在web.xml文件 配置springmvc 轉發調度servlet 和 Date 類型參數的自動轉型
    
<?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>

	<!-- 中央控制器 -->
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>


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


  


編寫 spring 配置文件 配置 映射處理器 和 控制器 或者 攔截器
    
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xmlns="http://www.springframework.org/schema/beans"  
    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.1.xsd
	    http://www.springframework.org/schema/mvc
	    http://www.springframework.org/schema/mvc/spring-mvc-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/aop  
	    http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 
	    http://www.springframework.org/schema/tx 
	    http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
		
		<!-- 映射處理器之間是獨立的,相互不影響 -->
		
		<!-- 默認的映射處理器  -->
		<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
		
		<!-- 簡單URL的映射處理器 -->
		<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
			<property name="mappings">
				<props>
					<prop key="/hello2.do">testController</prop>
				</props>
			</property>
		</bean>
		
		<!-- 控制器類名映射處理器 (注意:類名首字母消息.例如:http://192.168.0.88/springmvc-1/testController.do) -->
		<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
		
		<!--配置controller,handlerMapping,ViewResolver,interceptor  -->
		<!--使用默認的映射處理器來映射 controller -->
		<bean id="testController" class="cn.sh.springmvc.TestController" name="/hello.do"/>
		
                <!--視圖解析器-->
		<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
			<!-- webroot到一指定文件夾文件路徑 -->
			<property name="prefix" value="/WEB-INF/jsp/"/>
			<!-- 視圖名稱后綴  -->
			<property name="suffix" value=".jsp"/>
		</bean>
</beans> 

  


然后編寫 springmvc的控制器
    
package cn.sh.springmvc;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

public class TestController extends AbstractController {

	@Override
	protected ModelAndView handleRequestInternal(HttpServletRequest arg0,
			HttpServletResponse arg1) throws Exception {
		
		System.out.println("hello springmvc");
		return new ModelAndView("homepage/index");
	}

}

  

http://localhost:8080/springmvc-1/hello.do 就可以訪問了


采用注解類配置springmvc

SpringMVC 注解 和非注解
在web.xml中配置spring的中央控制器
同時也可以指定初始化參數? 設定 spring配置文件的路徑
    
<?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>

	<!-- 中央控制器 -->
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<!-- 如果不把springmvc-serlvet.xml放在 web-inf 放在 src/config/下面的話就需要在這里指定配置文件的路徑-->
		<init-param>
			<param-name>contextConfigLoaction</param-name>
			<param-value>classpath:springmvc.xml</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

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

  


編寫 springmvc-servlet.xml文件
    
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xmlns="http://www.springframework.org/schema/beans"  
    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.1.xsd
	    http://www.springframework.org/schema/mvc
	    http://www.springframework.org/schema/mvc/spring-mvc-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/aop  
	    http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 
	    http://www.springframework.org/schema/tx 
	    http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
		
		<!-- mvc的注解驅動 -->
		<mvc:annotation-driven/>
		<!-- 一旦有掃描器的定義mvc:annotation-driven可以不需要,掃描器已經有了注解驅動的功能 -->
		<context:component-scan base-package="cn.sh.springmvc"/>
	
		<!-- 視圖解析器 -->
		<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
			<!-- webroot到一指定文件夾文件路徑 -->
			<property name="prefix" value="/WEB-INF/jsp/"/>
			<!-- 視圖名稱后綴  -->
			<property name="suffix" value=".jsp"/>
		</bean>
		
		<!-- 
    
      文件上傳
    
    解析器 id:必須是這個-->
		<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
			<!-- 
    
      文件上傳
    
    最大值,以 bit為單位  --> 
			<property name="maxUploadSize" value="1024000"></property>
		</bean>
		
               <!-- 指定一個攔截器 對用戶的請求 異常 或者視圖進行 一些處理-->  
		<mvc:interceptors>
			<mvc:interceptor>
				<!--某一模塊攔截: /myPath/** ,攔截所有的請求: /** -->
				<mvc:mapping path="/**"/>
				<bean class="cn.sh.springmvc.interceptor.MyInterceptor">
				</bean>
			</mvc:interceptor>
		
		</mvc:interceptors>
</beans> 

  


編寫控制器(類似struts里面的action)
下面有
傳統的請求
有異步請求
文件上傳 (注意添加jar和配置 文件上傳 解析器)
重定向請求
    
package cn.sh.springmvc;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import org.springframework.web.servlet.ModelAndView;

import cn.sh.springmvc.model.Person;
import cn.sh.springmvc.model.User;

@Controller  //用來標注但欠累是springmvc的控制層類
@RequestMapping("/homepage")  //類是 struts2中的namespace
public class TestController{

	@RequestMapping("/hello.do")  //用來訪問控制方法的注解
	public String hello(){
		System.out.println("注解成功");
		return "homepage/index";
	}

	
	//參數的傳遞  
	/**
	 * 方式一:HttpServletRequest
	 * @param request
	 * @return
	 */
	@RequestMapping("/toPesron.do")
	public String toPerson(HttpServletRequest request){
		String result=request.getParameter("name");
		System.out.println(result);
		return "homepage/index";
	}
	
	/**
	 * 方式二:將要傳遞的參數定義在方法中 而且 會自動轉類型
	 * @param name
	 * @param age
	 * @return
	 */
	@RequestMapping("/toPesron1.do")
	public String toPerson1(String name,Integer age,Date birthday){  //定義 參數名也可以了
		System.out.println(name);
		System.out.println(age);
		System.out.println(birthday);
		return "homepage/index";
	}
	
	/**
	 * 傳遞參數的 名字必須要與實體類的屬性set方法后面的字符串匹配才能接受參數,首字母大小寫不區分
	 * 請求中傳遞的參數只要是能和參數列表里面的變量名或者實體里面的set后面字符串匹配的上就能接受到
	 * @param person
	 * @return
	 */
	@RequestMapping("/toPesron2.do")
	public String toPerson2(Person person,User user){  //定義 參數名也可以了
		System.out.println(person);
		System.out.println(user);
		return "homepage/index";
	}
	
	/**
	 * 數組結構
	 * @param name
	 * @return
	 */
	@RequestMapping("/toPerson3.do")
	public String upload(String[] name){  //定義 參數名也可以了
		System.out.println(Arrays.toString(name));
		return "homepage/index";
	}
	
	/**
	 * 將數據傳遞到 jsp頁面去
	 * 不建議使用
	 * @throws ParseException 
	 */
	@RequestMapping("/toPerson4.do")
	public ModelAndView toPerson4() throws ParseException{
		Person person=new Person();
		person.setName("james");
		person.setAge(28);
		person.setAddress("maiami");
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
		Date birthday=sdf.parse("1985-01-22");
		person.setBirthday(birthday);
		Map<String, Object> map=new HashMap<String, Object>();
		map.put("p",person);
		return new ModelAndView("index",map);
	}
	/**
	 * 不建議使用
	 * @param map
	 * @return
	 * @throws ParseException
	 */
	@RequestMapping("/toPerson5.do")
	public String toPerson5(Map<String, Object> map) throws ParseException{
		Person person=new Person();
		person.setName("james");
		person.setAge(28);
		person.setAddress("maiami");
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
		Date birthday=sdf.parse("1985-01-22");
		person.setBirthday(birthday);
		map.put("p",person);
		return "index";
	}
	
	/**
	 * 建議使用
	 * @param model
	 * @return
	 * @throws ParseException
	 */
	@RequestMapping("/toPerson6.do")
	public String toPerson6(Model model) throws ParseException{
		Person person=new Person();
		person.setName("james");
		person.setAge(28);
		person.setAddress("maiami");
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
		Date birthday=sdf.parse("1985-01-22");
		person.setBirthday(birthday);
		model.addAttribute("p", person);
		return "index";
	}
	
	/**
	 * 不建議使用
	 * @param name
	 * @param response
	 * @throws ParseException
	 */
	@RequestMapping("/ajax.do")
	public void ajax(String name,HttpServletResponse response) throws ParseException{
		String result="hello"+name; 
		try {
			response.getWriter().write(result);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 建議使用
	 * @param name
	 * @param out
	 * @throws ParseException
	 */
	@RequestMapping("/ajax1.do")
	public void ajax1(String name,PrintWriter out) throws ParseException{
		String result="hello"+name; 
		try {
			out.print(result);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@RequestMapping("/toajax.do")
	public String toajax() throws ParseException{
		return "ajax";
	}
	
	@RequestMapping("/toFrom.do")
	public String toFrom() throws ParseException{
		return "form";
	}
	
	@RequestMapping(value="/toPerson7.do",method=RequestMethod.POST)
	public String toPerson7(Person person){  //定義 參數名也可以了
		System.out.println(person);
		return "homepage/index";
	}
	
	@RequestMapping(value="/toPerson8.do",method=RequestMethod.POST)
	public String toPerson8(Person person,HttpServletRequest request) throws FileNotFoundException{  //定義 參數名也可以了
		System.out.println(person);
		MultipartHttpServletRequest rm=(MultipartHttpServletRequest)request;
		CommonsMultipartFile cfile=(CommonsMultipartFile)rm.getFile("image");// input的名稱
		byte[] bfile=cfile.getBytes();
		String fileName="";
		SimpleDateFormat format=new SimpleDateFormat("yyyyMMddHHmmssSSS");
		fileName=format.format(new Date());
		fileName+=(int)(Math.random()*1000);  //3位隨機數
		
		//文件全名稱
		String origFileName=cfile.getOriginalFilename();
		
		//文件后綴
		String suffix=origFileName.substring(origFileName.lastIndexOf("."));
		
		//項目的部署路徑
		String path=request.getSession().getServletContext().getRealPath("/");
		System.out.println(path);
		System.out.println(request.getServletPath());
		
		OutputStream out=new FileOutputStream(new File(path+"/upload/"+fileName+suffix));
		try {
			out.write(bfile);
			out.flush();
			out.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "homepage/index";
	}
	
	
	@RequestMapping("/redtoFrom.do")
	public String redirectToFrom() throws ParseException{
		return "redirect:toFrom.do"; //可以在前面加上 namespace;
	}
	
	@RequestMapping("/redtoFrom1.do")
	public String redirectToFrom1() throws ParseException{
		// "/"表示從根目錄開始找 
		return "redirect:/test/toFrom.do"; //可以在前面加上 namespace;
	}
	
	/**
	 * 注冊時間類型的屬性編輯器
	 * @param binder
	 */
	@InitBinder
	public void initBinder(ServletRequestDataBinder binder){
		//注意 2012-12-02 和 2012-22-12(將變成 2013-10-12 做進制轉換) 
		binder.registerCustomEditor(Date.class,
				new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true));
		
	}
}

  


多個控制器的相互引用
    
package cn.sh.springmvc;

import java.text.ParseException;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller  //用來標注但欠累是springmvc的控制層類
@RequestMapping("/test")  //類是 struts2中的namespace
public class TestController1{
	
	@RequestMapping("/toFrom.do")
	public String toFrom() throws ParseException{
		return "form";
	}
}


  


自定義攔截器
    
package cn.sh.springmvc.interceptor;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class MyInterceptor implements HandlerInterceptor {

	/**
	 * 執行時間:視圖解析完畢
	 * 主要做一些監控的處理  比如 :異常  類是 try  catch 后面的 finally
	 */
	public void afterCompletion(HttpServletRequest arg0,
			HttpServletResponse arg1, Object arg2, Exception ex)
			throws Exception {
		System.out.println("afterCompletion");
		ex.printStackTrace();

	}

	/**
	 * 執行時機:control 執行完, 視圖解析沒有把頁面解析成頁面
	 * 可以對視圖做統一修改 主要提現在model上面(可以統一為 某個視圖 添加頭和尾 )
	 */
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
			Object arg2, ModelAndView mv) throws Exception {
		System.out.println("postHandle....");
		Map<String,Object> map=mv.getModel();
		map.put("test", "append something");
	}

	/**前置攔截
	 * 執行時機:在control之前執行
	 * true:攔截通過 表示可以訪問control
	 * false:不可以訪問control
	 * Object: 訪問的control 的類的對象
	 * 可以做權限 校驗和控制
	 */
	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,
			Object arg2) throws Exception {
		System.out.println("preHandle....");
		return true;
	}

}


  

兩個參數實體類
    
package cn.sh.springmvc.model;

import java.util.Date;

public class User {

	private String name;
	private Integer age;
	private String address;
	private Date birthday;
	
	//get set ..
	@Override
	public String toString() {
		return this.name+"/"+this.age+"/"+this.address+"/"+this.birthday;
	}
	
}
package cn.sh.springmvc.model;

import java.util.Date;

public class Person {

	private String name;
	private Integer age;
	private String address;
	private Date birthday;
	
	//get set...
	@Override
	public String toString() {
		return this.name+"/"+this.age+"/"+this.address+"/"+this.birthday;
	}
}


  

幾個jsp
form.jsp
    
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
<script type="text/javascript" src="js/jquery.js"></script>

<script type="text/javascript">
		$(function(){
			$("#mybutton").click(
				function(){
					$.ajax({
						url:"homepage/ajax1.do",
						type:"POST",	
						dataType:"text",
						data:{
							name:"zhangh"
						},
						success:function(responseText){
							alert(responseText);
						},
						error:function(){
							alert("system error");
						}
					});	
				}		
			);
		});
	
	</script>
  </head>
  
  <body>
    <form action="homepage/toPerson8.do" method="post"  enctype="multipart/form-data">
    	name:<input name="name"><br/>
    	age:<input name="age"><br/>
    	address:<input name="address"><br/>
    	birthday:<input name="birthday"><br/>
    	file:<input type="file" name="image"><br/>
    	<input type="submit" value="submit">
    </form>
<input type="button" id="mybutton" value="click">
  </body>
</html>

  



SpringMVC 注解 和非注解


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本欧美中文字幕 | 国产成人青青热久免费精品 | 色综合综合网 | 91无限资源| 狠狠色丁婷婷综合久久 | 美女粉逼 | 高清亚洲综合色成在线播放放 | 四虎免费大片aⅴ入口 | 国产亚洲精品yxsp | 亚洲精彩 | 国产精品久久久久久免费 | 国产精品国产三级国产an | 日本一区毛片免费观看 | 亚洲国产精品综合久久网络 | 免费高清在线影片一区 | 97欧美| 国产自产视频 | 精品一区二区三区免费爱 | 国产精品天干天干 | 久久精品99精品免费观看 | 久草热久草在线视频 | 欧美妇性猛交视频 | 国产亚洲福利精品一区 | 水中色av综合 | 狠狠色噜噜狠狠狠97影音先锋 | 欧美综合成人 | 亚洲美女视频网 | 国产欧美视频在线观看 | 久久久久久久99精品免费 | 亚洲欧美日韩精品 | 韩国午夜剧场 | 亚洲视频手机在线 | 亚洲视频aaa | 日韩中文字幕在线看 | 又粗又大的机巴好爽欧美 | 久久久久在线观看 | 四虎成人精品在永久在线观看 | 国产成人精品免费影视大全 | 毛片色情 | 日本一区二区在线 | 性欧美视频 |