springmvc.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.baidu">
context:component-scan>
<bean id="internalResourceViewResolver" class=" org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="WEB-INF/pages/">property>
<property name="suffix" value=".jsp">property>
bean>
beans>
pom,xml
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
<spring.version>5.0.2.RELEASEspring.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>servlet-apiartifactId>
<version>2.5version>
<scope>providedscope>
dependency>
<dependency>
<groupId>javax.servlet.jspgroupId>
<artifactId>jsp-apiartifactId>
<version>2.0version>
<scope>providedscope>
dependency>
dependencies>
web,.xml
<web-app id="WebApp_ID" 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">
<servlet >
<servlet-name> dispartservletservlet-name>
<servlet-class> org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:springmvc.xmlparam-value>
init-param>
<load-on-startup>1load-on-startup>
servlet>
<servlet-mapping>
<servlet-name>dispartservletservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
web-app>
controller
package com.baidu;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.DispatcherServlet;
@Controller
public class AccountController {
@RequestMapping("/hello")
public String a(){
return "success";
}
}
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
hello
dsd
success.jsp沈略
流程:
<filter-mapping>
<filter-name>characterEncodingFilterfilter-name>
<url-pattern>/*url-pattern>
filter-mapping>
<form action="/testspringmvc2/hello" method="post">
绑定list集合
密码:<input type="text" name="list[0].password" /><br/>
<!-- 金额:<input type="text" name="money" /><br/> -->
用户姓名:<input type="text" name="list[0].username" /><br/>
绑定map集合 </br>
密码:<input type="text" name="map['one'].username" /><br/>
<!-- 金额:<input type="text" name="money" /><br/> -->
用户姓名:<input type="text" name="map['one'].password" /><br/>
<input type="submit" value="提交" />
</form>
Account有list和map
package com.baidu.entity;
import java.util.List;
import java.util.Map;
public class Account {
String username;
String password;
List<User>list;
Map<String, User>map;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public List<User> getList() {
return list;
}
public void setList(List<User> list) {
this.list = list;
}
public Map<String, User> getMap() {
return map;
}
public void setMap(Map<String, User> map) {
this.map = map;
}
@Override
public String toString() {
return "Account [username=" + username + ", password=" + password + ", list=" + list + ", map=" + map + "]";
}
}
spring提供了ConversionServiceFactoryBean进行类型转换,
只需要在xml中配置即可,
<bean id="converservice" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.baidu.entity.Myconvert">bean>
set>
property>
bean>
<mvc:annotation-driven conversion-service="converservice"/>
package com.baidu.entity;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.core.convert.converter.Converter;
public class Myconvert implements Converter<String, Date>{
public Date convert(String source) {
// TODO Auto-generated method stub
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = sdf.parse(source);
return date;
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
常用注解:
@requerstparam:用于controller和jsp中参数名称不一致的情况,requerstparam里面,加上参数的名称
@requerstbody:用于获取post请求方式的请求体,get没有请求体
@PathVariable 一般用于Restful风格,取参数
@modelattribute
浏览器一般只支持get和post请求,也可以装插件发put,delete请求,
如果没有装插件,怎么让浏览器发送put,delete请求呢,springmvc使用
HiddentHttpMethodFilter这个过滤器可以实现(了解就行)
@RequestMapping("/testforwardorredict")
public String jj(HttpServletResponse res){
//使用重定向或转发将不会经过视图解析器
//使用重定向
return "redirect:/index.jsp";
//使用转发
//return "forward:/WEB-INF/pages/success.jsp";
}
复习下ajax
window.onload=function(){
$.ajax(
{
url:"/testspringmvc2/hello",
type:post,
data:{username:"zhangsan",userage:"18" },
success:function(data){
}
}
);
}
创建自定义异常
package com.baidu.utils;
public class MyExeception extends Exception{
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public MyExeception(String message) {
// TODO Auto-generated constructor stub
this.message=message;
}
}
创一个实现HandlerExceptionResolver的类
package com.baidu.utils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
public class HanderExeception implements HandlerExceptionResolver{
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) {
// TODO Auto-generated method stub
Exception e=null;
if(ex instanceof MyExeception){
e=new MyExeception("系统正在维护");
}
ModelAndView mv=new ModelAndView();
mv.setViewName("error");
mv.addObject("errormsg",e.getMessage());
return mv;
}
}
springmvc.xml中添加
<bean class="com.baidu.utils.HanderExeception" id="handerExeception">bean>
在controller制作一个异常
@Controller
public class Acountcontroller {
@RequestMapping("/hello")
public String d() throws MyExeception{
try {
int i=1/0;
} catch (Exception e) {
// TODO: handle exception
throw new MyExeception("系统正在维护");
}
return "success";
}
原理:默认不处理,异常会一层层抛,最后抛到浏览器显示,如果在异常抛到dispartservlet时,用一个异常处理器,处理抛出来的异常,一旦出现了异常,前端控制器会指定异常处理器,如果我们定义了一个异常处理器实现了HandlerExceptionResolver并注册成了一个bean,异常处理器就会被调用然后跳转到指定页面。
拦截器和过滤器的区别:
使用方法
创建一个拦截器类,实现HandlerInterceptor.
package com.baidu.utils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
public class Myhanderinteceptor implements HandlerInterceptor{
//访问controller前的操作
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// TODO Auto-generated method stub
System.out.println("拦截器执行了...1");
return true;
}
}
配置springmvc.xml
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/user/*"/>
<bean class="com.baidu.utils.Myhanderinteceptor">bean>
mvc:interceptor>
mvc:interceptors>