SpringMVC

工作流程

http://blog.youkuaiyun.com/zuoluoboy/article/details/19766131

下面对工作流程中的关键词总结提炼(其实就是自己瞎bb):

DispatcherServletDispatcherServlet主要用作职责调度工作,本身主要用于控制流程,主要职责如下:
1. 文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;
2. 通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);
3. 通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);
4. 通过ViewResolver解析逻辑视图名到具体视图实现;
5. 本地化解析;
6. 渲染具体的视图等;
7. 如果执行过程中遇到异常将交给HandlerExceptionResolver来解析
HandlerMapping为每个请求找到合适的处理器handler,比如@RequestMapping(“url映射”)
handler处理方法
//TODO

web.xml中配置。里面设置了中央控制器DispatcherServlet:

  <servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- spring配置文件位置,默认位置为/WEB-INF/[servlet-name]-servlet.xml -->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <!-- 可以把post请求转化为put,delete请求 -->
  <filter>  
    <filter-name>HiddenHttpMethodFilter</filter-name>  
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>  
</filter>  

<filter-mapping>  
    <filter-name>HiddenHttpMethodFilter</filter-name>  
    <url-pattern>/*</url-pattern>
</filter-mapping> 

核心文件配置:

       <!-- 视图解析器 -->
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <!-- 将jsp页面放置在web-info中可以保护这些页面不被浏览器直接访问 -->
        <property name="prefix" value="/WEB-INF/pages/" />
        <property name="suffix" value=".jsp"></property>
    </bean>


    <!-- 加入对静态资源的处理:
    servlet在找页面时,走的是dispatcherServlet路线。找不到的时候会报404。加上这个默认的servlet时候,servlet在找不到的时候会去找静态的内容 -->
    <mvc:default-servlet-handler/>

    <!-- 作用是向 Spring 容器注册 AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、 
        PersistenceAnnotationBeanPostProcessor 以及 RequiredAnnotationBeanPostProcessor 
        这 4 个BeanPostProcessor。 注册这4个 BeanPostProcessor的作用,就是为了你的系统能够识别相应的注解。
    <context:annotation-config /> -->

    <!-- 在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component 
        @Controller@Service等这些注解的类,则把这些类注册为bean -->
     <context:component-scan base-package="diyun" ></context:component-scan>

    <!-- (1) 自动注册DefaultAnnotationHandlerMapping(处理url映射)与AnnotationMethodHandlerAdapter 
        两个bean,是spring MVC为@Controller分发请求所必须的;
        (2)提供一系列:数据绑定,数字和日期的format(@NumberFarmat,@DateTimeFormat),xml,json的默认读写支持
 -->
    <mvc:annotation-driven />

    <!-- 不经过handler而直接转发
    <mvc:view-controller path="/success" view-name="success"/>
     -->


     <!-- 配置errorfield国际化资源文件 -->
     <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="i18n"></property>
     </bean>

     <!-- 文件上传 -->
     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="utf-8"></property>
        <property name="maxUploadSize" value="102400"></property>
     </bean>

Controller:

/*
 * 备忘:
 * Converter接口:自定义类型转化器
 * View接口:自定义视图
 * 
 */
@Controller
//@SessionAttributes(value={},types={String.class})
//在model.addAttribute时,将属性也放到session中(示例将所有String类型放到session中)
public class TestController {
    @Autowired
    private UserDao userDao;
    @Autowired
    private FavouriteDao favouriteDao;


    @RequestMapping("/list")//value支持" * "通配符
    /*
     * @RequestParam获取url传参,例如xxx?id=1,获得参数id=1.required属性配置该传参是否必须
     * @CookieValue获取cookie
     * 支持原生api作为参数,如request,response,session等
     */
    public ModelAndView showList(@RequestParam(value="id",required=false,defaultValue="1") Integer id 
            ,@CookieValue("NAME") String name,HttpServletRequest request){
        ModelAndView mav=new ModelAndView("success");//对应success.jsp
        mav.addObject("obj","obj"); //相当于request.setAttribute
        return mav;
    }


    @RequestMapping(value="/addUser",method=RequestMethod.GET)
    public String addUser(Model model){//传入Map或者Model,相当于request.setAttribute
        model.addAttribute("user",new User());//必须加。spring认为表单一定回显,对应前端modelAttribute=user
        model.addAttribute("flist",favouriteDao.list());
        return "addUser";//被视图解析器解析,对应/WEB-INF/pages/addUser.jsp
    }

    @RequestMapping(value="/addUser",method=RequestMethod.POST)
    /*
     * User user:级联属性,前端表单name属性为user.xxx,提交后自动匹配填充
     */
    public String submitForm(@Valid User user,BindingResult errors,Model model){
        //前端通过<form:errors>显示错误信息,可以通过配置国际化资源文件来指定信息内容,如:NotEmpty.user.name=用户名不能为空
        if(errors.hasErrors()){

            System.out.println(errors.getFieldError());
            model.addAttribute("flist",favouriteDao.list());
            return "/addUser";
        }
        userDao.add(user);
        return "list";
    }
    //对应前端<input type="hidden" name="_method" value="DELETE">
    @RequestMapping(value="/delete/{id}",method=RequestMethod.DELETE)
    public String delete(@PathVariable Integer id){
        userDao.delete(id);
        return "redirect:/list";
    }
    @RequestMapping(value="/addUser/{id}")//对于路径/addUser/666,获得参数id=666
    public String updateUser(@PathVariable Integer id,Model model){
        model.addAttribute("user",userDao.get(id));
        model.addAttribute("flist",favouriteDao.list());
        return "addUser";
    }
    @RequestMapping(value="/addUser",method=RequestMethod.PUT)
    public String update(User user){
        userDao.add(user);
        return "redirect:/list";
    }

//  //该注释修饰的方法,会在每个目标方法执行之前先调用
//  @ModelAttribute
//  public void demoMethod(){}
//  
//  //数据校验,类型转化。。等等
//  @InitBinder
//  public void initBinder(WebDataBinder binder){}
//  
    //springMVC处理json
    //requestBody直接把返回值传递给客户端
    @ResponseBody
    @RequestMapping(value="/button",
        produces={"application/json;charset=UTF-8"})//设定返回内容的类型(可不加)
    public String testJson(@RequestBody String testBody){//获取前台传来的数据
        System.out.println("路过~");
        return "lala";//向后台发送数据
    }

