SSM-Project 贴吧项目整合

SSM-IM-Project项目整合

一:贴吧项目需求分析

在这里插入图片描述

二:贴吧项目搭建

1、web框架搭建

2、jar包支持+依赖

3、tomcat配置+依赖

4、包的分层

resources包

——mapper【dao接口实现类,进行控制器数据库】

——spring

src包

——po包【实体类】

——dao包【用户数据接口】

——service包【用户服务层】

——web包【controller,控制器】

——vo包【多表联查的包】

——tools包【工具】

test包

——dao包【用来测试dao】

——service【用来测试service】

5、web.xml配置
在这里插入图片描述

三、贴吧项目实现–3大步骤

第一步

po包写实体类 -->dao包写接口类 {对应.xml 文件配置,相当于实现类,进行调用数据库连接} -->test测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1.1 实体类po包 User类
package com.sunsky.po;

/**
 * @className: ${大数据学习}.
 * @description: 用户类
 * @Theme:
 * @author:xgh
 * @create-day: 2024-02-20 16:27
 */
public class User {
    private int uid;
    private String uuid;

    private String name;

    private String tel;

    private String pass;

    /**
     * 角色编号(外键)
     */
    private int rid;

    public User() {
    }

    public User(int uid, String uuid, String name, String tel, int rid,String pass) {
        this.uid = uid;
        this.uuid = uuid;
        this.name = name;
        this.tel = tel;
        this.pass = pass;
        this.rid = rid;
    }

    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", uuid='" + uuid + '\'' +
                ", name='" + name + '\'' +
                ", tel='" + tel + '\'' +
                ", pass='" + pass + '\'' +
                ", rid=" + rid +
                '}';
    }

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public String getUuid() {
        return uuid;
    }

    public void setUuid(String uuid) {
        this.uuid = uuid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    public int getRid() {
        return rid;
    }

    public void setRid(int rid) {
        this.rid = rid;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }
}

3.2.1 dao包中user的接口

在接口中进行定义方法接口【实现业务功能】(增删改查)

package com.sunsky.dao;

import com.sunsky.po.User;
import com.sunsky.vo.UserVO;

import java.util.List;

/**
 * @className: ${大数据学习}.
 * @description: 用户数据访问接口
 * 业务需求:注册
 * 根据编号密码 查询对象
 * 根据uuid  查找用户对象
 * 查询所有用户  集合方式
 * 根据用户id删除用户
 * @Theme:
 * @author:xgh
 * @create-day: 2024-02-21 9:06
 */
public interface UserDao {

    /**
     * 注册
     * @param user
     */
    public void saveUser(User user);


    /**根据编号密码 查询对象
     * @param user
     * @return
     */
    public UserVO findByPassAndId(User user);

    /**
     * 通过uuid查询用户
     * @param uid
     * @return
     */
    public User findById(int uid);

    /**
     * 根据用户编号密码,进行查询用户
     * @param uid
     * @param pass
     * @return
     */
    public User findByPassAndId(int uid,String pass);


    /**
     * 查询所有用户
     * @param user
     * @return
     */
    public List<UserVO> findAll(User user);


    /**
     * 删除
     *
     * @param uid
     * @return
     */
    public boolean deleteUser(int uid);


    /**
     * 查询用户--在service中调用
     * @return
     */
    public List<UserVO> findAll();
}

3.3.1 相关配置文件

mybatis-config.xml

可以扫描com.sunsky下的所有包,告诉MyBatis在该包(com.sunsky)及其子包中查找并定义类型别名。MyBatis会自动扫描这个包下的类,并为它们创建别名。

例如,如果包里有User类,那么可以不使用完整的类名com.sunsky.User,而可以使用别名User在映射文件中引用。

<?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>
    <!--定义类型别名的-->
    <typeAliases>
        <!--com.im包下的所有类定义类型别名-->
        <package name="com.sunsky"/>
    </typeAliases>
</configuration>

