Spring Web应用入门

Spring的Web应用框架也是一个基于web容器的一个框架,因此作为一个Servlet应用运行在容器中,实际上也就是一个普通的web应用,本文已Tomcat5.59版本容器为例来看Spring(V1.21)的配置和应用.

在Spring Web框架中一般我们要提供三样东西:一个是自己的表示层页面,可以是velocity,xslt,freemarker,jasperreports等资源,一个是值对象类,再一个就是控制器,在这个类的子类中提供我们自己的业务功能,比如扩展了SimpleFormController类的控制器处理表单数据. Spring提供了多种控制器拱扩展,我们需要覆盖这些类中的:
  public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response);
  protected ModelAndView onSubmit(Object cmd, BindException ex)throws Exception 
  protected ModelAndView onSubmit(HttpServletRequest request,HttpServletResponse response,
  Object cmd,BindException ex)
  如果两个onSubmit同时出现在类中,则参数多的那个具有较高的调用优先级.

首先,创建一个简单的控制类LoginAction ,它扩展Spring框架提供的SimpleFormController 类:

public class LoginAction extends SimpleFormController {
 private String fail_view;
 private String success_view;

 protected ModelAndView onSubmit(Object vo, BindException ex)throws Exception {
  LoginInfo loginInfo = (LoginInfo) vo;
  if (login(loginInfo) == 0) {
   HashMap result_map = new HashMap();
   result_map.put("logininfo", loginInfo);
   return new ModelAndView(this.getSuccess_view());
  } else {
   return new ModelAndView(this.getFail_view());
  }
 }

 private int login(LoginInfo loginInfo) {
  if ("user".equalsIgnoreCase(loginInfo.getUsername())
    && "password".equals(loginInfo.getPassword())) {
   return 0;
  }
  return 1;
 }

 public String getFail_view() {
  return fail_view;
 }

 public String getSuccess_view() {
  return success_view;
 }

 public void setFail_view(String string) {
  fail_view = string;
 }

 public void setSuccess_view(String string) {
  success_view = string;
 }
}

通过覆盖父类中的onSubmit方法,我们提供了自己的认证功能,它接受的vo参数是一个用户信息类,这个类中的信息由Spring框架根据客户发来的请求对象中的信息填充,并通过调用LoginAction类对象的onSubmit方法传递给我们的业务方法进行处理.那个值对象定义如下:


public class LoginInfo {
 private String username;

 private String password;

 public String getPassword() {
  return password;
 }

 public void setPassword(String password) {
  this.password = password;
 }

 public String getUsername() {
  return username;
 }

 public void setUsername(String username) {
  this.username = username;
 }
}

现在,该是编写表示层的时候了,由三个页面组成:login.htm,index.jsp和loginfail.jsp.

登录页面login.htm

<html>
<body>
<p align="center">登录</p>
<form method="POST" action="login.do">
<br>
用户名:
<input type="text" name="username" >
<br>
密 码 :
<input type="password" name="password" >
<br>
<p>
<input name="submit" type="submit" value="提交" >
<input name="reset" type="reset" value="重置">
</p>
</form>
</body>
</html>

主页面index.jsp

<%@page import="com.web.spring.*"%>
<html>
<body>
<jsp:useBean id="logininfo" scope="request" type="com.web.spring.LoginInfo"/>
<p>Login Success!!!</p>
<p>Current User:
<jsp:getProperty name="logininfo" property="username"/>
</p>
</body>
</html>

loginfail.jsp,只是向你报告登录失败.

<html>
<body>
<p>Login Failure!!!</p>
</body>
</html>

Spring需要的三样资源都提供完毕了,如何装配呢,利用一个xml文件,这个文件的文档类型在http://www.springframework.org/dtd/spring-beans.dtd 中定义,Spring的IOC容器实现知道如何处理其中定义的各个元素.这个配置文件命名为config.xml,名字可以任意取,但必须在web描述符文件中指定见下文.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
 <!--定义一个视图解析器,用于把输出结果与输出界面相融合,为表现层提供呈现资源;viewClass属性的值还可以是org.springframework.web.servlet.view.freemarker.FreeMarker,

org.springframework.web.servlet.view.velocity.VelocityView,这个例子用的是JstlView,处理jsp页面,通过这种方式,Spring的Web框架提供了利用多种表现层技术的方式.属性prefix告诉Spring资源来自哪里,suffix告诉Spring要处理的是哪类资源.

