zoukankan      html  css  js  c++  java
  • 自己写项目练手——第一天

    工作一年多,从一开始的小小菜鸟正在慢慢向小菜鸟迈进。由于个人比较轴,在项目中看到什么技术,就想着要把它搞懂,不然会很不舒服。在这一年中《博客园》成为学习技术的首选,最喜欢看别人的博客,随着对Java的满满了解,我感觉越来越喜欢它了,以前下班回家就是看看电影、打打游戏,但是现在感觉那些好没劲,只有技术才能让我感到很爽,很充实,我越来越来程序员这份工作了,呵呵。今天开始是自己一个人写项目,因为一直在公司的框架下写一些重复的代码让我有危机感,而且求知欲得不到满足,所以我决定自己从头到尾的开发一个小项目来练练手。每天记录下开发中遇到的问题

    第一天的问题:

    问题一、访问jsp其实是访问jsp编译好的servlet字节码,是如何找到这个servlet的呢?

    我试着在web.xml加入如下代码:

    <servlet-mapping>
          <servlet-name>default</servlet-name>
          <url-pattern>*.jsp</url-pattern>
      </servlet-mapping>

    结果出乎我的意料响应如下:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <h1>test</h1>
    </body>
    </html>

    把源码返回了,我一直以为jsp是默认servlet处理的结果是我异想天开了,通过查资料原来处理jsp页面的servlet名字就是jsp;

    <servlet-mapping>
          <servlet-name>jsp</servlet-name>
          <url-pattern>*.jsp</url-pattern>
      </servlet-mapping>

    这样就能正常返回了。

    问题二:springmvc中<form:form>标签的使用总是如下报错

    Neither BindingResult nor plain target object for bean name 'command' available as request attribute

    由于直接访问jsp页面不好,所以都是通过后台转发的,后台代码:

    @RequestMapping(value = "/login", method = RequestMethod.GET)
       public String login() {
          return "login";
       }

    前台页面:

    <body>
        <form:form action="/user/login" method="post">
            用户名:<form:input path="username" cssClass="form-control"/>      
            <form:errors path="username" cssStyle="color:red" />
            密码:<form:password path="password" cssClass="form-control"/>
            <form:errors path="password" cssStyle="color:red" />  
            <button type="submit" class="templatemo-blue-button width-100">登录</button>
        </form:form>
    </body>

    从字面意思是:作用域里没有定义command。解决方法就是在访问这个页面之间把command放入作用域。而且不能随便把任一对象给其赋值,该对象中必须包含username,password的属性(get方法),不然还是报错。代码如下:

    @RequestMapping(value = "/login", method = RequestMethod.GET)
       public String student(Model model) {
        model.addAttribute("command",new User());
          return "login";
       }

    原因:对于<form:from>标签会自动绑定Model中的一个属性值到form对应的实体对象,默认是command属性,如果你不想用command属性,还可以改如要改成user:

    <form:form commandName="user" action="/user/login"  method="post">

    <form:form>还有好多功能暂时就研究到这。

    问题三:springmvc中的重定向总是404,而且url不是我想要的。

    在表单提交后,为了防止重复提交,一般会在处理请求方法中重定向,只要把逻辑视图改“redirect:/index”,我天真的以为会访问到WEB-INF/jsp中的index.jsp,但结果一直是404;通过查阅资料才知道”redirect:/index”是重定向到另一个处理方法,必须通过该处理方法返回逻辑视图,才能正常显示。

    问题四:css、image静态资源被拦截,但是我写了<mvc:default-servlet-handler/>

    对于restful风格的拦截,处理静态资源一般有三种,我选择的是<mvc:default-servlet-handler/>。但是令我奇怪的是静态资源还是访问到,我一度以为可能是我的路径写的有问题,但是试了几种路径的写法,还是访问不到静态资源,于是我开始怀疑<mvc:default-servlet-handler/>是不是没有生效,进而开始考虑是不是springmvc.xml路径访问有问题,结果查了一下果然是。以此我学了一个知识点,配置文件的方法。

    1、一般放在WEB-INF下

    2、放在项目下的classpath下,通过classpath:路径,来访问,这里就引出了一个问题:

    image

    既然springmvc.xml放在resources下,那么路径肯定是classpath:resources/springmvc.xml,结果一直访问不到,纠结了半天,后来我又切换到Navigator视图,结果豁然开朗:

    image

    原来eclipse把文件直接放在classpath下了所以路径直接是:classpath:springmvc.xml,我想是不是因为在resources的文件才这样,我有建了一个文件夹test

    image结果在Navigator视图下image

    这我就明白了,这跟文件名没有关系,因为它们都是资源文件夹,所以会自动到classpath下如图:

    image

    第一天的问题就到这了,明天有时间再继续总结。

  • 相关阅读:
    JavaScript函数式编程——柯里化
    JavaScript使用纯函数避免bug
    ES6入门五:箭头函数、函数与ES6新语法
    图解--二分查找树
    电梯引发的思考
    VIM
    vs 2017
    多线程系列(四):Task
    多线程系列(三):线程池基础
    Docker for windows : 安装Redis
  • 原文地址:https://www.cnblogs.com/liruiloveparents/p/5034799.html
Copyright © 2011-2022 走看看