spring入门篇10 --- springMVC入门小程序

继续昨晚没有完成的这个小demo,完成这个,我们基本上算入门

首先,这个demo继续使用注解方式,源码地址github

首先看一下这个,这个就是maven起的项目结构,使用SpringMVC起项目,webapp就会与src同级,但是我们一般把src当作源码目录,所以做好可以做到同级,但这个就是为了练习。

首先明确一下,DispatcherServlet是实现servlet接口,Dispatcher使用Spring配置文件告知spring他需要请求反射,视图解析,异常处理等,而我们项目一般是跑在tomcat上,tomcat是servlet容器,它会自动检测到我们的servlet配置

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<!--这个web-app里面的东西是为了告知在处理jsp文件使用jctl处理参数用的-->
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
  <display-name>Archetype Created Web Application</display-name>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!--这个就是注册servlet功能-->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

上面的xml配置信息就相当于下面的java

public class MyWebApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletCxt) {

        // 将在springweb的配置
        AnnotationConfigWebApplicationContext ac = new AnnotationConfigWebApplicationContext();
        ac.register(AppConfig.class);
        ac.refresh();

        // 创建并将dispatcherServlet注册到我们的应用中
        DispatcherServlet servlet = new DispatcherServlet(ac);
        ServletRegistration.Dynamic registration = servletCxt.addServlet("app", servlet);
        registration.setLoadOnStartup(1);
        registration.addMapping("/");
    }
}

接下来看一下我们的dispatcher-servlet,这里面增加了一个bean,他的作用就是帮助我们到时候读取文件使用的

  <!--扫描我们包-->
    <context:component-scan base-package="main.yang"/>

    <!--为视图加前缀以及后缀, WEB-INF为安全路径,外部无法直接访问-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/page/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--这个是读取文件用的-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

接下来我们看一下Controller的几个类

首先看login,这个里面增加了一个重定向的函数,也就是用户访问/redirect路径是,会自动重定向到login函数

package main.yang.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class Login {

    @RequestMapping("/login")
    public ModelAndView login() {
        ModelAndView login = new ModelAndView("login");
        login.addObject("message", "请登陆!");
        return login;
    }

    // 支持重定向
    @RequestMapping("/redirect")
    public String redirect() {
        // 使用这个以及直接进行页面重定向
        return "redirect: login";
    }
}

authenticate,这个验证函数就是进行调用-->serveice --> dao 层对象,最终在数据库中获取数据,并记性对比,来验证用户登陆信息。

package main.yang.controller;
import main.yang.bean.User;
import main.yang.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class Authenticate {

    // 自动加载,这个就是DI注入,应该回忆一下
    @Autowired
    UserService userService;

    @RequestMapping("/authenticate")
    public ModelAndView check (@RequestParam(name = "username", required = true) String username, @RequestParam("password") String password){
        ModelAndView mav = new ModelAndView();
        String msg = "认证失败";
        // 调用server层对象进行处理
        User user = userService.getUser(username);
        if(user.getPassword().equals(password)){
            msg = "认证成功";
        }
        mav.addObject("message", msg);
        mav.setViewName("result");

        return  mav;
    }
}

file这个就增加了一个文件上传的功能,可以帮助我们获取文件

package main.yang.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class Upload {

    // 文件上传,需要带入common-io以及common-filepath两个包,并在dispatcherServlet中配置
    @RequestMapping("/upload")
    public ModelAndView upload(MultipartFile file) {
        ModelAndView mav = new ModelAndView("show");
        String msg = "上传失败";
        if (!file.isEmpty()) {
            msg = "上传成功";
        }
        mav.addObject("message", msg);
        return mav;
    }
}

这样,简单的文件上传功能完成,接下来就开始做一个相对完整的项目,这样才能充分学习,代码是敲出来的,多看多做,才能学会。

原文地址:https://www.cnblogs.com/yangshixiong/p/12206338.html

时间: 2024-11-09 01:57:15

spring入门篇10 --- springMVC入门小程序的相关文章

《Java从入门到放弃》入门篇:springMVC数据校验

昨天我们扯完了数据传递,今天我们来聊聊数据校验的问题.来,跟着我一起读:计一噢叫,一按艳. 在springMVC中校验数据也非常简单,spring3.0拥有自己独立的数据校验框架,同时支持JSR303标准的校验框架. Spring的DataBinder在进行数据绑定时,会同时调用校验框架完成数据校验工作. 具体使用步骤如下: 1)导入数据校验的JAR包 2)在springmvc的配置文件中添加校验Bean 3)修改实体类,在属性上加上校验的注解 4)修改昨天的login4方法,加上校验的相关代码

从入门到上线一个天气小程序