log4j.xml 进行打印日志使用

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd">
<log4j:configuration>
    <!--输出到控制台-->
    <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
        <param name="Threshold" value="DEBUG"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
        </layout>
    </appender>

    <!--输出到文件(info)-->
    <!--将生成“info.log.2014-06-11”这样的日志文件-->
    <appender name="fileAppenderInfo" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="${user.home}/logs/website/info.log" />
        <param name="DatePattern" value=".yyyy-MM-dd" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="INFO" />
            <param name="LevelMax" value="INFO" />
        </filter>
    </appender>

    <!--输出到文件(warn)-->
    <appender name="fileAppenderWarn" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="${user.home}/logs/website/warn.log" />
        <param name="DatePattern" value=".yyyy-MM-dd" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
        </layout>

        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="WARN" />
            <param name="LevelMax" value="WARN" />
        </filter>
    </appender>

    <!--输出到文件(error)-->
    <appender name="fileAppenderError" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="${user.home}/logs/website/error.log" />
        <param name="DatePattern" value=".yyyy-MM-dd" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="ERROR" />
            <param name="LevelMax" value="ERROR" />
        </filter>
    </appender>

    <!--屏蔽所有org.springframework.*输出的Debug(及以下)信息-->
    <logger name="org.springframework">
        <level value="INFO"></level>
    </logger>

    <root>
        <level value="ALL"/>
        <appender-ref ref="consoleAppender" />
        <appender-ref ref="fileAppenderInfo" />
        <appender-ref ref="fileAppenderWarn" />
        <appender-ref ref="fileAppenderError" />
    </root>
</log4j:configuration>

database.properties 进行数据库连接的文件配置

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/imdb2?useUnicode=true&characterEncoding=utf-8
user=root
password=123456
minIdle=45
maxIdle=50
initialSize=5
maxActive=100
maxWait=100

spring-dao.xml

Spring框架的配置文件,用于整合MyBatis持久层框架,并定义了数据库连接池以及与MyBatis相关的其他配置

<?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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context.xsd">

    <!--配置整合mybatis过程-->
    <!--1、配置数据库相关参数properties的属性:${url}-->
    <context:property-placeholder location="classpath:database.properties"></context:property-placeholder>

    <!--2、数据库连接池-->
    <!--JNDI获取数据源(使用dbcp连接池)-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
            destroy-method="close" scope="singleton">
        <property name="driverClassName" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${user}"/>
        <property name="password" value="${password}"/>
        <property name="initialSize" value="${initialSize}"/>
        <property name="maxActive" value="${maxActive}"/>
        <property name="maxWait" value="${maxWait}"/>
        <property name="minIdle" value="${minIdle}"/>
    </bean>

    <!--3、配置SqlSessionFactory对象-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
       <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>

    <!--4、配置扫描Dao接口包,动态实现Dao接口,注入到Spring容器中-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.sunsky.dao"/>
    </bean>

</beans>

test包–>进行测试方法实现过程

package com.sunsky.dao;

import com.sunsky.po.User;
import com.sunsky.vo.UserVO;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.ArrayList;
import java.util.List;

/**
 * @className: ${大数据学习}.
 * @description: 用户数据访问测试类
 * @Theme:
 * @author:xgh
 * @create-day: 2024-02-20 19:04
 */
public class UserDaoTest {

    UserDao userDao = null;

    @Before
    public void common(){
        // 1、创建配置寄文件对象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring/spring-dao.xml");
        System.out.println(context);
        // 2、得到用户数据访问的对象
        userDao  = context.getBean(UserDao.class);
    }

    @Test
    public void saveUser(){
        userDao.saveUser(new User(10002,"fbfe4811-ccdc-40ef-9310-05768eeaa623","李云龙","12345",1,"10034"));
        System.out.println(userDao.findAll());
    }

    @Test
    public void findByPassAndId(){
        User user = new User();
        user.setUid(10008);
        user.setPass("1111111");
        UserVO userVO  = userDao.findByPassAndId(user);
    }

    @Test
    public void findAll(){
        List<UserVO> list = userDao.findAll(new User());
        System.out.println(list);
    }

    @Test
    public void findById(){
        User user = userDao.findById(10042);
        System.out.println(user);
        System.out.println("用户名字 "+user.getName()+" 用户密码"+user.getPass());
    }

    @Test
    public void deleteUser(){
        System.out.println(userDao.findById(10042));
        userDao.deleteUser(10042);

        System.out.println(userDao.findAll(new User()));
        userDao.deleteUser(10034);
        System.out.println(userDao);
    }


}

第二步

service包 -->imp的实现类(通过注解,进行装配dao对象,进行调用方法)–>test测试

在这里插入图片描述
在这里插入图片描述

3.2.1 service包写接口与实现类

service包–UserService接口,进行定义不同的业务需求 接口规范

package com.sunsky.service;

import com.sunsky.po.User;
import com.sunsky.vo.UserVO;

import java.util.List;

/**
 * @className: ${大数据学习}.
 * @description: 用户业务逻辑
 * @Theme:
 * @author:xgh
 * @create-day: 2024-02-22 9:29
 */
public interface UserService {

    /**
     * 注册
     * @param user  用户对象
     * @return
     */
    public int saveUser(User user);


    /**
     * 根据密码和id查询用户
     * @param user
     * @return
     */
    public UserVO findByPassAndId(User user);


    /**查询所有用户
     * @return 用户列表
     */
    public List<UserVO> findAll();


    /**
     * 根据id 删除用户
     * @param id
     * @return true/false
     */
    public boolean delete(int id);
}

3.2.2 impl包中–>实现类UserServiceImpl

进行注解自动装配userDao对象,进行调用其方法

package com.sunsky.service.impl;

import com.sunsky.dao.UserDao;
import com.sunsky.po.User;
import com.sunsky.service.UserService;
import com.sunsky.tools.MD5Util;
import com.sunsky.vo.UserVO;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.UUID;

/**
 * @className: ${大数据学习}.
 * @description: 用户业务逻辑 实现类
 * @Theme:
 * @author:xgh
 * @create-day: 2024-02-22 9:33
 */
@Service
public class UserServiceImpl implements UserService {

   Logger logger = Logger.getLogger(UserServiceImpl.class);

    @Autowired
    UserDao userDao;
    @Override
    public int saveUser(User user) {
        // 创建用户的UUID
        user.setUuid(UUID.randomUUID().toString());
        // 使用MD5加密
         String pass = MD5Util.md5(user.getPass());
         // 保存用户
        userDao.saveUser(user);
        logger.info(user.getUuid());
        return user.getUid();
    }

    @Override
    public UserVO findByPassAndId(User user) {
        return userDao.findByPassAndId(user);
    }

    @Override
    public List<UserVO> findAll() {
        return userDao.findAll();
    }

    @Override
    public boolean delete(int id) {
        return userDao.deleteUser(id);
    }


}

3.3.3 相关配置文件

spring-service.xml

Spring框架配置文件,用于定义Bean、配置组件扫描、设置事务管理器,并启用基于注解的声明式事务

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

    <import resource="spring-dao.xml"></import>

    <context:component-scan base-package="com.sunsky.service"/>

    <!--配置事务管理器-->
    <bean id="transactionManger"
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

   <!-- 配置基于注解的声明式事务-->
    <tx:annotation-driven transaction-manager="transactionManger"></tx:annotation-driven>
</beans>

第三步

web包 【控制器】–>进行web文件配置–>写对应功能的控制器–>跳转到对应的jsp -->页面显示
在这里插入图片描述
在这里插入图片描述

3.3.1 web包下写UserController控制器

实现用户注册、登录、退出功能。【验证码的方法 封装】;自动装配UserService对象,进行调用其方法

package com.sunsky.web;

import com.sunsky.po.Role;
import com.sunsky.po.User;
import com.sunsky.service.RoleService;
import com.sunsky.service.UserService;
import com.sunsky.vo.UserVO;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * @className: ${大数据学习}.
 * @description: 用户控制器
 * @Theme:
 * @author:xgh
 * @create-day: 2024-02-25 22:16
 */
@Controller
public class UserController {

    Logger logger = Logger.getLogger(UserController.class);

    @Autowired
    UserService userService;

    @Autowired
    RoleService roleService;

    @RequestMapping("/tologin")
    public String toLogin(){
        logger.info("进入 到去登录 控制器");
        return "login";
    }


    @RequestMapping("/login")
    public String login(User user, String captcha, HttpSession session, HttpServletRequest request){
        logger.info("验证码" +captcha);
        //判断用户的验证码是否输入正确
        String captchaSession = session.getAttribute("simpleCaptcha").toString();
        logger.info(captchaSession);
        if (captcha.equals(captchaSession)){
            UserVO currentUser = userService.findByPassAndId(user);
            if (currentUser != null){
                logger.info("登陆成功");
                // 登录成功,记录当前登录的人进入到Session中
                session.setAttribute("currentUser",currentUser);
                return "redirect:/main.action";
            }else {
                logger.info("登陆密码错误");
                // 登录失败,跳转到登录界面 继续登录
                request.setAttribute("mess","用户名或密码错误");
                return "login";
            }
        }else {
            logger.info("验证码错误");
            request.setAttribute("mess","验证码输入错误");
            return "login";
        }
    }

    @RequestMapping("/exit")
    public String exit(HttpSession session){
        logger.info("进入 用户退出 控制器");
        session.invalidate(); // 销毁Seesion
        return "redirect:index.action"; // 跳转 到首页
    }

    @RequestMapping("/manager/userlist")
    public String userList(Model model){
        logger.info("进入用户列表 控制器");
        List<UserVO> list = userService.findAll();
        logger.debug(list);
        logger.debug(list.size());
        model.addAttribute("list",list);
        return "userlist";
    }

    @RequestMapping("/manager/toadduer")
    public String toAddUser(Model model){
        logger.info("进入 去添加用户 控制器");
        // 创建一个角色集合,放入到作用域中
        List<Role> list = roleService.findAll();
        logger.info(list);
        model.addAttribute("list",list);
        return "adduser"; // 进入到准备添加用户的页面地址
    }

    @RequestMapping("/manager/adduser")
    public String addUser(User user){
        logger.info(user);
        int uid = userService.saveUser(user);
        logger.debug(uid);
        return "redirect:userlist.action";

    }
    
    @RequestMapping("/toregist")
    public String toRegist(){
        logger.info("进入准备注册用户的控制器");
        return "regist";
    }

    @RequestMapping("/regist")
    public String addUser(User user,Model model){
        logger.info("进入注册用户的控制器");
        int uid = userService.saveUser(user);
        logger.info(uid);
        model.addAttribute("uid",uid);
        return "login"; // 注册成功后,进入到登录界面
    }

}

3.3.2 在web包下的jsp包中,写对应的控制器跳转的页面jsp

使用了Bootstrap框架来设计布局和样式,JSTL标签库来进行数据处理,并使用了Spring的一些注解来管理事务。这个页面的主要目的是展示贴吧的帖子列表,并提供用户交互的导航链接。

index.jsp 首页

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>


<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path;
	request.setAttribute("basePath", basePath);
%>

<!DOCTYPE html>
<html lang="zh">

	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
		<title>贴吧项目</title>
		<link rel="icon" href="favicon.ico" type="image/ico">
		<link href="${basePath}/statics/css/bootstrap.min.css" rel="stylesheet">
		<link href="${basePath}/statics/css/fonts.css" rel="stylesheet">
		<link href="${basePath}/statics/css/style.css" rel="stylesheet">
		<link href="${basePath}/statics/css/index.css" rel="stylesheet">
	</head>

	<body>

		<!--导航栏盒子-->
		<div class="d1">
			<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
				<div class="container-fluid allwidth">
					<div class="navbar-header">
						<a class="navbar-brand" href="#">欢迎来到博客园</a>
					</div>
					<div>
						<ul class="nav navbar-nav">
							<li class="active">
								<a href="/im">网站首页</a>
							</li>
							<li>
								<a href="tologin.action">登录</a>
							</li>
							<li>
								<a href="toregist.action">注册</a>
							</li>
							<c:if test="${currentUser!=null}">
								<li>
									<a href="personblogschemalist.html">我的博客</a>
								</li>

								<li>
									<a href="main.action">后台管理</a>
								</li>
								<li>
									<a href="index.html">退出</a>
								</li>
							</c:if>

							<li>
								<a onclick="window.history.go(-1)" style="cursor: pointer;">返回</a>
							</li>

						</ul>
					</div>
				</div>
			</nav>
		</div>
		<!--第一个banner的内容-->
		<div class="banner1">
			<div class="container">
				<h1>1024贴吧</h1>
				<h2>博客园软件工程师的宝典,让web开发更迅速、简单。</h2>
				<p class="masthead-button-links">
					<a class="btn btn-lg btn-success btn-shadow" href="https://v3.bootcss.com/css/" target="_blank" role="button" onclick="_hmt.push(['_trackEvent', 'masthead', 'click', 'masthead-Bootstrap3中文文档'])">Bootstrap3中文文档(v3.3.7)</a>
				</p>
				<ul class="masthead-links">
					<li>
						<a href="https://v3.bootcss.com/css/" target="_blank" role="button" onclick="_hmt.push(['_trackEvent', 'masthead', 'click', 'masthead-Bootstrap2中文文档'])">Bootstrap2中文文档(v2.3.2)</a>
					</li>
				</ul>
			</div>
		</div>

		<!--页面主要内容-->
		<main class="ftdms-layout-content">

			<div class="container-fluid" style="margin: auto; width: 80%;">

				<div class="row" style="margin-top:15px;">
					<div class="col-lg-12">
						<div class="card">
							<div class="card-header">
								<h4>表格</h4></div>
							<div class="card-body">

								<h5>帖子列表 <code>.table-striped</code></h5>
								<table class="table table-striped">
									<thead>
										<tr>
											<th style="width: 5%">编号</th>
											<th style="width: 20%">标题</th>
											<th>概要</th>
											<th style="width: 8%">作者</th>
											<th style="width: 15%">日期</th>
										</tr>
									</thead>
									<tbody>
										<c:forEach items="${list}" var="invitation">
											<tr>
												<th scope="row"><a href="invitationinfo.action?id=${invitation.id}" target="_blank">${invitation.id}</a></th>
												<td><a href="invitationinfo.action?id=${invitation.id}" target="_blank">${invitation.title}</a></td>
												<td>
													<a href="invitationinfo.action?id=${invitation.id}">${invitation.summary}</a>
												</td>
												<td><a href="userinvitationlist.action?uid=${invitation.uid}">${invitation.name}</a></td>
												<td><fmt:formatDate value="${invitation.createdate}" type="both"></fmt:formatDate></td>
											</tr>
										</c:forEach>
									</tbody>
								</table>

							</div>
						</div>
					</div>
				</div>
			</div>

			</div>

		</main>
		<!--End 页面主要内容-->

	</body>

</html>
<?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_4_0.xsd"
         version="4.0">

    <!--Spring的字符集过滤器实现-->
    <filter>
        <filter-name>encoding</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>
    </filter>

    <filter-mapping>
        <filter-name>encoding</filter-name>
        <!--代表过滤所有的请求-->
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/spring-*.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>
    
    <welcome-file-list>
        <welcome-file>/index.action</welcome-file>
    </welcome-file-list>

</web-app>
3.3.3 相关配置

web.xml

这个文件是为了确保Web应用能够正确地启动和运行Spring MVC框架,以及如何处理请求和响应的字符编码问题。通过配置过滤器和Servlet,它还负责处理Web应用的安全和请求映射

<?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_4_0.xsd"
         version="4.0">

    <!--Spring的字符集过滤器实现-->
    <filter>
        <filter-name>encoding</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>
    </filter>

    <filter-mapping>
        <filter-name>encoding</filter-name>
        <!--代表过滤所有的请求-->
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/spring-*.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>
    
    <welcome-file-list>
        <welcome-file>/index.action</welcome-file>
    </welcome-file-list>

</web-app>

spring-web.xml

这个XML配置文件是为了定义Spring MVC应用程序中的bean、视图解析器、组件扫描和拦截器,以确保请求能够被正确地映射到控制器上,并在必要时执行一些预处理和后处理逻辑

<?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
	http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context.xsd
	http://www.springframework.org/schema/mvc
	http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

    <mvc:annotation-driven></mvc:annotation-driven>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <context:component-scan base-package="com.sunsky.web"></context:component-scan>

    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/manager/*.action"/>
            <bean class="com.sunsky.interceptor.AuthorInterceptor"></bean>
        </mvc:interceptor>
        <mvc:interceptor>
            <mvc:mapping path="/main.action"/>
            <mvc:mapping path="/toaddinvitation.action"/>
            <mvc:mapping path="/addinvitation.action"/>
            <mvc:mapping path="/deleteinvitation.action"/>
            <bean class="com.sunsky.interceptor.LoginStatedInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

</beans>

四、项目实现图

具体代码实现,可以私聊。
在这里插入图片描述

  • 45
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值