SpringMVC-基础知识

responsebody的使用-表示返回的是一个内容而不是一个待跳转的页面

@Controller
@RequestMapping(“/stu”)
public class StudentController{
@RequestMapping(“getAllStu”){
@ResponseBody
public String getAllStu(){
    List<Student> studentList = new ArrayList<Student>();
    studentList.add(new Student(101));
    studentList.add(new Student(102));
    studentList.add(new Student(103));
    String json = JSON.toJSONString(studentList);
    return json;
}
}

springMVC处理静态资源

默认情况下springMVC会把所有的静态资源都给拦截掉

<mvc:resources location=”/static/” mapping=”/static/**”> </mvc:resources>

springMVC的文件上传

首先需要导入fileuploadio

<form action=”test/upload” enctype=”multipart/form-data” method=”post”>
    文件名:<input type=”text” name=”myFileName”></br/>
    文件: <input type=”file” name=”myFile”/>
    <input type=”submit” value=”上传”/>
</form>
@Controller
@RequestMapping(“/up”)
public class uploadController{
@RequestMapping(“upload”)
public String upload(String myFileName, MultipartFile mFile, HttpSession session ){
    //获取文件保存的绝对地址
    String file = session.getServletContext().getRealPath(“upload”);
    //定义文件名
    //使用一个唯一的编码uuid,
    String uuid =  UUID.randomUUID().toString().replace(“-”, “”);
    //判断文件夹是否存在
    File file1 = new File(file);
    if(!file1.exists()){
        file1.mkdir();
    }
    String originalFileName = mFile.getOriginalFilename();//获取文件的原始名称
    //拼接文件的名称
    myFilename = uuid + originalFileName ;
    try{
         mFile.transferTo(new File(file, myFileName));
    }catch(Exception e){
        e.printStackTrace();
    }
    session.setAttribute(“msg”, myFileName + “,保存成功!”);
        return “main”;
}
}

最终会报错,因为还需要配置视图解析器,需要通过不断的配置来完善

注意;配置的id名称一定要是multipartResolver(这里是一个巨坑,千万不能出错)

细节:保证每次上传图片的文件名称不一致

处理 date类型的数据

如果不做任何的处理,直接返回给前端的话将出现格式错误的问题

只需要加上注解即可

@DateTimeFormat(pattern=”yyyy-MM-dd”);
@JSONField(format=”yyyy-MM-dd”)
private Date date;

拦截器的配置和使用

新建一个com.interceptor包;再建一个MyInterceptor.java

public class MyInterceptor implements HandlerInterceptor{

 //共需要实现三个方法

}

return false;//表示不给你放行

需要给拦截器进行配置,声明我有权利拦截谁谁谁,赋权力使能

在springmvc-sevlet.xml中配置拦截器

<mvc:interceptors>
<mvc:interceptor>
    <mvc:mapping path=”/**”></mvc:mapping> <!--表示拦截所有的方法-->
    <bean class=”com.interceptor.MyInterceptor”></bean>
</mvc:interceptor>
<mvc:interceptor>
    <mvc:mapping path=”/**”></mvc:mapping> <!--表示拦截所有的方法-->
    <bean class=”com.interceptor.MyInterceptor2”></bean>
</mvc:interceptor>
</mvc:interceptors>

如果配置了多个拦截器,在preHandle方法中顺序和配置的顺序一致,但postHandle和afterCompletion的方法确是相反的,这就是所谓的先进后出。

使用拦截器实现登录验证

@RequestMapping(“/loginController”)
public String loginController(HttpSession session){
    //只有登录完了才回把user对象放到session之中
session.setAttribute(“user”, “asdsaad”);
return “main”;
}
LoginedMyInterceptor.java中
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception{
//获取sessio中保存的用户
Object user = request.getSession().getAttribute(“user”);
if(user != null){
    return true;
}
//希望跳转回登录页面
else{
    request.getRequestDispatcher(“../login.jsp”).forward(request, response);
    return false;
}
}

配置拦截器

<mvc:interceptors>
<mvc:interceptor>
    <mvc:mapping path=”/**”></mvc:mapping> <!--表示拦截所有的方法-->
    <bean class=”com.interceptor.MyInterceptor”></bean>
</mvc:interceptors>
</mvc:interceptors>

单例模式的三种实现(饿汉模式,懒汉模式,静态内部类)

更详细的可以参考

https://blog.csdn.net/weixin_37841366/article/details/108770432

场景

  • BaseDao:操作数据库的基类 init()方法
  • 每个线程对系统操作都需要new 一个BaseDao实例
  • I/O操作消耗系统资源,影响系统性能

解决方案:对于每个线程,可共享一个实例;单例模式

单例模式;系统运行期间,有且仅有一个实例

一个类只有一个实例-最基本的:只提供私有构造器

它必须自行创建这个实例:定义了静态的该类私有对象

它必须自行向整个系统提供整个实例:提供一个静态的公有方法,返回创建或者获取本身的静态私有对象

单例模式懒汉模式饿汉模式
概念在类加载时不创建实例,采用延迟加载的方式,在运行调用时创建实例在类加载的时候,就完成初始化
特点类加载速度慢,但是运行时获取对象的速度较快。时间换空间类加载较慢,但获取对象速度快-空间换时间
延迟加载(lazy loading)具备不具备(静态内部类)
线程安全线程不安全(同步方式解决)线程安全

 

饿汉模式中同时要具备延迟加载的特性-静态内部类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值