    @RequestMapping(value="/testUpload")
    public String  testUpload(@RequestParam("file") MultipartFile file){
        System.out.println(file.getOriginalFilename());
        return "addUser";
    }
}
内容概要:本文档详细介绍了Android开发中内容提供者(ContentProvider)的使用方法及其在应用间数据共享的作用。首先解释了ContentProvider作为四大组件之一,能够为应用程序提供统一的数据访问接口,支持不同应用间的跨进程数据共享。接着阐述了ContentProvider的核心方法如onCreate、insert、delete、update、query和getType的具体功能与应用场景。文档还深入讲解了Uri的结构和作用,它是ContentProvider中用于定位资源的重要标识。此外,文档说明了如何通过ContentResolver在客户端应用中访问其他应用的数据,并介绍了Android 6.0及以上版本的运行时权限管理机制,包括权限检查、申请及处理用户的选择结果。最后,文档提供了具体的实例,如通过ContentProvider读写联系人信息、监听短信变化、使用FileProvider发送彩信和安装应用等。 适合人群:对Android开发有一定了解,尤其是希望深入理解应用间数据交互机制的开发者。 使用场景及目标:①掌握ContentProvider的基本概念和主要方法的应用;②学会使用Uri进行资源定位;③理解并实现ContentResolver访问其他应用的数据;④熟悉Android 6.0以后版本的权限管理流程;⑤掌握FileProvider在发送彩信和安装应用中的应用。 阅读建议:建议读者在学习过程中结合实际项目练习,特别是在理解和实现ContentProvider、ContentResolver以及权限管理相关代码时,多进行代码调试和测试,确保对每个知识点都有深刻的理解。
开发语言:Java 框架:SSM(Spring、Spring MVC、MyBatis) JDK版本:JDK 1.8 或以上 开发工具:Eclipse 或 IntelliJ IDEA Maven版本:Maven 3.3 或以上 数据库:MySQL 5.7 或以上 此压缩包包含了本毕业设计项目的完整内容,具体包括源代码、毕业论文以及演示PPT模板。 项目配置完成后即可运行,若需添加额外功能,可根据需求自行扩展。 运行条件 确保已安装 JDK 1.8 或更高版本,并正确配置 Java 环境变量。 使用 Eclipse 或 IntelliJ IDEA 打开项目,导入 Maven 依赖,确保依赖包下载完成。 配置数据库环境,确保 MySQL 服务正常运行,并导入项目中提供的数据库脚本。 在 IDE 中启动项目,确认所有服务正常运行。 主要功能简述: 用户管理:系统管理员负责管理所有用户信息,包括学生、任课老师、班主任、院系领导和学校领导的账号创建、权限分配等。 数据维护:管理员可以动态更新和维护系统所需的数据,如学生信息、课程安排、学年安排等,确保系统的正常运行。 系统配置:管理员可以对系统进行配置,如设置数据库连接参数、调整系统参数等,以满足不同的使用需求。 身份验证:系统采用用户名和密码进行身份验证,确保只有授权用户才能访问系统。不同用户类型(学生、任课老师、班主任、院系领导、学校领导、系统管理员)具有不同的操作权限。 权限控制:系统根据用户类型分配不同的操作权限,确保用户只能访问和操作其权限范围内的功能和数据。 数据安全:系统采取多种措施保障数据安全,如数据库加密、访问控制等,防止数据泄露和非法访问。 请假审批流程:系统支持请假申请的逐级审批,包括班主任审批和院系领导审批(针对超过三天的请假)。学生可以随时查看请假申请的审批进展情况。 请假记录管理:系统记录学生的所有请假记录,包括请假时间、原因、审批状态及审批意见等,供学生和审批人员查询。 学生在线请假:学生可以通过系统在线填写请假申请,包括请假的起止日期和请假原因,并提交给班主任审批。超过三天的请假需经班主任审批后,再由院系领导审批。 出勤信息记录:任课老师可以在线记录学生的上课出勤情况,包括迟到、早退、旷课和请假等状态。 出勤信息查询:学生、任课老师、班主任、院系领导和学校领导均可根据权限查看不同范围的学生上课出勤信息。学生可以查看自己所有学年的出勤信息,任课老师可以查看所教班级的出勤信息,班主任和院系领导可以查看本班或本院系的出勤信息,学校领导可以查看全校的出勤信息。 出勤统计与分析:系统提供出勤统计功能,可以按班级、学期等条件统计学生的出勤情况,帮助管理人员了解学生的出勤状况
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值