SpringMVC学习【2】

1. 响应:

(1):返回值为String:

①:使用方法:

    /**
     * 在request中存值
     * @param model
     * @return
     */
    @RequestMapping("/testString")
    public String testString(Model model){
        User user = new User();
        user.setUname("JOJO");
        user.setAge(12);
        model.addAttribute("user", user);
        return "success";
    }

②:请求:

    <h2>从request域中取值</h2>
    <a href="user/testString">往request里存值</a><hr/>

③:success界面:

    <h2>执行成功</h2>
    ${user.uname} ${user.age}<hr/>

(2):返回值为void:

①:使用:

    /**
     * 默认情况
     */
    @RequestMapping("/testVoid")
    public void testVoid(){
        System.out.println("void");
    }

②:请求:

    <h2>void返回值</h2>
    <a href="user/testVoid">void返回值</a><hr/>

③:响应内容:

**user/testVoid.jsp

(3):ModelAndView做返回值:

①:使用方式:

    /**
     * ModelAndView做返回值
     * @return
     */
    @RequestMapping("/testModelAndView")
    public ModelAndView testModelAndView(){
        ModelAndView mv = new ModelAndView();
        User user = new User();
        user.setUname("花太郎");
        user.setAge(12);
        mv.addObject(user);
        mv.setViewName("success");
        return mv;
    }

②:请求:

    <h2>ModelAndView返回值</h2>
    <a href="user/testModelAndView">ModelAndView返回值</a><hr/>

③:success界面:

    <h2>执行成功</h2>
    ${user.uname} ${user.age}<hr/>

(4):ajax请求和响应:

①:使用方式:

    /**
     * ajax请求
     */
    @RequestMapping("/testAjax")
    public @ResponseBody A testAjax(@RequestBody A a){
        System.out.println(a);
        a.setName("JOJO");
        return a;
    }

②:请求方式:

    <h2>ajax请求</h2>
    <button id="btn" >ajax</button>
    <script src="js/jquery.min.js"></script>

    <script>
        $(function(){
            $("#btn").click(function () {
                $.ajax({
                    url:"user/testAjax",
                    contentType:'application/json;charset=UTF-8',
                    data:'{"name":"hehe", "age":12}',
                    dataType:"json",
                    type:"post",
                    success:function(data){
                        alert(data.name);
                    }
                })
            });
        });
    </script>

③:运行结果:

2. 文件上传:

SpringMVC配置:

    <!--文件解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10485760"></property>
    </bean>

(1):传统方式:

①:请求:

    <h2>传统文件上传</h2>
    <form method="post" action="file/precedingUpload" enctype="multipart/form-data">
        文件:<input type="file" name="upload"><br/>
        <input type="submit" value="提交">
    </form>

②:实现:

    /**
     * 以前的文件上传fileupload+io
     * @param request
     * @return
     * @throws Exception
     */
    @RequestMapping("/precedingUpload")
    public String precedingUpload(HttpServletRequest request) throws Exception {
        String path = request.getSession().getServletContext().getRealPath("/uploads/");
        File file = new File(path);
        if (!file.exists())
            file.mkdirs();

        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);

        List<FileItem> items = upload.parseRequest(request);

        System.out.println(items);
        for (FileItem item:items){
            if (item.isFormField()){
                System.out.println(2);
            }
            else {System.out.println("1");
                String filename = item.getName();
                String uuid = UUID.randomUUID().toString().replace("-", "");
                filename = uuid+"_"+filename;
                System.out.println(filename);
                item.write(new File(path, filename));
                item.delete();
            }
        }
        return "success";
    }

(2):SpringMVC方式:

①:请求:

    <h2>SpringMVC文件上传</h2>
    <form method="post" action="file/springMVCUpload" enctype="multipart/form-data">
        文件:<input type="file" name="upload"><br/>
        <input type="submit" value="提交">
    </form>

