- 浏览: 518462 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (299)
- Oracle(pl/sql_Erp_Pro*C) (69)
- 设计模式 (4)
- spring (23)
- ext (17)
- apache开源项目应用 (4)
- jquery (16)
- 生活琐事 (8)
- 下载资源 (23)
- mysql (2)
- Eclipse使用积累 (5)
- 报表类(报表/图表) (13)
- php (4)
- Web多彩文本框 (3)
- json (4)
- jqgrid (2)
- ant (2)
- java算法积累 (8)
- EL表达式/JSTL (4)
- poi (3)
- gwt (2)
- 爬网第一步 (2)
- javascript (17)
- Javaweb (8)
- tomcat (1)
- flex (1)
- Java&DB (3)
- J2SE (7)
- linux (3)
- 数据结构 (1)
- dot net (5)
- struts (1)
- ibatis (1)
- log4j (1)
- 项目管理 (1)
- Java native interface(jni,jacob......) (5)
- applet (1)
- VB.net/C#.net/JNI (20)
- css (1)
- Sqlite (1)
- servlet (1)
- REST (1)
最新评论
-
wenhurena:
能不能给一下解压密码roki.work.2017@gmail. ...
Ebs解体新書と学習資料1 -
liutao1600:
楼主写的太好了,每天学习~~
Spring_MVC(6)测试 -
liutao1600:
太好了,每天学习你的文章~~~
Spring_MVC(3)表单页面处理 -
liutao1600:
学习了,太好了
Spring_MVC(2)控制层处理 -
liutao1600:
学习了~~~
Spring_MVC(1)构建简单web应用
参考:Sping 2.0.8\docs\MVC-step-by-step
实现目标
编写一个ShirdrnController,实现了org.springframework.web.servlet.mvc.Controller接口;
使用JSP文件作为视图,将控制器返回的Model渲染出来,JSP文件中使用了JSTL;
使用InternalResourceViewResolver实现视图的解析。
准备工作
工程结构如下所示:
SpringMVCViewResolver
│ .classpath
│ .mymetadata
│ .project
│ .springBeans
│
├─.myeclipse
├─src
│ └─org
│ └─shirdrn
│ ├─beans
│ │ PersonBean.java
│ │
│ └─spring
│ └─controller
│ ShirdrnController.java
│
└─WebRoot
│ index.jsp
│ persons.jsp
│
├─META-INF
│ MANIFEST.MF
│
└─WEB-INF
│ c-1_0-rt.tld
│ c-1_0.tld
│ c.tld
│ fmt-1_0-rt.tld
│ fmt-1_0.tld
│ fmt.tld
│ fn.tld
│ permittedTaglibs.tld
│ scriptfree.tld
│ shirdrn-servlet.xml
│ spring.tld
│ sql-1_0-rt.tld
│ sql-1_0.tld
│ sql.tld
│ web.xml
│ x-1_0-rt.tld
│ x-1_0.tld
│ x.tld
│
├─classes
│ └─org
│ └─shirdrn
│ ├─beans
│ │ PersonBean.class
│ │
│ └─spring
│ └─controller
│ ShirdrnController.class
│
└─lib
commons-attributes-api.jar
commons-attributes-compiler.jar
commons-beanutils.jar
commons-collections.jar
commons-digester.jar
commons-fileupload.jar
commons-httpclient.jar
commons-lang.jar
commons-logging.jar
cos.jar
dom4j-1.6.jar
freemarker.jar
itext-1.3.jar
jakarta-oro-2.0.8.jar
jasperreports-1.0.3.jar
jaxen-1.1-beta-4.jar
jstl.jar
jxl.jar
log4j-1.2.13.jar
poi-2.5.1.jar
spring-beans.jar
spring-context.jar
spring-core.jar
spring-web.jar
spring-webmvc.jar
standard.jar
velocity-1.4.jar
velocity-tools-generic-1.2.jar
velocity-tools-view-1.2.jar
其中,PersonBean就是一个POJO,如下所示:
package org.shirdrn.beans;
import java.io.Serializable;
import java.util.Date;
public class PersonBean implements Serializable {
private Integer id;
private String name;
private String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
实现过程
为了清晰,我按照步骤实现,如下所示:
第一步,注入List。
在该ShirdrnController控制器中使用Setter注入了一个PersonBean的List,作为Model,因此,首先要在shirdrn-servlet.xml中注入PersonBean的List中的每一个Person,这里注入了3个bean,如下所示:
<bean id="personABean" class="org.shirdrn.beans.PersonBean"
abstract="false" singleton="true" lazy-init="default"
autowire="default" dependency-check="default">
<property name="id">
<value>1001</value>
</property>
<property name="name">
<value>张叁</value>
</property>
<property name="email">
<value>shirdrn@hotmail.com</value>
</property>
</bean>
<bean id="personBBean" class="org.shirdrn.beans.PersonBean"
abstract="false" singleton="true" lazy-init="default"
autowire="default" dependency-check="default">
<property name="id">
<value>1002</value>
</property>
<property name="name">
<value>王者</value>
</property>
<property name="email">
<value>jamkk@hotmail.com</value>
</property>
</bean>
<bean id="personCBean" class="org.shirdrn.beans.PersonBean"
abstract="false" singleton="true" lazy-init="default"
autowire="default" dependency-check="default">
<property name="id">
<value>1003</value>
</property>
<property name="name">
<value>将军</value>
</property>
<property name="email">
<value>general@hotmail.com</value>
</property>
</bean>
将List注入到ShirdrnController中,在shirdrn-servlet.xml文件中配置如下:
<bean id="shirdrnController"
class="org.shirdrn.spring.controller.ShirdrnController"
abstract="false" singleton="true" lazy-init="default"
autowire="default" dependency-check="default">
<property name="personsBean">
<list>
<ref bean="personABean" />
<ref bean="personBBean" />
<ref bean="personCBean" />
</list>
</property>
</bean>
第二步,实现ShirdrnController,如下所示:
package org.shirdrn.spring.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class ShirdrnController implements Controller {
private List personsBean;
public List getPersonsBean() {
return personsBean;
}
public void setPersonsBean(List personsBean) {
this.personsBean = personsBean;
}
public ModelAndView handleRequest(HttpServletRequest arg0,
HttpServletResponse arg1) throws Exception {
return new ModelAndView("persons","persons",getPersonsBean());
}
}
这里,返回了return new ModelAndView("persons","persons",getPersonsBean());,其中,第一个“persons”是视图文件的名称,对应于JSP文件persons.jsp,第二个“persons”就是Model。一个PersonBean的List。
第三步,定义HandlerMapping,URL映射方式。
仍然使用SimpleUrlHandlerMapping映射方式,在shirdrn-servlet.xml文件中配置URL映射方式,如下所示:
<bean id="shirdrnUrlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"
abstract="false" singleton="true" lazy-init="default"
autowire="default" dependency-check="default">
<property name="mappings">
<props>
<prop key="/shirdrn.xyz">shirdrnController</prop>
</props>
</property>
</bean>
当请求的URL为shirdrn.xyz的时候,使用控制器ShirdrnController进行控制转发,然后再交由中央控制器DispatcherServlet,选择合适的视图解析器,实现视图的派发。
第四步,配置视图解析器。
在shirdrn-servlet.xml文件中,配置视图解析器,如下所示:
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
abstract="false" singleton="true" lazy-init="default"
autowire="default" dependency-check="default">
<property name="viewClass">
<value>org.springframework.web.servlet.view.JstlView</value>
</property>
<property name="prefix">
<value>/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
bean为viewResolver,使用InternalResourceViewResolver视图解析器进行视图的解析。
这里的property的name很关键:
viewClass指定了选择何种视图技术,这里使用JSTL技术;
prefix是视图文件的前缀,即目录名,因为我们把persons.jsp放到了目录/WebRoot/之下,所以只需要配置一个“/”,如果放在目录/WebRoot/目录下的一个名称为view的目录中,这里prefix的值应该为/view/;
suffix是视图文件的后缀,即扩展名,如使用JSP文件,则为“.jsp”。
第五步,实现视图文件。
这里是用到了两个JSP文件,分别如下。
index.jsp文件,是一个中间转发页面,实现了定向,定向到/shirdrn.xyz:
<%@ page session="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
<%@ page language="java" pageEncoding="UTF-8"%>
<c:redirect url="/shirdrn.xyz"></c:redirect>
persons.jsp,实现视图的渲染,显示数据:
<%@ page session="false"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>人员列表页面</title>
<style type="text/css">
body{
font-size:16px;
color:yellow;
}
</style>
</head>
<body bgcolor="#FFFFFF">
<table bgcolor="green" border="1" borderColor="#FFFFFF" align="center" width="100%">
<tr>
<td colspan="3"><b>人员列表如下</td>
</tr>
<tr>
<td>ID</td><td>姓名</td><td>Email</td>
</tr>
<c:forEach items="${persons}" var="person">
<tr>
<td><c:out value="${person.id}" /></td>
<td><c:out value="${person.name}" /></td>
<td><c:out value="${person.email}" /></td>
</tr>
</c:forEach>
</table>
</body>
</html>
第六步,配置应用的web.xml文件。
在web.xml文件中配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
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">
<servlet>
<servlet-name>shirdrn</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>shirdrn</servlet-name>
<url-pattern>*.xyz</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
测试实现
启动Tomcat Web Server。
在浏览器地址栏中键入链接地址http://localhost:8080/SpringMVCViewResolver/shirdrn.xyz,显示如图所示:
关于异常
因为是第一次使用JSTL,感觉挺新鲜的。
需要两个jar包:standard.jar和jstl.jar。
但还是除了点异常:
org.apache.jasper.JasperException: /persons.jsp(27,4) According to TLD or attribute directive in tag file, attribute items does not accept any expressions
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:405)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:146)
org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:955)
org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:710)
org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1441)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2213)
org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2219)
org.apache.jasper.compiler.Node$Root.accept(Node.java:456)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
org.apache.jasper.compiler.Validator.validate(Validator.java:1489)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:157)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:267)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:255)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:556)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:293)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:111)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:965)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:744)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:663)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:394)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:348)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
异常信息提示:items属性不能够接受任何表达式,其实怎么可能呢,不接受怎么渲染视图啊。
实际上一个版本的问题,将JSP页面中:
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
应该改为:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
这样就解决了。
发表评论
-
cronExpression
2010-08-30 17:57 1188一个Cron-表达式是一个由六至七个字段组成由空格分隔的 ... -
spring任务调度(task)
2010-08-23 13:24 2845spring 任务调度总结参考资料http://www.ibm ... -
spring 任务配置
2010-08-23 10:45 1202xml 代码 <bean id="i ... -
spring3.0注解式声明
2010-08-19 17:39 4369从spring2.5开始,annotation结合BeanPo ... -
Spring Roo 自动化集成开发工具
2010-08-04 14:54 2246Roo是一种 Spring 开发的辅助工具,使用命令行操作来生 ... -
spring3.0学习
2010-08-03 16:24 858https://src.springframework.org ... -
Spring mvc 转发、重定向
2010-07-28 16:53 2406spring控制器最后返回一个ModelAndView( ... -
spring api download
2010-07-28 08:43 1175在网上找了好多,都下不下来,要不就是需要注册登录什么的,才能下 ... -
Spring uploadFile
2010-05-02 20:45 2231先让我们来看一段摘自《Spring 2.5 Referen ... -
Spring_MVC(6)测试
2010-04-24 18:48 3722这里将用到以下几个包: 引用 aopalliance-1 ... -
Spring_MVC(5)业务层处理
2010-04-24 18:47 1984这里将用到以下几个包: 引用 aopalliance-1 ... -
Spring_MVC(4)持久层处理
2010-04-24 18:45 1200这里将用到以下几个包: 引用 aopalliance-1 ... -
Spring_MVC(3)表单页面处理
2010-04-24 18:43 3037// 跳转到用户信息页面 ... -
Spring_MVC(2)控制层处理
2010-04-24 18:42 1694言归正传,研究一下注解下的控制层。 我习惯于使用JSTL展示页 ... -
Spring_MVC(1)构建简单web应用
2010-04-24 18:40 1437Java代码 /** * 2010 ... -
spring实现文件上传
2010-04-24 15:15 1616Spring由内置的multipart支持web应用中的文件上 ... -
ibatis+spring控制事务配置
2009-04-05 10:25 1923<bean id="dataSource&qu ... -
转:spring事务控制配置实例
2009-04-03 10:47 3357Spring声明式事务配置的几种方法 在Spring中进 ... -
spring+ibatis+struts事务控制配置
2009-04-03 10:38 1558<?xml version="1.0" ... -
spring+ibatis+struts配置问题
2009-04-01 14:48 1125以下web.xml配置 <?xml version=&q ...
相关推荐
`InternalResourceViewResolver`是Spring MVC提供的一种内置的视图解析器,主要用于处理JSP视图。当我们不对其进行任何额外配置时,它会遵循一定的默认行为。 默认情况下,`InternalResourceViewResolver`会将控制...
Spring MVC提供了多种内置的视图解析器,如InternalResourceViewResolver和BeanNameViewResolver等。以最常见的InternalResourceViewResolver为例,我们在配置文件中设置其prefix和suffix属性,分别表示视图路径的...
在Spring框架中,视图解析器是用于将处理后的模型数据转换为用户可查看的页面的关键组件。Freemarker是一个强大的、轻量级的模板引擎,常被用作Spring MVC中的视图技术。本篇文章将深入探讨如何在Spring中配置...
常见的视图解析器有InternalResourceViewResolver和BeanNameViewResolver等。 六、注解驱动开发 Spring 5.0.9中,注解驱动开发已经非常成熟,@RequestMapping、@GetMapping、@PostMapping等注解用于映射URL请求,@...
默认情况下,Spring MVC使用InternalResourceViewResolver作为视图解析器,它将视图名解析为JSP页面。例如,配置视图解析器: ```java <bean id="viewResolver" class="org.springframework.web.servlet.view....
视图解析器(ViewResolver)如InternalResourceViewResolver,负责根据逻辑视图名(即Controller返回的字符串)查找对应的物理视图,如JSP、Freemarker或Thymeleaf模板。通过配置,我们可以指定视图解析器的前缀和...
视图解析器是Spring MVC中用于确定视图名对应的实际资源路径的组件。例如,InternalResourceViewResolver可以将视图名转换为JSP页面的URL。 依赖注入(Dependency Injection, DI)是Spring框架的核心特性之一。在...
Spring MVC提供了多种视图解析器,例如`InternalResourceViewResolver`和`BeanNameViewResolver`。 - **InternalResourceViewResolver**:最常用的视图解析器,可以配置前缀和后缀,例如,如果逻辑视图名为"user...
实例中可能包含一个或多个配置文件,如`spring-servlet.xml`,用于配置Spring MVC的组件,如视图解析器、拦截器、数据源、以及控制器的bean定义。 4. **HelloWorldController**: 这个名称暗示了项目中的核心控制...
- **视图解析器**:配置视图解析器,例如 `<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">`。 #### 七、Spring MVC 如何访问静态文件 在 Spring MVC 中,...
5. 配置视图解析:在 Spring 配置文件中配置 ViewResolver,如 `InternalResourceViewResolver` 或 `BeanNameViewResolver`。 6. 测试:通过浏览器或测试工具发送请求,查看应用的响应。 以上就是 Spring MVC 的...
- 配置视图解析器,如使用 `InternalResourceViewResolver`,设置前缀和后缀,以便找到对应的 JSP 页面。 - 编写 JSP 视图,展示返回的数据。 - 编写测试用例,使用 `MockMvc` 进行控制器的测试,验证返回的视图...
配置文件 springmvc-config.xml 是 Spring MVC 应用的核心,它包含了处理器映射器和视图解析器的配置。通过 `<context:component-scan>` 元素扫描指定包,使 Spring 容器自动加载控制器。而视图解析器如 ...
4. **视图解析器**:如InternalResourceViewResolver,自动根据逻辑视图名解析实际视图资源。 5. **数据绑定和验证**:支持自动将HTTP请求参数绑定到Java对象,并进行数据验证。 6. **异常处理**:通过@...
这个"spring MVC简单示例"是为了帮助初学者理解Spring MVC的基本工作原理和配置,通过实践这个例子,你可以了解到如何创建一个简单的Controller、配置视图解析器并建立一个基本的请求处理流程。随着对Spring MVC的...
2. **配置Spring MVC**:在`web.xml`中配置`DispatcherServlet`,并添加Spring MVC的配置文件,如`spring-mvc.xml`,在这里定义视图解析器、拦截器、bean等。 3. **编写Controller**:创建一个控制器类,使用`@...
8. **配置文件**:理解Spring MVC的配置文件,如`servlet-context.xml`,它定义了Spring MVC的组件,如视图解析器、HandlerMapping和HandlerAdapter等。 9. **Maven或者Gradle构建**:项目可能使用Maven或Gradle...
视图解析器如InternalResourceViewResolver负责根据ModelAndView对象中的视图名找到对应的视图。JSP、FreeMarker、Thymeleaf等都可以作为视图技术,Spring MVC支持多种视图技术的集成。 5. **模型数据:Model和...
2. **视图解析**:理解如何配置视图解析器,例如使用InternalResourceViewResolver解析JSP页面。 3. **拦截器(Interceptor)**:学习如何实现自定义拦截器,以实现日志记录、权限检查等功能。 4. **异常处理**:...