自己写项目练手——第一天

工作一年多,从一开始的小小菜鸟正在慢慢向小菜鸟迈进。由于个人比较轴,在项目中看到什么技术,就想着要把它搞懂,不然会很不舒服。在这一年中《博客园》成为学习技术的首选,最喜欢看别人的博客,随着对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

 

 

 

 

 

 

 

 

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

posted @ 2015-12-12 12:26  夏日的雪花  阅读(824)  评论(0编辑  收藏  举报