springmvc

配置DispatcherServlet核心分发器

<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--我们经常使用的配置文件加载方式-->
<!--  <init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param> -->
</servlet>
<!-- 加载默认mvc配置文件:springname-servlet.xml ,必须放在WEB-INF下面-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
//或者使用默认拦截/
<url-pattern>*.do</url-pattern>
</servlet-mapping>

配置方式访问

自定一个类实现一个controller接口,配置到springmvc.xml中对外提供访问方式


<bean name="/hello.do" class="cn.itcast.test.TestController"></bean>

处理器映射器(三种):
BeanNameUrlHandlerMapping


<!-- 配置处理器映射器,springmvc默认的处理器映射器,即使不配置,默认就使用这个来映射请求。 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
</bean>

SimpleUrlHandlerMaping
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <!--简单url集中配置  -->
        <property name="mappings">
            <props>
                <prop key="/hello.do">userController</prop>
                <prop key="/do.do">userController</prop>
            </props>
        </property>
    </bean>
ControllerClassNameHandlerMapping


这个Mapping一配置:我们就可以使用Contrller的 [类名.do]来访问这个Controller.(仅对实现controller接口有效,对实现HttpRequestHandler无效)
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean>

处理器适配器(两种):
SimpleControllerHandlerAdapter


<!--springmvc默认的处理器映射器,即使不配置默认加载-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter">
</bean>

HttpRequestHandlerAdapter


<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>

注解方式访问

开启注解扫描

““












““

配置视图解析器


<!--配置逻辑视图 物理视图=前缀+逻辑视图+后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>

@Controller:

用于标识是处理器类.表示把我的控制器对象交给spring来创建。

@RequestMapping:

请求到处理器功能方法的映射规则;

@RequestParam

““
save( @RequestParam(defaultValue=”2”,value=”group”,required=true) String string) {
默认值 别名 是否必须

当使用别名的时候,前端提交的属性名需要和别名一致,即入参的请求参数名字
““

@RequestBody


将接收请求json数据自动封装到pojo对象中

@ResponseBody


把后台pojo对象转换json对象传给前台:只能是pojo对象,Map,List无效

@pathVariable


@RequestMapping("deleteById/{id}")
public String deleteById(@PathVariable int id) {}

中文乱码解决

get
第一种:在tomcat的servlet.xml
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

另外一种方法对参数进行重新编码:
String userName new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")
post
<filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

日期格式问题转化


第一种在需要映射的类上进行添加注解转换
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")

第二种自定日期格式转换类
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.core.convert.converter.Converter;
public class DateConverter implements Converter<String, Date> {

    @Override
    public Date convert(String resource) {
        SimpleDateFormat simpleDateFormat  = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        if (resource.contains("/")) {
            resource=resource.replace("/", "-");
        }
        try {
            return simpleDateFormat.parse(resource);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
}
在springmvc.xml中进行添加自定义转换器
<!-- 加载注解驱动 -->
    <mvc:annotation-driven conversion-service="conversionService"/>
    <!-- 转换器配置 -->
    <bean id="conversionService"
    class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class=" com.itheima.ssm.convert.DateConverter"/>
            </set>
        </property>
    </bean>

拦截器:实现HandlerInterceptor接口

局部拦截器:

针对某个HandlerMapping进行配置。

<bean
    class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
    <property name="interceptors">
        <list>
            <ref bean="handlerInterceptor1"/>
            <ref bean="handlerInterceptor2"/>
        </list>
    </property>
</bean>
<bean id="handlerInterceptor1" class="springmvc.intercapter.HandlerInterceptor1"/>
<bean id="handlerInterceptor2" class="springmvc.intercapter.HandlerInterceptor2"/>
全局拦截器:

拦截所有映射请求拦截。

<!--拦截器 -->
<mvc:interceptors>
    <!--多个拦截器,顺序执行 -->
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <bean class="cn.itcast.springmvc.filter.HandlerInterceptor1"></bean>
    </mvc:interceptor>
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <bean class="cn.itcast.springmvc.filter.HandlerInterceptor2"></bean>
    </mvc:interceptor>
</mvc:interceptors>

图片上传

CommonsMultipartResolver解析器依赖导入fileupload的2个jar包

配置解析器
<!-- 文件上传 -->
<bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设置上传文件的最大尺寸为5MB -->
        <property name="maxUploadSize">
        <value>5242880</value>
        </property>
</bean>
读写在本地磁盘上
@RequestMapping("/editItemSubmit")
public String editItemSubmit(Items items, MultipartFile pictureFile)throws Exception{

//原始文件名称
String pictureFile_name =  pictureFile.getOriginalFilename();
//新文件名称
String newFileName = UUID.randomUUID().toString()+pictureFile_name.substring(pictureFile_name.lastIndexOf("."));

//上传图片
File uploadPic = new File("F:/develop/upload/temp/"+newFileName);

if(!uploadPic.exists()){
uploadPic.mkdirs();
}
//向磁盘写文件
pictureFile.transferTo(uploadPic);
跨服务器上传
记得要修改图片服务器文件上传权限
//获取文件原始的名称
String originalFilename = file.getOriginalFilename();           
//UUID生成新的不重复文件名
String string = UUID.randomUUID().toString().replace("-", "");
int lastIndexOf = originalFilename.lastIndexOf(".");
String substring = originalFilename.substring(lastIndexOf);
String newName  =string + substring;

//跨服务器上传
Client client = Client.create();
//把文件关联到远程服务器
WebResource resource = client.resource(Commons.PIC_HOST+"/upload/"+newName);
//上传
resource.put(String.class, file.getBytes());

//回调函数
Map map = new HashMap();
map.put("success", true);
map.put("message", newName);

response.setContentType("application/json;charset=utf-8");
response.getWriter().write(JSON.toJSONString(map).toString());

异常处理器:实现HandlerExceptionResolver接口

springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑

自定义异常处理器

““
在springmvc.xml中添加自定义异常处理器,spring会自动扫描该异常处理器:


异常处理器代码:实现HandlerExceptionResolver接口

import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.StringWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

//自定义异常处理器
public class CustomerResolver implements HandlerExceptionResolver {

@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object obj,
        Exception exception) {
    // 记录异常信息
    String message = "";
    if (exception instanceof CustomerException) {
        // 捕获自定预期异常信息
        CustomerException customerException=(CustomerException)exception;
        message = customerException.getMessage();
    } else {
        // 捕获运行时异常,一般邮件通知程序人员,不能让客户看到异常
        //StringWriter stringWriter = new StringWriter();
        //PrintWriter printWriter = new PrintWriter(stringWriter);
        //exception.printStackTrace(printWriter);
        //message = stringWriter.toString();
    }
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("message", message);
    modelAndView.setViewName("error");
    return modelAndView;
}

}
““

自定义异常类
public class CustomerException extends RuntimeException{
  public CustomerException(String string){
    super(string);
  }
}

静态资源访问

如果在DispatcherServlet中设置url-pattern为/则必须对静态资源进行访问处理。
spring mvc 的<mvc:resources mapping="" location="">实现对静态资源进行映射访问。
如下是对js文件访问配置:
//**  表示访问所有子目录的文件
<mvc:resources location="/js/" mapping="/js/**"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值