当前位置: 首页 > news >正文

创建SpringWeb项目(Spring2.0)

前言

开发工具:Eclipse, JDK:1.8

引入JAR包:

spring-aop-4.3.6.RELEASE.jarcommons-logging-1.2.jar
spring-beans-4.3.6.RELEASE.jardruid-1.2.9.jar
spring-context-4.3.6.RELEASE.jarlombok-1.18.42.jar
spring-core-4.3.6.RELEASE.jarmybatis-3.5.11.jar
spring-expression-4.3.6.RELEASE.jarmybatis-spring-1.3.1.jar
spring-jdbc-4.3.6.RELEASE.jarmysql-connector-j-8.0.32.jar
spring-tx-4.3.6.RELEASE.jar
spring-web-4.3.6.RELEASE.jar
spring-webmvc-4.3.6.RELEASE.jar

1 创建项目

Eclipse > File > new > web > Dynamic Web Project > 项目名

1.1 配置web.xml

WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/springmvc-servlet.xml</param-value> <!-- <param-value>classPath:springmvc-config.xml</param-value> --> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- <url-pattern>*.do</url-pattern> --> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>

1.2 配置springmvc-servlet.xml

WEB-INF/springmvc-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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"> </beans>

1.3 配置applicationContext.xml

WEB-INF/applicationContext.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:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd"> </beans>

2 过滤器

WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> ... <filter> <filter-name>encodingFilter</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>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>

3 拦截器

