首先看看非注解的項(xiàng)目結(jié)構(gòu)
在web.xml文件 配置springmvc 轉(zhuǎn)發(fā)調(diào)度servlet 和 Date 類型參數(shù)的自動(dòng)轉(zhuǎn)型
編寫 spring 配置文件 配置 映射處理器 和 控制器 或者 攔截器
然后編寫 springmvc的控制器
http://localhost:8080/springmvc-1/hello.do 就可以訪問了
采用注解類配置springmvc
在web.xml中配置spring的中央控制器
同時(shí)也可以指定初始化參數(shù)? 設(shè)定 spring配置文件的路徑
編寫 springmvc-servlet.xml文件
編寫控制器(類似struts里面的action)
下面有
傳統(tǒng)的請(qǐng)求
有異步請(qǐng)求
文件上傳 (注意添加jar和配置 文件上傳 解析器)
重定向請(qǐng)求
多個(gè)控制器的相互引用
自定義攔截器
兩個(gè)參數(shù)實(shí)體類
幾個(gè)jsp
form.jsp
在web.xml文件 配置springmvc 轉(zhuǎn)發(fā)調(diào)度servlet 和 Date 類型參數(shù)的自動(dòng)轉(zhuǎn)型
<?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">
<!-- 映射處理器之間是獨(dú)立的,相互不影響 -->
<!-- 默認(rèn)的映射處理器 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!-- 簡(jiǎn)單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 -->
<!--使用默認(rèn)的映射處理器來映射 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
在web.xml中配置spring的中央控制器
同時(shí)也可以指定初始化參數(shù)? 設(shè)定 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的注解驅(qū)動(dòng) -->
<mvc:annotation-driven/>
<!-- 一旦有掃描器的定義mvc:annotation-driven可以不需要,掃描器已經(jīng)有了注解驅(qū)動(dòng)的功能 -->
<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:必須是這個(gè)-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--
文件上傳
最大值,以 bit為單位 -->
<property name="maxUploadSize" value="1024000"></property>
</bean>
<!-- 指定一個(gè)攔截器 對(duì)用戶的請(qǐng)求 異常 或者視圖進(jìn)行 一些處理-->
<mvc:interceptors>
<mvc:interceptor>
<!--某一模塊攔截: /myPath/** ,攔截所有的請(qǐng)求: /** -->
<mvc:mapping path="/**"/>
<bean class="cn.sh.springmvc.interceptor.MyInterceptor">
</bean>
</mvc:interceptor>
</mvc:interceptors>
</beans>
編寫控制器(類似struts里面的action)
下面有
傳統(tǒng)的請(qǐng)求
有異步請(qǐng)求
文件上傳 (注意添加jar和配置 文件上傳 解析器)
重定向請(qǐng)求
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 //用來標(biāo)注但欠累是springmvc的控制層類
@RequestMapping("/homepage") //類是 struts2中的namespace
public class TestController{
@RequestMapping("/hello.do") //用來訪問控制方法的注解
public String hello(){
System.out.println("注解成功");
return "homepage/index";
}
//參數(shù)的傳遞
/**
* 方式一:HttpServletRequest
* @param request
* @return
*/
@RequestMapping("/toPesron.do")
public String toPerson(HttpServletRequest request){
String result=request.getParameter("name");
System.out.println(result);
return "homepage/index";
}
/**
* 方式二:將要傳遞的參數(shù)定義在方法中 而且 會(huì)自動(dòng)轉(zhuǎn)類型
* @param name
* @param age
* @return
*/
@RequestMapping("/toPesron1.do")
public String toPerson1(String name,Integer age,Date birthday){ //定義 參數(shù)名也可以了
System.out.println(name);
System.out.println(age);
System.out.println(birthday);
return "homepage/index";
}
/**
* 傳遞參數(shù)的 名字必須要與實(shí)體類的屬性set方法后面的字符串匹配才能接受參數(shù),首字母大小寫不區(qū)分
* 請(qǐng)求中傳遞的參數(shù)只要是能和參數(shù)列表里面的變量名或者實(shí)體里面的set后面字符串匹配的上就能接受到
* @param person
* @return
*/
@RequestMapping("/toPesron2.do")
public String toPerson2(Person person,User user){ //定義 參數(shù)名也可以了
System.out.println(person);
System.out.println(user);
return "homepage/index";
}
/**
* 數(shù)組結(jié)構(gòu)
* @param name
* @return
*/
@RequestMapping("/toPerson3.do")
public String upload(String[] name){ //定義 參數(shù)名也可以了
System.out.println(Arrays.toString(name));
return "homepage/index";
}
/**
* 將數(shù)據(jù)傳遞到 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){ //定義 參數(shù)名也可以了
System.out.println(person);
return "homepage/index";
}
@RequestMapping(value="/toPerson8.do",method=RequestMethod.POST)
public String toPerson8(Person person,HttpServletRequest request) throws FileNotFoundException{ //定義 參數(shù)名也可以了
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位隨機(jī)數(shù)
//文件全名稱
String origFileName=cfile.getOriginalFilename();
//文件后綴
String suffix=origFileName.substring(origFileName.lastIndexOf("."));
//項(xiàng)目的部署路徑
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;
}
/**
* 注冊(cè)時(shí)間類型的屬性編輯器
* @param binder
*/
@InitBinder
public void initBinder(ServletRequestDataBinder binder){
//注意 2012-12-02 和 2012-22-12(將變成 2013-10-12 做進(jìn)制轉(zhuǎn)換)
binder.registerCustomEditor(Date.class,
new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true));
}
}
多個(gè)控制器的相互引用
package cn.sh.springmvc;
import java.text.ParseException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller //用來標(biāo)注但欠累是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 {
/**
* 執(zhí)行時(shí)間:視圖解析完畢
* 主要做一些監(jiān)控的處理 比如 :異常 類是 try catch 后面的 finally
*/
public void afterCompletion(HttpServletRequest arg0,
HttpServletResponse arg1, Object arg2, Exception ex)
throws Exception {
System.out.println("afterCompletion");
ex.printStackTrace();
}
/**
* 執(zhí)行時(shí)機(jī):control 執(zhí)行完, 視圖解析沒有把頁面解析成頁面
* 可以對(duì)視圖做統(tǒng)一修改 主要提現(xiàn)在model上面(可以統(tǒng)一為 某個(gè)視圖 添加頭和尾 )
*/
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");
}
/**前置攔截
* 執(zhí)行時(shí)機(jī):在control之前執(zhí)行
* true:攔截通過 表示可以訪問control
* false:不可以訪問control
* Object: 訪問的control 的類的對(duì)象
* 可以做權(quán)限 校驗(yàn)和控制
*/
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2) throws Exception {
System.out.println("preHandle....");
return true;
}
}
兩個(gè)參數(shù)實(shí)體類
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;
}
}
幾個(gè)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>
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