-->
 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass">
   <value>org.springframework.web.servlet.view.JstlView</value>
  </property>
  <property name="prefix">
   <value>WEB-INF/view/</value>
  </property>
  <property name="suffix">
   <value>.jsp</value>
  </property>
 </bean>
 <!--影射请求的URL到对应的控制器 -->
 <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
   <props>
    <prop key="login.do">LoginAction</prop>
   </props>
  </property>
 </bean>
 <!---控制器定义-->
 <bean id="LoginAction" class="com.web.spring.LoginAction">
  <property name="commandClass">

<!-- 由LoginAction处理的VO资源 -->
   <value>com.web.spring.LoginInfo</value>
  </property>

<!-- 登录失败 将处理的资源 :WEB-INF/view/loginfail.jsp -->
  <property name="fail_view">
   <value>loginfail</value>
  </property>

<!-- 登录失败 将处理的资源 :WEB-INF/view/index.jsp -->
  <property name="success_view">
   <value>index</value>
  </property>
 </bean>
</beans>

这个配置文件定义了三个bean,全都被Spring的IOC容器管理.

最后,看看它的web描述符文件web.xml.

<?xml version="1.0" encoding="ISO-8859-1" ?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
 <servlet>
  <servlet-name>Dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/conf/config.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>Dispatcher</servlet-name>
  <url-pattern>*.do</url-pattern>
 </servlet-mapping>
   <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

这个配置文件即可把Spring纳入到容器中,使你能利用到它的功能.其中在<init-param>节点中配置了名为“contextConfigLocation”指定了Spring的配置文件为:/WEB-INF/conf/config.xml,如果不提供这个参数将使用默认配置文件:/WEB-INF/<servlet name>-servlet.xml,在本例中servlet name元素的值是Dispatcher 所以默认配置文件是:Dispatcher-servlet.xml.

到此,在演示了IOC容器的类型2使用方式的同时,一个简单的纯Spring MVC Web框架的Web应用也介绍完了,复制这里的例子文件可以运行它,需要保证lib下至少有4个库:spring.jar,log4j-1.2.9.jar,jstl.jar,standard.jar.


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Web 和 Freemarker 都是非常流行的 Java 技术,可以用来开发 Web 应用程序。下面是一个简单的入门示例,让你了解如何在 Spring Web 应用程序中使用 Freemarker 模板引擎。 1. 创建一个 Spring Web 项目 首先,你需要创建一个 Spring Web 项目。你可以使用任何 IDE,例如 Eclipse 或 IntelliJ IDEA。在创建项目时,请确保选择了 Spring Web 依赖项。 2. 添加 Freemarker 依赖项 在项目的 pom.xml 文件中添加以下依赖项: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> ``` 3. 创建一个 Freemarker 模板 在 src/main/resources/templates 目录下创建一个名为 index.ftl 的文件。在该文件中添加以下内容: ``` <!DOCTYPE html> <html> <head> <title>Hello World</title> </head> <body> <h1>${message}</h1> </body> </html> ``` 这是一个非常简单的 HTML 文件,其中包含一个 h1 标签和一个变量 ${message},该变量将在后面的步骤中由 Spring Web 应用程序提供。 4. 创建一个控制器 在 src/main/java 目录下创建一个名为 HomeController 的类,该类包含以下内容: ``` @Controller public class HomeController { @GetMapping("/") public String home(Model model) { model.addAttribute("message", "Hello, World!"); return "index"; } } ``` 这是一个简单的控制器,它使用 @Controller 注解标记,并且包含一个名为 home 的方法,该方法使用 @GetMapping 注解标记。当用户访问根路径时,该方法将返回 index 模板,并将一个名为 message 的变量添加到模型中。 5. 运行应用程序 现在,你已经准备好运行应用程序了。在 IDE 中运行应用程序或使用以下命令在命令行中运行: ``` mvn spring-boot:run ``` 6. 查看输出 现在,你可以在浏览器中访问 http://localhost:8080/,你将看到一个包含“Hello, World!”消息的页面。这是由 Freemarker 模板引擎生成的,该模板引擎使用 Spring Web 应用程序提供的数据填充模板。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值