WEB-INF/springmvc-servlet.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" ...> <mvc:interceptors> <!-- 方式一:直接配置一个 Bean 类型的拦截器(拦截所有请求) --> <bean class="com.example.interceptor.PermissionInterceptor"/> <!-- 方式二:配置多个拦截器,并指定拦截路径 --> <mvc:interceptor> <!-- 需要拦截的路径 --> <mvc:mapping path="/**"/> <!-- 需要排除的路径(不拦截) --> <mvc:exclude-mapping path="/"/> <mvc:exclude-mapping path="/login"/> <!-- 拦截器类 --> <bean class="com.example.interceptor.LoginInterceptor"/> </mvc:interceptor> <!-- 方式三:配置带参数的拦截器 --> <mvc:interceptor> <mvc:mapping path="/api/**"/> <bean class="com.example.interceptor.ApiInterceptor"> <property name="allowedIp" value="127.0.0.1"/> </bean> </mvc:interceptor> </mvc:interceptors> </beans>

创建类PermissionInterceptor

package com.example.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class PermissionInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { response.getWriter().write("PermissionInterceptor Run"); return true; } }

创建类LoginInterceptor

package com.example.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle执行了"); request.setAttribute("startTime", System.currentTimeMillis()); Object user = request.getSession().getAttribute("user"); if (user == null) { response.sendRedirect(request.getContextPath() + "/"); return false; // 终止 } return true; // 继续 } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle执行了"); if (modelAndView != null) { modelAndView.addObject("globalMsg", "请求成功"); } } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion执行了"); long startTime = (Long) request.getAttribute("startTime"); long endTime = System.currentTimeMillis(); System.out.println("运行时间" + (endTime - startTime) + "ms"); } }

创建类ApiInterceptor

package com.example.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class ApiInterceptor implements HandlerInterceptor { private String allowedIp; public void setAllowedIp(String allowedIp) { this.allowedIp = allowedIp; } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String clientIp = request.getRemoteAddr(); if (!allowedIp.equals(clientIp)) { response.setStatus(400); response.getWriter().write("无法访问"); return false; } return true; } @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { } @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { } }

4 控制器

WEB-INF/springmvc-servlet.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" ...> <bean name="/" class="com.example.controller.IndexController" /> <bean name="/login" class="com.example.controller.LoginController" /> <bean name="/logout" class="com.example.controller.LogoutController" /> </beans>

创建类LoginController

package com.example.controller; 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 LoginController implements Controller{ @Override public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res) throws Exception { ModelAndView v = new ModelAndView(); if (username == null || username.isEmpty()) { v.setViewName("/WEB-INF/jsp/Login.jsp"); } else { v.addObject("msg", "登录成功"); v.setViewName("/WEB-INF/jsp/Home.jsp"); } return v; } }

创建类IndexController

package com.example.controller; 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 IndexController implements Controller{ @Override public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res) throws Exception { ModelAndView v = new ModelAndView(); v.addObject("msg", "请登录"); v.setViewName("/WEB-INF/jsp/Login.jsp"); return v; } }

创建类LogoutController

package com.example.controller; 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 LogoutController implements Controller{ @Override public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res) throws Exception { req.getSession().invalidate(); ModelAndView v = new ModelAndView(); v.addObject("msg", "登出成功"); v.setViewName("/WEB-INF/jsp/Login.jsp"); return v; } }

创建登录页面Login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <%= request.getAttribute("msg") %> <br/> 登录页面<br/> <form name="form1" action="/login" method="post"> <input type="text" name="user" /> <input type="password" name="password" /> <button>登录</button> </form> </body> </html>

创建首页Home.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> ${msg} <br/> <form action="/logout" method="post"> <button>logout</button> </form> </body> </html>

5 数据访问

创建表: create table user(username varchar(20) primary key, password varchar(20) not null);

登录数据:insert user values('zhangsan', '123456');

5.1 Mybatis配置文件

src/mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <mappers> <!-- 必须使用类路径格式 --> <mapper resource="com/example/mapper/LoginMapper.xml"/> </mappers> </configuration>

5.2 配置业务代码

(1) 创建Model(src/com/example/pojo/User.java)

package com.example.pojo; import lombok.Data; @Data public class User { private String username; private String password; }

(2) 创建Dao(src/com/example/mapper/LoginMapper.java)

package com.example.mapper; import java.util.List; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import com.example.pojo.User; @Mapper public interface LoginMapper { public User selectUserById(@Param("username") String username); public List<User> selectAllUsers(); public int insertUser(User user); public int updateUser(User user); public int deleteUser(@Param("username") String username); }

(3) 创建Mapper.xml(src/com/example/mapper/LoginMapper.xml)

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.mapper.LoginMapper"> <!-- 查询用户ById --> <select id="selectUserById" parameterType="String" resultType="com.example.pojo.User"> SELECT username, password FROM user WHERE username = #{username} </select> <!-- 查询所有用户 --> <select id="selectAllUsers" resultType="list"> SELECT username, password FROM user ORDER BY username ASC </select> <!-- 插入新用户 --> <insert id="insertUser" parameterType="com.example.pojo.User" > INSERT INTO user (username, password) VALUES (#{username}, #{password}) </insert> <!-- 更新用户信息 --> <update id="updateUser" parameterType="com.example.pojo.User"> UPDATE user SET username = #{username}, password = #{password} WHERE username = #{username} </update> <!-- 删除用户 --> <delete id="deleteUser" parameterType="long"> DELETE FROM user WHERE username = #{username} </delete> </mapper>

(4) 创建Service(src/com/example/service/LoginService)

package com.example.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.example.mapper.LoginMapper; import com.example.pojo.User; @Service @Transactional public class LoginService { @Autowired private LoginMapper dao; public User getUser(String username) { return dao.selectUserById(username); } }

5.3 配置applicationContext.xml

(1) 创建数据库连接信息(src/jdbc.properties)

jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/spring2 jdbc.username=root jdbc.password=root

(2) 配置数据源(WEB-INF/applicationContext.xml)

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" ...> <context:property-placeholder location="classpath:jdbc.properties"/> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> </beans>

(3) 配置事务控制(WEB-INF/applicationContext.xml)

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" ...> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> </beans>

(4) 配置注解驱动(WEB-INF/applicationContext.xml)

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" ...> <tx:annotation-driven transaction-manager="transactionManager" /> </beans>

5.4 整合mybatis

WEB-INF/applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" ...> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="configLocation" value="classpath:mybatis-config.xml"/> </bean> <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.example.mapper"/> </bean> </beans>

5.5 扫描Bean

WEB-INF/applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" ...> <context:component-scan base-package="com.example.service" /> </beans>

5.6 访问数据

LoginController

package com.example.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.context.support.FileSystemXmlApplicationContext; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; import com.example.pojo.User; import com.example.service.LoginService; public class LoginController implements Controller{ @Override public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res) throws Exception { String username = req.getParameter("user"); ModelAndView v = new ModelAndView(); if (username == null || username.isEmpty()) { v.addObject("msg", "登录失败"); v.setViewName("/WEB-INF/jsp/Login.jsp"); return v; } String webRoot = req.getServletContext().getRealPath("/"); // 获取 Web 根目录 FileSystemXmlApplicationContext ctx = new FileSystemXmlApplicationContext(webRoot + "WEB-INF/applicationContext.xml"); LoginService service = (LoginService)ctx.getBean("loginService"); ctx.close(); User user =service.getUser(username); if (user == null) { v.addObject("msg", "不存在用户"); v.setViewName("/WEB-INF/jsp/Login.jsp"); } else { req.getSession().setAttribute("user", username); v.addObject("msg", "登录成功"); v.setViewName("/WEB-INF/jsp/Home.jsp"); } return v; } }

6 效果演示

(1) 首页访问

(2) 未输入用户名登录

(3) 输入错误用户名登录

(4) 输入正确用户名登录

(5) 退出登录

(6) 未登录访问(自动退出)

http://www.jsqmd.com/news/639073/

相关文章:

  • 漫谈上海比较好的美国移民公司,价格与专业度的考量 - 工业品牌热点
  • linux下语言设置
  • CAN知识大全——带你读懂CAN数据手册
  • MobileNetSSD_deploy.caffemodel下载地址
  • LightOnOCR-2-1B快速上手:使用LightOnOCR-2-1B构建微信小程序OCR接口
  • ChatGPT 深度实测:到底有没有?功能全不全?版本新不新?
  • AI智能体视觉检测系统(TVA)工作原理系列(十二)
  • 瑞祥商联卡回收全攻略,高效又安全! - 团团收购物卡回收
  • 别再盲目找!适合你的CRM系统,从这几个选项开始选 - 毛毛鱼的夏天
  • 软件工程师如何5年内薪资翻倍?真实案例揭秘
  • 黑丝空姐-造相Z-Turbo项目文档自动化:用LaTeX排版生成报告与论文
  • 如何在Windows上免费创建10个虚拟显示器:终极解决方案指南
  • 2026年靠谱的婚姻律师推荐,宁波处理非婚生子女抚养纠纷律师哪家好 - 工业品网
  • 【Hyper-V】Windows11家庭版如何解锁并启用Hyper-V功能
  • 长芯微LPA8421完全P2P替代AD8421,是一款低成本、低功耗、极低噪声、超低偏置电流、高速仪表放大器
  • 知网AIGC标红怎么救?10款免费降AI工具实测指南
  • Next.js从入门到实战保姆级教程:错误处理与加载状态
  • 科研数据处理:结合MATLAB信号分析与Qwen3-ASR-0.6B语音识别
  • 从依赖“人治”到 “法治”:一套让流程自己跑起来的绩效驱动模型
  • 期刊 | 《电讯技术》详解
  • 免费论文消AI痕迹+降重:6款实用工具亲测推荐
  • 从理论到芯片:手把手解析冗余数系统(Redundant Number System)在AI加速器中的应用
  • 终极Python自动化购票解决方案:告别手动抢票的完整操作指南
  • 2026年靠谱的门窗品牌推荐,聊聊珠海皇派门窗规模扩张速度与耐用性 - 工业设备
  • 基于Phi-3-mini-4k-instruct-gguf的MySQL智能运维:安装配置与性能调优问答
  • 歌词滚动姬:免费开源LRC歌词制作工具完整指南
  • 基于cnn卷积神经网络的yolov5+deepsort目标检测+目标跟踪(教程+代码)
  • Kate文本编辑器
  • Claude Code全解析:去哪找、怎么用、如何快速获取
  • AI在医疗测试中的应用:伦理红线