作者:wuwhs segmentfault.com/a/1190000017388333 前言 学习了一段时间小程序,大致过了两遍开发文档,抽空做个自己的天气预报小程序,全当是练手,在这记录下.小程序开发的安装.注册和接入等流程就不罗列了,在小程序接入指南已经写得很清楚了,以下只对开发过程常用到得一些概念进行简单梳理,类比 Vue 加强记忆,最后选取个人项目天气小程序中要注意的几点来说明. 欢迎扫码体验: 源码请戳这里,欢迎start~ 初始化项目目录结构 安装好开发者工具,填好申请到的 App

借助云开发10行代码生成小程序码,可以微信扫码快速进入指定小程序页

最近老有同学问我,如何生成小程序二维码,让用户扫码后能快速进入指定页面.经过一番研究,发现用云开发的云调用来实现特别方便,基本上10行代码就可以快速的生成指定页面的二维码.这样我们在做一些线下业务时就能让用户方便快速的进入到指定页面了,比如我们的点餐小程序,我们可以在二维码里绑定桌号,这样用户用微信扫码二维码,就可以快速的进入点餐页面了,并且可以识别到用户当前所在的桌号. 注意事项 我们生成的小程序码指定的页面,必须是你小程序已经发布,如果小程序还没有发布,获取小程序码绑定的页面不存在,扫码后就

mybatis入门篇1 --- 编写入门小程序

首先简单说一下为什么使用mybatis,我们上一个项目使用的JDBC,所有的sql语句都是写在java程序中,这样的就会使sql语句与java程序高度耦合,不符合我们的高内聚,低耦合情况,我们只希望你给我一个接口并且返回指定类型的程序,具体如何实现我不管,这样才会更好的进行操作,Hibernate跟mybatis都属于这种情况,hibernate属于全自动框架,mybatis属于半自动框架,什么意思?hibernate对于简单的数据库操作很方便,但是一旦涉及到复杂的数据库操作或者想要对sql语句

什么是接口(入门篇)——使你的程序功能丰富

重复劳动 在一个主项目中,经常会放置多个子功能的入口,这些入口有可能是按钮,有可能是下拉菜单. 初始开发起来,肯定很轻松,在界面上放置一个按钮,给它一个名字,然后到他的Click事件中编写一段代码,让子功能的界面弹出. 但是随着子功能的不断变多,这个毫不起眼的几个小工作,我们在不停重复的进行. 最头疼的是,突然有一天,你的PM跟你说,这个界面不要了,或者是这个子功能的入口换成另一个窗体的时候,你已经不记得这不起眼的几行代码在哪里了. 问题出在哪? 这样的设计模式,也是初学者最容易走的开发方式.

《Java从入门到放弃》入门篇:springMVC数据传递 (二)

上一篇讲完了springMVC中数据传递中的接收数据,今天继续完成数据的向后传递. 数据传递的核心对象ModelAndView,注意其包名,不要引用错了! 正确的:org.springframework.web.servlet.ModelAndView 错误的:org.springframework.web.portlet.ModelAndView 我们继续完成前面的登录功能: 如果登录成功则跳转到index.jsp,并显示"欢迎你:xxxx(用户的昵称)". 如果登录失败则回到log

《Java从入门到放弃》入门篇:springMVC数据传递

springMVC中的数据传递方式与JSP和Struts2相比,更加的简单.具体有什么样的区别呢?我们通过下面这张图来对比就知道了. 随手画的,有些错别字,不用太在意..... 接下来,进入正题,springMVC中的常用数据传递方式有以下三种: 一.基本数据类型 二.自定义类型 三.地址栏传递 第二种最常用,分页时使用第三种. 具体实现步骤如下: 一.基本数据类型,使用@RequestParam接收数据,注意表单元素的name属性和@RequestParam的值要一一对应 1.1)创建logi

《Java从入门到放弃》入门篇:springMVC基本用法

springMVC可以理解成用来做数据显示处理的框架,主要内容就是控制器和视图的处理. 在已经安装了spring框架的基础上继续下面的步骤(我使用的MyEclipse2014). 1. 修改web.xml文件 2. 在WEB-INF目录创建springmvc的配置文件 3. 新建一个用来放控制器的包 4. 在包中创建控制器类 5. 访问对应地址 不废话,直接干!!! 一.修改web.xml文件     <servlet>         <servlet-name>spmvc<

java入门篇10 --- 注解

从JVM的角度看,注解本身对代码逻辑没有任何影响,如何使用注解完全由工具决定. Java的注解可以分为三类: 第一类是由编译器使用的注解,例如: @Override:让编译器检查该方法是否正确地实现了覆写: @SuppressWarnings:告诉编译器忽略此处代码产生的警告. 这类注解不会被编译进入.class文件,它们在编译后就被编译器扔掉了. 第二类是由工具处理.class文件使用的注解,比如有些工具会在加载class的时候,对class做动态修改,实现一些特殊的功能.这类注解会被编译进入