spring-mvc-case

本文详细介绍了SpringMVC框架的两种配置方式:基于注解和基于XML。通过具体的配置示例和代码片段展示了如何实现控制器的扫描、请求的映射以及视图的解析。
spring mvc 是当前java比较流行的一种mvc架构,下文主要展示spring mvc 使用的配置。

web.xml 的统一配置(仅展示和spring 配置相关部分)

<!-- Spring context 服务层的配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:META-INF/spring/*Context.xml,
classpath*:META-INF/spring/*-beans.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- app servlet -->
<servlet>
<servlet-name>AppServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/ServletConfigs/AppServlet/servlet-context.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 覆盖default servlet的/, springmvc servlet将处理原来处理静态资源的映射 -->
<servlet-mapping>
<servlet-name>AppServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>


1、完全基于注解的方案。
servlet-context.xml 配置:


<!-- 自动搜索@Controller标注的类 -->
<context:component-scan base-package="org.login.web" >
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
</context:component-scan>

<!-- 默认的注解映射的支持
<mvc:annotation-driven />

-->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

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



controller 注解

@Controller
@RequestMapping("/login")
public class LoginController {
private final static Logger logger = LoggerFactory.getLogger(LoginController.class);
@RequestMapping("/guest")
public String login(HttpServletRequest request,HttpServletResponse response){
logger.info("hello {}",request);
request.setAttribute("username", "admin");
request.setAttribute("password", "123456");
return "login";
}

}


以上ok
http://localhost:8080/login/guest


2、基于xml的配置
servlet-context.xml 配置:

<bean id = "loginHandleRequest" class="org.login.web.LoginHandleRequest"/>
<bean id = "loginController" class="org.login.web.LoginController"/>
<bean id = "loginServlet" class="org.login.web.LoginServlet"/>


<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/login/guest" value="loginHandleRequest"/>
<entry key="/login/guest2" value="loginController"/>
<entry key="/login/guest3" value="loginServlet"/>
</map>
</property>
</bean>

<bean class = "org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>
<bean class = "org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<bean class = "org.springframework.web.servlet.handler.SimpleServletHandlerAdapter"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>


java代码:

/**
* @author wangxinchun
*/
public class LoginController implements Controller {
private final static Logger logger = LoggerFactory.getLogger(LoginController.class);
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
logger.info("hello {}", request);
request.setAttribute("username", "admin");
request.setAttribute("password", "123456");
return new ModelAndView("login");
}
}



/**
* @author wangxinchun
*/
public class LoginHandleRequest implements HttpRequestHandler {
private final static Logger logger = LoggerFactory.getLogger(LoginHandleRequest.class);

public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
logger.info("hello {}", request);
request.setAttribute("username", "admin");
request.setAttribute("password", "123456");
request.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(request, response);
}
}



/**
* @author wangxinchun
*/
public class LoginServlet extends GenericServlet {
private static final long serialVersionUID = 1L;
private final static Logger logger = LoggerFactory.getLogger(LoginServlet.class);

@Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
logger.info("hello {}", request);
request.setAttribute("username", "admin");
request.setAttribute("password", "123456");
request.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(request, response);
}
}


请求:
http://localhost:8080/login/guest
http://localhost:8080/login/guest2
http://localhost:8080/login/guest3
ok~
### 项目实现概述 在使用 IDEA 和 SQLyog 开发基于上述依赖的项目时,需按照模块化设计原则合理分配功能组件并完成集成。以下是具体说明: #### Maven 依赖配置 在 `pom.xml` 文件中引入所需的依赖项,确保各模块能够正常工作。 ```xml <dependencies> <!-- Spring 相关 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.10</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.3.10</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.10</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.10</version> </dependency> <!-- MyBatis 及其扩展 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.0</version> </dependency> <!-- 数据库相关 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.8</version> </dependency> <!-- JSON 处理 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.13.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.13.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.13.0</version> </dependency> <!-- Servlet API --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> <!-- Tomcat 插件 --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <version>9.0.52</version> <scope>provided</scope> </dependency> </dependencies> ``` 以上代码展示了如何通过 Maven 引入所需依赖[^1]。 --- #### 项目结构规划 根据引用描述,推荐如下目录结构: - **controller**: 存储控制器层逻辑,负责接收请求和返回响应。 - **service**: 提供业务逻辑接口定义及其实现类(如 `-impl`)。 - **dao**: 使用 MyBatis 进行数据库交互的操作映射。 - **entity**: 定义与数据库表对应的实体类。 - **config**: 配置全局参数、数据源、事务管理等内容。 - **exception**: 自定义异常处理机制。 - **util**: 封装通用工具方法。 --- #### 数据源配置 (`application.properties`) 设置数据库连接池及相关参数,便于统一管理和动态调整。 ```properties # Druid 数据源配置 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=password # MyBatis 配置 mybatis.mapper-locations=classpath:mapper/*.xml mybatis.configuration.map-underscore-to-camel-case=true # 分页插件配置 pagehelper.helperDialect=mysql pagehelper.reasonable=true pagehelper.supportMethodsArguments=true ``` 此部分实现了对 MySQL 的访问支持,并启用了分页功能[^1]。 --- #### Web 应用初始化 (`web.xml`) 如果未启用 Java Config,则可通过 XML 方式声明核心组件。 ```xml <!-- 加载 Spring 上下文监听器 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 字符编码过滤器 --> <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> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- DispatcherServlet 映射 --> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> ``` 上述片段完成了基础环境搭建,包括上下文加载、编码转换以及前端控制器绑定[^3]。 --- #### 测试运行流程 利用 SQLyog 创建测试数据库及表格;随后启动 IDEA 中的应用程序入口函数验证整体连通性。 ```java @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 最后部署到嵌套版 Tomcat 或独立服务器上观察效果。 --- 问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值