springboot
异常:No Java compiler available for configuration options compilerClassName: [null] and compiler: [null]
缺乏一个eclipse依赖
org.eclipse.jdt.core.compiler ecj 4.6.1 provided
创建springboot项目:
向pom.xml中添加jar包
<!-- spring-boot web启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
<!-- 配置springboot内置tomcat环境 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.2.2.RELEASE</version>
<scope>provided</scope>
</dependency>
<!-- 热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>2.2.2.RELEASE</version>
<scope>provided</scope>
</dependency>
<!-- 配置spring视图解析器 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>9.0.22</version>
</dependency>
<!-- eclipse依赖 -->
<dependency>
<groupId>org.eclipse.jdt.core.compiler</groupId>
<artifactId>ecj</artifactId>
<version>4.6.1</version>
<scope>provided</scope>
</dependency>
<!-- jdbc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
<!-- 连接数据库 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- 阿里数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!-- 配置springboot集成mybatis环境 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<!-- 文件下载 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
创建Controller
package com.wenhua.spring.project.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.wenhua.spring.project.bean.User;
import com.wenhua.spring.project.service.UserService;
@Controller
@RequestMapping(path="/login")
public class LoginController {
@Autowired
UserService userService;
@ResponseBody
@RequestMapping(path="/tohello")
public String toHello(){
System.out.println("tohello");
return "hello world";
}
@RequestMapping(path="/tosuccess")
public String toSuccess(HttpServletRequest request,HttpSession session){
try {
String account = request.getParameter("account");
String password = request.getParameter("password");
User user = userService.findUserByAcPs(account,password);
if (user != null) {
session.setAttribute("user", user);
return "success";
}else{
return "redirect:/index.jsp";
}
} catch (Exception e) {
// 日志输出
e.printStackTrace();
return "redirect:/index.jsp";
}
}
}
dao层
package com.wenhua.spring.project.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import com.wenhua.spring.project.bean.User;
@Repository
public class UserDao {
@Autowired
JdbcTemplate jdbcTemplate;
public User checkLogin(String account, String password) {
String sql = "select id,account,password,sex "
+ " from t_user where account = ? and password = ?";
User users = jdbcTemplate.queryForObject(sql,new RowMapper<User>() {
// 注意如果查询结果为空,封装映射会弹出异常
@Override
public User mapRow(ResultSet resultSet, int rowNum) throws SQLException {
// 注意此处应该用原型模式,也就是多例模式
User user = new User();
user.setId(resultSet.getInt("id"));
user.setAccount(resultSet.getString("account"));
user.setPassword(resultSet.getString("password"));
user.setSex(resultSet.getString("sex"));
return user;
}
},account,password);
return users;
}
}
service层
package com.wenhua.spring.project.service;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.wenhua.spring.project.bean.User;
import com.wenhua.spring.project.dao.LoginDao;
import com.wenhua.spring.project.dao.UserDao;
@Service
public class UserService {
/*集成jdbc
@Autowired
UserDao userDao;
**
* 登录验证账号
* @param account
* @param password
* @return
*
public User findUserByAcPs(String account, String password) {
User user = userDao.checkLogin(account,password);
return user;
}*/
/*集成mybatis*/
@Autowired
LoginDao loginDao;
public User findUserByAcPs(String account, String password) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("account", account);
map.put("password", password);
User user = loginDao.checkLogin(map);
return user;
}
}
启动类
package com.wenhua.spring.project;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @SpringBootApplication标注是一个主程序类,说明这是一个spring Boot应用
* @author ASUS
*
*/
@SpringBootApplication
public class SpringApp {
public static void main(String[] args) {
// springboot启动起来
SpringApplication.run(SpringApp.class, args);
}
}
springboot项目打包
springboot项目打包
1.创建一个类,使用@SpringBootApplication注解
2.继承SpringBootServletInitializer类
3.重写configure方法,并加载当前类的class
4.将配置文件.yml中的服务器端口号进行注释,或删除 # server.port: 1909
5.在pom.xml配置文件中将热部署和内部的tomcat不进行打包设置<scope>provided</scope>
6.eclipse:右键项目名-->Run As-->Maven Install BUILD SUCCESS
6.idea:①Build-->Build Artifacts-->All Artifacts-->Clean ②Build--> ReBuild Porject ③Build-->Build Artifacts-->All Artifacts-->ReBuild
7.部署成功之后,在target目录下找到项目对应对的.war包
8.将war放置在服务器(tomcat)的webapps文件夹下即可
9.启动服务器(tomcat),记得查看服务器端口号
10.通过http://127.0.0.1:端口号/项目名(建议去复制war包的名称或复制work目录下的文件名)/访问路径
注解@SpringBootApplication
启动类继承extends SpringBootServletInitializer
重写configure方法
package com.wenhua.spring.project;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
* 打包测试启动类
*/
@SpringBootApplication
public class SpringBootServletApp extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringBootServletApp.class);
}
}
去掉配置文件中内部服务器端口server.port: 9999
去掉pom.xml文件中的热部署和内置tomcat
打包Run as —> Maven Install如果打包不成功,进入该文件的目录,选中目录在目录中输入cmd直接进入该目录的命令窗口,输入
mvn clean(清理)
mvn install(打包)
过滤器
- 注解@Configuration或@WebListener
- 实现接口ServletContextListener
package com.wenhua.spring.project.util;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.context.annotation.Configuration;
/**
* 监听Context上下文创建时,添加path属性
* @author ASUS
*
*/
@Configuration
public class ContextPathListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext context = sce.getServletContext();
context.setAttribute("path", context.getContextPath());
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
}
拦截器
- 放行登录页面以及session失效跳转对其他的跳转添加的拦截器
- 实现 HandlerInterceptor
package com.wenhua.spring.project.util;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.wenhua.spring.project.bean.User;
/**
* 请求拦截器
* @author ASUS
*
*/
public class isLoginInterceptor implements HandlerInterceptor {
/**
* 预处理
* 在Controller未处理之前拦截请求
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// 获得session并取得user对象
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
if(user == null){
// 注意这里使用的是请求转发,可以直接访问到非WEB-INF文件下的文件
response.sendRedirect("index.jsp");
return false;
}else{
/*当请求到达控制器之前被执行
true--继续向下执行,到达下一个拦截器,或控制器
false--不会继续向下执行*/
return true;
}
}
/**
*
* 在Controller处理之后返回时拦截
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
}
/**
* 在渲染View之后向用户发送View时拦截
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
}