您的位置:首页 > 编程语言 > Java开发

Spring Web ,使用annotation和form标签库开发web应用(一)基础配置

2010-07-03 18:36 1051 查看
摘要:介绍如何配置Spring web用标注实现controller,并且介绍View部分如何用form标签如何与controller相呼应,并有完整的例子,要求读者掌握spring web(过去称为spring mvc)的一般用法, 并了解java web(servlet,jsp)应用的配置和规范。

为什么使用java annotation?

众所周知spring配置xml在一个应用变得原来越大的时候,配置成为一种负担,效率瓶颈可以解决,就是通过使用annotation来识别controller,不需要在配置文件里面来声明controller bean,也不需要声明controller mapping,只要在something-servlet.xml配置文件里面加上一句:

<context:component-scan base-package="com.somecompany.appname.controller" />

在something-servlet.xml被加载的时候会加载这个包里的所有controller。是不是减少了很多工作量?

准备:

springframwork的各个jar之间的关系很微妙,有些jar未必用得到,这里将常用的包都加到classpath中了

org.springframework.core

org.springframework.web

org.springframework.web.servlet
cglib
... ....

配置WEB-INF/web.xml添加spring-web支持(listener,servlet,filter):

<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-name>icshtml</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>icshtml</servlet-name>
<url-pattern>/ics/*</url-pattern>
</servlet-mapping>

<filter>
<filter-name>httpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>httpMethodFilter</filter-name>
<servlet-name>icshtml</servlet-name>
</filter-mapping>
<!-- 下面这个filter是可选的,用来指定网页输出编码为UTF-8 -->

<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

配置[b]WEB-INF/[b]icshtml-servlet.xml[/b][/b]

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<!-- icshtml-servlet.xml被加载的时候会加载这个包里的所有controller -->
<context:component-scan base-package="com.hundsun.ics.controller" />

<!-- 两个view resolver,后一个用来映射返回给客户端页面的jsp文件名,前一个是用来配置controllerbean,这里用不着,因为我们已经改用annotation来声明controller,为了保持兼容,保留原来的配置-->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="1" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/views/" p:suffix=".jsp" p:order="2" />

<!-- 用户定义的bean -->
<bean id="user" class="ics.model.User" scope="session">
<!--如果要在controller中使用,这一句必不可少,因为controller是单例的,这个bean是session -->
<aop:scoped-proxy />
</bean>

</beans>

写一个登录页面("/WEB-INF/views/[b][b]login.jsp[b]" [b]):[/b][/b][/b][/b]

<%@ page contentType="text/html;charset=utf8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
</head>
<body >
<form:form modelAttribute="user" target="_self" >
<font color="#FFFFFF">用户登录</font>
<form:input path="username" />
<form:password path="password" size="20"/>
<input type="submit" value="登录" name="B1" >
</form:form>
</body>
</html>

现在来编写Controller(src/com/hundsun/ics/controller/LoginController.java):
package com.hundsun.ics.controller;
import ics.model.User;
//标识这个类为Controller,在icshtml-servlet.xml加载的时候,该类会自动被加载。

@Controller
@SessionAttributes("user")
public class LoginController {
User user;

//自动注入User,这个是icshtml-servlet.xml里面已经配置的session scope的bean。

@Autowired
[b]LoginController
(User,user){
this.user = user;
}
//当浏览器输入"http://somehost:8080/myapp/ics/login"时,会映射到该方法,
//然后返回login.jsp页面。
[/b]

@RequestMapping(value = "/

login

", method = RequestMethod.GET)
public String

login

() {
[b]
[b]

//do something


[/b]
return "login";
}
//当登录页面被提交时,会映射到该方法,注意,
[b]
[b][b]
在jsp[b]
提交时用post方法,才不会与上一个方法冲突

[/b][/b]
[/b]
[/b]


@RequestMapping(value = "/[b]
[b]

[b]
[b]

[b]
[b]

[b]

login



[/b]
[/b]

[/b]
[/b]

[/b]
[/b]", method = RequestMethod.POST)
public String login(@ModelAttribute("user") User myUser, BindingResult result, SessionStatus status) {
//do something
this.user.setUsername(myUser.getUsername());

model.put("user", [b]
[b]

[b]
[b]
[b]

[b]
[b]
[b]

[b]
[b]
user

[/b]

[/b]
[/b]
[/b]

[/b]
[/b]
[/b]

[/b]
[/b]);//必不可少,否则页面
[b]

[b]
[b]
[b]

[b][b]

[b]

c:out 语句会找不到。



[/b][/b]

[/b]
[/b]
[/b]

[/b]
[/b]
[/b]
System.out.println("User Name:" + user.getUsername());
return "welcome";
}

[/b]
}



[b]编写登录后的欢迎页

[b]

[b]
[b]("/WEB-INF/views/[b][b]welcome.jsp[b]" [b])[b]



[/b][/b][/b][/b][/b]
[/b]

[/b]

[/b]

[/b]

<%@ page contentType="text/html;charset=utf8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%>

<html>
<head>
</head>
<body >



<p>Welcome <c:out value="${user.username }"></c:out></p>



</body>
</html>

[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