2.编写一个Servlet类,用来处理用户请求javax.servlet.jsp jsp-api 2.2 javax.servlet jstl 1.2
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取前端参数
String method = req.getParameter("method");
if(method.equals("add")) req.getSession().setAttribute("msg","执行了add方法");
if(method.equals("delete")) req.getSession().setAttribute("msg","执行了delete方法");
//2.调用业务层
//3.视图转发或者重定向
req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,resp);//重定向
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
3.写完servlet后,在web.xml中注册servlet
hello
com.ckl.servlet.HelloServlet
hello
/hello
3.1同时编写test.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
hello
#{msg}
4.编写表单页面from.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
biaodan
5.配置tomcat并运行测试
http://localhost:8080/0514_SpringMVC_Servlet/hello?method=delete
http://localhost:8080/0514_SpringMVC_Servlet/hello?method=add
SpringMVC步骤 1.新建一个maven项目,添加web支持 2.确定导入SpringMVC依赖 3.配置web.xml,注册DispatcherServlet
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc-servlet.xml
1
springmvc
/
4.编写springmvc配置文件
【springmvc-servlet.xml】:[servletname]-servlet.xml 按照官方来
5.编写具体的业务操作Controller
要么实现Controller接口,要么增加注解;需要返回一个ModelAndView,装数据,封视图
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
throws Exception {
//ModelAndView 模型和视图
ModelAndView mv = new ModelAndView();
//封装对象,放在mv中
mv.setViewName("hello"); // /WEB-INF/jsp/hello,jsp
return mv;
}
}
6.将自己的类交给SpringIOC容器,注册bean(springmvc-servlet.xml)
7.编写要跳转的jsp页面,显示ModelAndView存放的数据,以及我们的正常页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
${msg}
8.配置Tomact运行测试
http://localhost:8080/hello
如果访问出现404,
1.查看控制台输出,看一下是不是缺少什么jar包
2.如果jar存在,显示无法输出,就在IDEA的项目发布中,添加lib依赖
3.重启Tomcat
lib文件夹在WEB-INF文件夹里面
SpringMVC使用注解开发 1.新建一个maven项目pom.xml中添加资源过滤依赖【可加可不加】
src/main/java
***.xml
false
src/main/resources
***.xml
false
2.在pom.xml中引入相关依赖
Spring框架核心库、SPringMVC、servlet,JSTL等
3.配置web.xml注册DispatcherServlet
SpringMVC
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc-servlet.xml
1
SpringMVC
/
4.添加SPring MVC配置文件
springmvc-servlet.xml:
让IOC的注解生效;静态资源过滤:HTML,JS,CSS,图片,视频…
MVC的注解驱动;配置视图解析器
在视图解析器中我们把所有的视图都存放在/WEB-INF/目录下,这样可以保证视图安全,又因为这个目录下的文件,客户端不能直接访问。
5.创建Controller编写一个java控制类,com.ckl.controller.HelloController
@Controller//就不需要去xml中注册bean
@RequestMapping("/hello")
public class HelloController {
@RequestMapping("/h1")//视图跳转
public String hello(Model model){//localhost:8080/hello/h1
//封装数据
model.addAttribute("msg","Hello,Spring MVC Annotation");
return "hello"; //会被视图解析器处理
}
@RequestMapping("/h1")
public String hello2(Model model){
//封装数据
model.addAttribute("msg","Hello,Spring MVC Annotation 2");
return "hello"; //会被视图解析器处理
}
}
- Controller 是为了让Spring IOC容器初始化时自动扫描到
- @RequestMapping是为了映射请求路径,这里因为类与方法上都有映射所有访问时应该是/HelloController/hello
- 方法中声明Model类型的参数是为了把Action中的数据带到视图中
- 方法返回的结果是视图的名称hello,加上配置文件中的前后缀编程WEB-INF/jsp/hello.jsp
hello.jsp
7.配置Tomcat运行测试注意点:
使用Spring MVC 必须配置三大件:处理器映射器、处理器适配器、视图解析器
通常我们只需要手动配置视图解析器,而处理器映射器和处理器适配器只需要开启注解驱动即可
配置SpringMVC乱码过滤在web.xml中
5.编写controller类:UserControllerencoding org.springframework.web.filter.CharacterEncodingFilter encoding utf-8 encoding }
@Controller
public class UserController {
//@RequestMapping(value="/j1",produces = "application/json;charset=utf-8")
@RequestMapping("j1")
@ResponseBody //不会走视图解析器,会直接返回一个字符串
public String json1() throws JsonProcessingException {
//jackson objectMapper
ObjectMapper mapper = new ObjectMapper();
//创建一个对象
User user = new User("1号",3,"男");
String str = mapper.writeValueAsString(user);
return str;
}
@RequestMapping("j2")
@ResponseBody
public String json2() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
//创建一个集合
List list = new ArrayList();
User user1 = new User("1号",1,"男");
User user2 = new User("2号",2,"男");
User user3 = new User("3号",3,"女");
User user4 = new User("4号",4,"男");
list.add(user1);list.add(user2);list.add(user3);list.add(user4);
String str = mapper.writeValueAsString(list);
return str;
}
@RequestMapping("j3")
@ResponseBody
public String json3() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
mapper.setDateFormat(sd);
Date date = new Date();
//SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//sd.format(date);
//ObjectMapper,时间解析后的默认格式为:Timestamp 时间戳
//String str = mapper.writeValueAsString(sd);
String str = mapper.writeValueAsString(date);
return str;
}
}
注意: 使用json注意处理乱码问题
可以用过Spring配置统一指定,就不需要每次都去处理
在springmvc-servlet.xml中添加一段消息StringHttpMessageConverter转换配置
SSM整合
1.新建项目,导入依赖
pom.xml
4.0.0
org.example
SSM
pom
1.0-SNAPSHOT
0516_SSM_Build
junit
junit
4.13.2
test
mysql
mysql-connector-java
8.0.25
com.mchange
c3p0
0.9.5.4
javax.servlet
servlet-api
2.5
javax.servlet
jstl
1.2
org.mybatis
mybatis
3.5.2
org.mybatis
mybatis-spring
2.0.2
org.springframework
spring-webmvc
5.3.8
org.springframework
spring-jdbc
5.3.8
src/main/java
***.xml
false
src/main/resources
***.xml
false
2.连接数据库
3.创建所需包,配置文件
4.关联数据库
database.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?characterEncoding=UTF-8"
jdbc.username=root
jdbc.password=123456
mybatis-config.xml
5.创建实体类:
Books:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Books {
private int bookID;
private String bookName;
private int bookCounts;
private String detail;
}
6.创建接口及xml
开始编写dao层,dao层只是完成增删查改,service层才会在增删查改的基础上加上逻辑判断等
创建实体类的接口去进行业务操作:
BookMapper接口: public interface BookMapper {
public int addBook(Books books);//添加书籍
public int deleteBookById(int id);//删除书籍
public int updateBook(Books books);//修改一本书
public Books queryBookById(int id);//查询一本书
public List queryAllBook();//查询所有书籍
}
BooksMapper.xml
insert into ssm.books (bookName, bookCounts, detail)
values (#{bookName}, #{bookCounts}, #{detail});
delete from ssm.books where bookID = #{bookID};
update ssm.books set bookName = #{bookName},bookCounts=#{bookCounts},detail=#{detail}
where bookID=#{bookID};
也可以使用注解的方式,不用xml,比如:
public interface BookMapper {
@Insert("insert into ssm.books (bookName, bookCounts, detail) values (#{bookName}, #{bookCounts}, #{detail}")
public int addBook(Books books);//添加书籍
public int deleteBookById(@Param("bookID")int id);//删除书籍
public int updateBook(Books books);//修改一本书
public Books queryBookById(@Param("bookID")int id);//查询一本书
public List queryAllBook();//查询所有书籍
}
7.將BooksMapper.xml绑定到配置文件中
mybatis-config.xml
``` ### 8.编写业务层 dao层完成后,开始编写业务层[service]:BookService接口 ```java public interface BookService { public int addBook(Books books);//添加书籍 public int deleteBookById(int id);//删除书籍 public int updateBook(Books books);//修改一本书 public Books queryBookById(int id);//查询一本书 public List queryAllBook();//查询所有书籍 }
然后再编写他的实现类:BookServiceImpl.java
service层调dao层 dao层只是完成增删查改,service层才会在增删查改的基础上加上逻辑判断等
public class BookServiceImpl implements BookService{
private BookMapper bookMapper;
public BookServiceImpl(BookMapper bookMapper) {
this.bookMapper = bookMapper;
}
public int addBook(Books books) {
return bookMapper.addBook(books);
}
public int deleteBookById(int id) {
return bookMapper.deleteBookById(id);
}
public int updateBook(Books books) {
return bookMapper.updateBook(books);
}
public Books queryBookById(int id) {
return bookMapper.queryBookById(id);
}
public List queryAllBook() {
return bookMapper.queryAllBook();
}
}
9.编写spring-dao.xml配置文件
以上完成了mybatis层,然后开始整合spring层
spring-dao.xml
10.绑定service层
spring-service.xml
配置中的第2 点,注入spring,注解版:
@Service
public class BookServiceImpl implements BookService{
@Autowired
private BookMapper bookMapper;
}
11.增加web支持
spring层整合完成,然后这个spring mvc层
web.xml
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-mvc.xml
1
springmvc
/
encoding
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
encoding
//controller 调 service层
@Autowired
@Qualifier("BookServiceImpl")
private BookService bookService;
//跳转到展示所有书籍的页面
@RequestMapping("/allBook")
public String list(Model model){
List list = bookService.queryAllBook();
model.addAttribute("list",list);
return "allBook";
}
//跳转到添加书籍的页面
@RequestMapping("/toAddBook")
public String toAddPaper(){
return "addBook";
}
//处理添加书籍的请求
@RequestMapping("/addBook")
public String addBook(Books books){
bookService.addBook(books);
return "redirect:/allBook";
}
//跳转到修改页面
@RequestMapping("/toUpdateBook")
public String toUpdateBook(int id,Model model){
Books books = bookService.queryBookById(id);
model.addAttribute("QBook",books);
return "updateBook";
}
//处理修改书籍信息的请求
@RequestMapping("/updateBook")
public String updateBook(Books books){
bookService.updateBook(books);
System.out.println("updateBook"+books+"***********");
return "redirect:/allBook";
}
//处理书籍删除信息的请求 restful风格
@RequestMapping("/deleteBook/{bookID}")
public String deleteBook(@PathVariable("bookID") int id){
bookService.deleteBookById(id);
return "redirect:/allBook";
}
}
新增查询功能
@Controller
public class BookController {
//controller 调 service层
@Autowired
@Qualifier("BookServiceImpl")
private BookService bookService;
//查询书籍
@RequestMapping("/queryBook")
public String queryBook(String queryBookName,Model model){
Books books = bookService.queryBookByName(queryBookName);
List list = new ArrayList();
list.add(books);
if(books==null){
list = bookService.queryAllBook();
model.addAttribute("error","没有此书!");
}
model.addAttribute("list",list);
return "allBook";
}
}
allBook.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Books Show



