在Web项目中使用Spring框架,实际上是在Web层获取Spring容器,便可从容器中获取到Service对象。为了简便起见,基于上个项目来构建我们的Web项目:
1、创建Web项目
- 选择Web Application项目:
- 在 WEB-INF 目录下,创建 classes(用于存放编译的字节码文件) 和 lib(用于存放引用的jar包) 两个目录:
- 将项目输出路径改为之前创建的 classes 路径:
- 添加项目依赖路径:
- 配置打包方式Artifacts:勾选“Build on make”,表示编译的时候就打包部署;勾选“Show content of elements”,表示显示详细的内容列表;
- 新建Tomcat Server:
- 配置Tomcat Server:
取消勾选“After launch”,表示取消自动打开浏览器。
添加部署到Tomcat的项目,设置url路径:
- 修改index.jsp文件:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>hello world</title>
</head>
<body>
hello world
</body>
</html>
- 打开浏览器,测试网页是否正确运行(注意url路径需与上面设的一致):
2、导入jar包、源代码
- 导入上个项目((七)Spring集成MyBatis)的jar包、源码
- 需要额外导入Tomcat目录下的 servlet-api.jar 包,spring的 spring-web-5.1.9.RELEASE.jar,以及jsp中会用到的 jstl.jar 、standard.jar:
3、编写Web项目代码
- 目录结构
- index.jsp,作为添加Student表数据的初始网页:
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"%>
<html>
<head>
<title>index</title>
</head>
<body>
<div align="center">
<form action="register" method="post">
姓名:<input name="name" type="text"/><br/>
年龄:<input name="age" type="text"><br/>
<input type="submit" value="提交" />
</form>
</div>
</body>
</html>
- result.jsp,作为展示Student表数据的网页:
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>result</title>
</head>
<body>
<br/>
<table align="center" border="1" cellpadding="5" cellspacing="0" style="text-align: center">
<caption style="font-size: x-large"><strong>Student表数据</strong></caption>
<tr><td>姓名</td><td>年龄</td></tr>
<c:forEach var="students" items="${students}">
<tr>
<td>${students.name}</td><td>${students.age}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
- RegisterServlet.java,在Servlet获取spring容器对象(WebApplicationContext 继承于ApplicationContext类),处理表数据:
public class RegisterServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
String strName = req.getParameter("name");
String age = req.getParameter("age");
// 使用框架提供的方法,获取容器对象
WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
StudentService service = (StudentService)ctx.getBean("studentService");
Student student = new Student();student.setName(strName);student.setAge(Integer.parseInt(age));
service.addStudent(student);
List<Student> students = service.queryStudent();
req.setAttribute("students", students);
// 跳转到结果页面
req.getRequestDispatcher("/result.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
- 在WEB-INF目录下的web.xml,配置Servlet、注册监听器:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>RegisterServlet</servlet-name>
<servlet-class>com.lyj.servlet.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegisterServlet</servlet-name>
<url-pattern>/register</url-pattern>
</servlet-mapping>
<!--
注册监听器:会先创建spring的容器对象,再把容器对象放入到ServletContext,供Servlet调用。
监视器启动时,默认会到WEB-INF路径下找applicationContext.xml配置文件。
-->
<!-- 也可以指定配置文件路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:com/lyj/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
- 运行测试:
- 结果页面: