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

来源:互联网 发布:手机制作抽奖软件 编辑:程序博客网 时间:2024/05/29 18:34

摘要:介绍如何配置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>

 

配置WEB-INF/icshtml-servlet.xml

 

<?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/login.jsp):
<%@ 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
LoginController(User,user){
this.user = user;
}
//当浏览器输入"http://somehost:8080/myapp/ics/login"时,会映射到该方法,
//然后返回login.jsp页面。
@RequestMapping(value = "/ 
login
 
", method = RequestMethod.GET)
public String  
login
 
() {
//do something
return "login";
}
//当登录页面被提交时,会映射到该方法,注意, 
在jsp 
提交时用post方法,才不会与上一个方法冲突
@RequestMapping(value = "/ 
login
 
", method = RequestMethod.POST)
public String login(@ModelAttribute("user") User myUser, BindingResult result, SessionStatus status) {
//do something
this.user.setUsername(myUser.getUsername());
model.put("user",  
user
 
);//必不可少,否则页面 
c:out 语句会找不到。
System.out.println("User Name:" + user.getUsername());
return "welcome";
}
}

编写登录后的欢迎页 
("/WEB-INF/views/welcome.jsp) 
<%@ 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>
0 0
原创粉丝点击