②:实现:

     /**
     * SpringMVC上传
     * @param request
     * @param upload 必须和表单中file类型的input的name相同
     * @return
     * @throws Exception
     */
    @RequestMapping("/springMVCUpload")
    public String SpringMVCUpload(HttpServletRequest request, MultipartFile upload) throws Exception {
        String path = request.getSession().getServletContext().getRealPath("/uploads/");
        File file = new File(path);
        if (!file.exists())
            file.mkdirs();
        System.out.println(path);

        String filename = upload.getOriginalFilename();
        String uuid = UUID.randomUUID().toString().replace("_", "");
        filename = uuid+"_"+filename;

        upload.transferTo(new File(path, filename));

        return "success";
    }

(3):跨服务器上传:

①:请求:

    <h2>跨服务器文件上传</h2>
    <form method="post" action="file/pastServerUpload" enctype="multipart/form-data">
        文件:<input type="file" name="upload"><br/>
        <input type="submit" value="提交">
    </form>

②:实现:

    /**
     * 跨服务器上传
     * @param upload
     * @return
     * @throws Exception
     */
    @RequestMapping("/pastServerUpload")
    public String PastServerUpload(MultipartFile upload) throws Exception {
        String path = "https://localhost:8080/uploads/";

        String filename = upload.getOriginalFilename();
        String uuid = UUID.randomUUID().toString().replace("_", "");
        filename = uuid+"_"+filename;

        Client client = Client.create();

        WebResource resource = client.resource(path + filename);

        resource.put(upload.getBytes());

        return "success";
    }

3. 异常处理:

(1):控制器实现:

@Controller
@RequestMapping("/exception")
public class ExceptionController {

    @RequestMapping("/testException")
    public String testException() throws SysException {
        try {
            int a = 1/0;
        } catch (Exception e) {
            throw new SysException("测试出现异常...");
        }
        return "success";
    }
}

(2):异常类:

public class SysException extends Exception {

    private String massage;

    public String getMassage() {
        return massage;
    }

    public void setMassage(String massage) {
        this.massage = massage;
    }

    public SysException(String massage) {
        this.massage = massage;
    }
}

(3):异常处理器:

public class SysExceptionResolver implements HandlerExceptionResolver {

    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        SysException se = null;
        if (e instanceof SysException){
            se = (SysException)e;
        }else {
            se = new SysException("系统维护...");
        }
        ModelAndView mv = new ModelAndView();
        mv.addObject("errorMsg", se.getMassage());
        mv.setViewName("error");
        return mv;
    }
}

(4):配置异常处理器:

    <bean id="sysExceptionResolver" class="cn.xupt.exception.SysExceptionResolver"></bean>

4. 拦截器:只能拦截controller类中的方法,不能拦截js、css等资源。

(1):控制器实现:

    @RequestMapping("testIntercepter")
    public String testIntercepter(){
        System.out.println("测试拦截器");
        return "success";
    }

(2):过滤器实现:

public class IntercepterDemo1 implements HandlerInterceptor {

    /**
     * 预处理方法
     * @param request
     * @param response
     * @param handler
     * @return  true:放行 false:不放行
     * @throws Exception
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器预处理");
        return true;
    }

    /**
     * 执行完controller后执行
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("后处理");
    }

    /**
     * 最后执行
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("最后执行");
    }
}

(3):配置拦截器:

    <!--配置拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/intercepter/*"/>
            <bean class="cn.xupt.Intercepter.IntercepterDemo1"></bean>
        </mvc:interceptor>
    </mvc:interceptors>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
综合小区管理系统管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、车位管理、车位分配管理、出入管理、字典管理、房屋管理、物业费缴纳管理、公告管理、物业人员投诉管理、我的私信管理、物业人员管理、用户管理、管理员管理。用户的功能包括管理部门以及部门岗位信息,管理招聘信息,培训信息,薪资信息等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 综合小区管理系统管理系统可以提高综合小区管理系统信息管理问题的解决效率,优化综合小区管理系统信息处理流程,保证综合小区管理系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理综合小区管理系统信息,包括出入管理,报修管理,报修管理,物业费缴纳等,可以管理操作员。 出入管理界面,管理员在出入管理界面中可以对界面中显示,可以对招聘信息的招聘状态进行查看,可以添加新的招聘信息等。报修管理界面,管理员在报修管理界面中查看奖罚种类信息,奖罚描述信息,新增奖惩信息等。车位管理界面,管理员在车位管理界面中新增。公告管理界面,管理员在公告管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值