javaSSM框架—springMVC相关细节

17 篇文章 0 订阅
17 篇文章 0 订阅

注解属性

value

@RequestMapping(value={"/test02.action","/test002.action","/test002*.action"})
指定要将当前处理器绑定到哪个访问路径上,可以配置多个路径。
*通配符

@RequestMapping("/test01.action")
//只有一个属性时,value可以省略,括号可以省略
@RequestMapping(value={"/test01.action","/test01*.action"})
//支持*通配符

method

指定当前路径的请求方式,一定为哪种类型或不为哪种类型

@RequestMapping(value = "test02.action",
method = RequestMethod.POST,params = {"username","password=123"})
//params 必须要有哪个参数,且可指定参数值为多少,或一定不为多少

header

用来限定由指定的请求头才能访问

@RequestMapping(value="/test05.action",headers= {"host=localhost"})

params

用来限定当前请求中必须包含指定名称的请求参数才会被当前处理器处理通过params属性指定只处理请求参数符合指定要求的请求。

@RequestMapping(value="/test04.action",
params={"name","gender=male","!age","addr!=bj"})

获取请求参数

request获取方式

@RequestMapping("/m2test03.action")
    public void test03(HttpServletRequest request) 
throws UnsupportedEncodingException {
    String name = request.getParameter("name");
    String addr = request.getParameter("addr");
    System.out.println(name+"..."+addr);
}

javabean获取方式

会将请求参数自动封装的bean中,前提是javabean中要有对应的set方法

@Controller
public class MyController02 {
    @RequestMapping("/m2test01.action")
    //若参数少,则哪个对应属性为初始化值 User{id=15, name='xty', age=21, gender='null'}
    //若参数多,则多的参数不进行封装
    //http://localhost/LX_LX02/m2test01.action?id=15&name=xty&age=21&gender=nan&dog.name=wc&dog.age=6
    //User{id=15, name='xty', age=21, gender='nan', dog=Dog{age=6, name='wc'}}
    //指定的属性为set属性
    public void test01(User user){
        System.out.println(user);
        //直接将请求参数自动封装到user对象中
        //return "MyController01";
    }

直接获取请求参数

获取请求参数

public String test02(String name,String password,int age){
        System.out.println("姓名:"+name+"、密码:"+password+"、年龄:"+age);
        return "/test02";
    }

多个同名请求参数,可用数组接受

@RequestMapping("/m2test02.action")
    public void test02(String [] like){
        System.out.println(Arrays.asList(like));
        //[girl, papapawithgirl]   
        //http://localhost/LX_LX02/m2test02.actionlike=girl&like=papapawithgirl
        //若没有参数则直接报错 java.lang.NullPointerException 空指针异常
    }

若请求参数与我们要接受的参数名称不一致,可用@RequesstParam注解进行设置,@RequesstParam()内为请求参数名。

public String test02(@RequestParam("username") String 姓名,@RequestParam("password") String 密码,@RequestParam("age") int 年龄){
        //String 姓名 返回的是null
        //前面加上@RequestParam(“原本的参数名”)即可转换成对应的参数名称
        System.out.println("姓名:"+姓名+"、密码:"+密码+"、年龄:"+年龄);
        return "/test02";
    }

复杂类型参数接受

如果自动封装的bean中存在复杂类型,只要该复杂类型的属性同样具有setXxx方法,则可以在请求参数中包含[bean中复杂类型].[属性]的方式为该复杂类型的参数复制,从而实现自动封装bean的过程中处理其中的复杂类型
http://localhost/LX_LX02/m2test01.action?id=15&name=xty&age=21&gender=nan&dog.name=wc&dog.age=6
拼接的参数
User{id=15, name=‘xty’, age=21, gender=‘nan’, dog=Dog{age=6, name=‘wc’}}
返回的效果

请求参数中的中文乱码问题

SpringMVC提供了过滤器用来解决中文乱码问题,但是只对post提交方式有效
在这里插入图片描述

日期类型参数处理

在SpringMVC中解析页面提交的请求参数时,无法自动获取封装日期到Data。
如果想要实现自动封装,必须手动注册适配器自己来指定转换方式。

@InitBinder
    public void dayinit(ServletRequestDataBinder binder){
        binder.registerCustomEditor(Date.class,
                new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),
                        true));
    }
    @RequestMapping("/m2test04.action")
    //字符串格式的日期
    public void test04( String name, String birthday){
        System.out.println(name+"..."+birthday);
        //null...null
        //许天一...2019-12-10

    }

异常处理

为当前controller配置异常处理

配置单个类异常提示页面
在类中设置@ExceptionHandler修饰的方法即可
注:若某个类中有异常处理方法,则不再使用全局处理
在这里插入图片描述

注解方式配置异常处理

配置单独的类

@ControllerAdvice
public class MyException {
    @ExceptionHandler
    public String yc(Exception e){
        System.out.println(e.getMessage());
    return "yichang";
    }

配置文件方式配置异常处理

<!--配置全局错误提示页面-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="ExceptionMappings">
        <props>
            <prop key="java.lang.NullPointerException">null_err</prop>
        </props>
    </property>
</bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值