自己写项目练手——第一天
工作一年多,从一开始的小小菜鸟正在慢慢向小菜鸟迈进。由于个人比较轴,在项目中看到什么技术,就想着要把它搞懂,不然会很不舒服。在这一年中《博客园》成为学习技术的首选,最喜欢看别人的博客,随着对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>标签的使用总是如下报错
由于直接访问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:路径,来访问,这里就引出了一个问题:
既然springmvc.xml放在resources下,那么路径肯定是classpath:resources/springmvc.xml,结果一直访问不到,纠结了半天,后来我又切换到Navigator视图,结果豁然开朗:
原来eclipse把文件直接放在classpath下了所以路径直接是:classpath:springmvc.xml,我想是不是因为在resources的文件才这样,我有建了一个文件夹test
这我就明白了,这跟文件名没有关系,因为它们都是资源文件夹,所以会自动到classpath下如图:
第一天的问题就到这了,明天有时间再继续总结。