Request是请求对象,Response是响应对象。这两个对象在我们使用Servlet的时候有看到:

- @WebServlet("/demo3")
- public class ServletDemo3 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //使用request对象 获取请求数据
- String name = request.getParameter("name");//url?name=zhangsan
-
- //使用response对象 设置响应数据
- response.setHeader("content-type","text/html;charset=utf-8");
- response.getWriter().write("
"
+name+",欢迎您!"); - }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("Post...");
- }
- }
- @WebServlet("/demo2")
- public class ServletDemo2 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println(request);
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- }
- }
请求行包含三块内容,分别是请求方式、请求资源路径、HTTP协议及版本
- /**
- * request 获取请求数据
- */
- @WebServlet("/req1")
- public class RequestDemo1 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- // String getMethod():获取请求方式: GET
- String method = req.getMethod();
- System.out.println(method);//GET
- // String getContextPath():获取虚拟目录(项目访问路径):/request-demo
- String contextPath = req.getContextPath();
- System.out.println(contextPath);
- // StringBuffer getRequestURL(): 获取URL(统一资源定位符):http://localhost:8080/request-demo/req1
- StringBuffer url = req.getRequestURL();
- System.out.println(url.toString());
- // String getRequestURI():获取URI(统一资源标识符): /request-demo/req1
- String uri = req.getRequestURI();
- System.out.println(uri);
- // String getQueryString():获取请求参数(GET方式): username=zhangsan
- String queryString = req.getQueryString();
- System.out.println(queryString);
-
-
- //------------
- // 获取请求头:user-agent: 浏览器的版本信息
- String agent = req.getHeader("user-agent");
- System.out.println(agent);
-
-
- }
-
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //获取post 请求体:请求参数
-
- //1. 获取字符输入流
- BufferedReader br = req.getReader();
- //2. 读取数据
- String line = br.readLine();
- System.out.println(line);
-
-
- }
- }
对于请求头的数据,格式为key: value如下:

- /**
- * request 获取请求数据
- */
- @WebServlet("/req1")
- public class RequestDemo1 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
-
-
- //------------
- // 获取请求头:user-agent: 浏览器的版本信息
- String agent = req.getHeader("user-agent");
- System.out.println(agent);
-
-
- }
-
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
-
-
- }
- }

- ServletInputStream getInputStream()
- 该方法可以获取字节
BufferedReader getReader()
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
-
- <!--
- action:form表单提交的请求地址
- method:请求方式,指定为post
- -->
-
- <form action="/request-demo/req4" method="post">
- <input type="text" name="username"><br>
- <input type="password" name="password"><br>
- <input type="checkbox" name="hobby" value="1"> 游泳
- <input type="checkbox" name="hobby" value="2"> 爬山 <br>
- <input type="submit">
-
- </form>
-
-
-
- </body>
- </html>
- /**
- * request 获取请求数据
- */
- @WebServlet("/req1")
- public class RequestDemo1 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
-
-
- }
-
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //在此处获取请求体中的数据
-
-
-
- }
- }
- /**
- * request 获取请求数据
- */
- @WebServlet("/req1")
- public class RequestDemo1 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
-
-
- }
-
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //获取post 请求体:请求参数
-
- //1. 获取字符输入流
- BufferedReader br = req.getReader();
- //2. 读取数据
- String line = br.readLine();
- System.out.println(line);
-
-
- }
- }
点击提交按钮后,就可以在控制台看到前端所发送的请求数据

String getQueryString()
BufferedReader getReader();
- /**
- * request 获取请求数据
- */
- @WebServlet("/req1")
- public class RequestDemo1 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
-
- String result = req.getQueryString();
- System.out.println(result);
-
- }
-
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //获取post 请求体:请求参数
-
- //1. 获取字符输入流
- BufferedReader br = req.getReader();
- //2. 读取数据
- String line = br.readLine();
- System.out.println(line);
-
-
- }
- }
- /**
- * request 获取请求数据
- */
- @WebServlet("/req1")
- public class RequestDemo1 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //获取请求方式
- String method = req.getMethod();
- //获取请求参数
- String params = ""; if("GET".
-
- equals(method))
-
- {
- params = req.getQueryString();
- }else if("POST".
-
- equals(method))
-
- {
- BufferedReader reader = req.getReader();
- params = reader.readLine();
- }
- //将请求参数进行打印控制台
- System.out.println(params);
-
- }
-
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
-
- this.doGet(req,resp);
-
-
- }
- }
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
-
- <form action="/request-demo/req4" method="post">
- <input type="text" name="username"><br>
- <input type="password" name="password"><br>
- <input type="checkbox" name="hobby" value="1"> 游泳
- <input type="checkbox" name="hobby" value="2"> 爬山 <br>
- <input type="submit">
-
- </form>
-
-
-
- </body>
- </html>
- /**
- * request 通用方式获取请求参数
- */
- @WebServlet("/req2")
- public class RequestDemo2 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //GET请求逻辑
- //System.out.println("get....");
-
- //1. 获取所有参数的Map集合
- Map<String, String[]> map = req.getParameterMap();
- for (String key : map.keySet()) {
- // username:zhangsan lisi
- System.out.print(key+":");
-
- //获取值
- String[] values = map.get(key);
- for (String value : values) {
- System.out.print(value + " ");
- }
-
- System.out.println();
- }
-
-
- }
-
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //POST请求逻辑
-
-
- }
- }
- /**
- * request 通用方式获取请求参数
- */
- @WebServlet("/req2")
- public class RequestDemo2 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //GET请求逻辑
-
- //...
-
- System.out.println("------------");
-
- //2. 根据key获取参数值,数组
- String[] hobbies = req.getParameterValues("hobby");
- for (String hobby : hobbies) {
-
- System.out.println(hobby);
- }
-
-
- }
-
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //POST请求逻辑
-
-
- }
- }
获取的结果为:

- /**
- * request 通用方式获取请求参数
- */
- @WebServlet("/req2")
- public class RequestDemo2 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //GET请求逻辑
-
- //...
-
- System.out.println("------------");
-
- //3. 根据key 获取单个参数值
- String username = req.getParameter("username");
- String password = req.getParameter("password");
-
- System.out.println(username);
- System.out.println(password);
-
-
- }
-
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //POST请求逻辑
-
-
- }
- }
使用通用方式获取请求参数后,屏蔽了GET和POST的请求方式代码的不同,则代码可以定义如下格式:

- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
-
- <form action="/request-demo/req4" method="post">
- <input type="text" name="username"><br>
- <input type="password" name="password"><br>
- <input type="checkbox" name="hobby" value="1"> 游泳
- <input type="checkbox" name="hobby" value="2"> 爬山 <br>
- <input type="submit">
-
- </form>
-
-
-
- </body>
- </html>
- /**
- * 中文乱码问题解决方案
- */
- @WebServlet("/req4")
- public class RequestDemo4 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //1. 解决乱码:POST,getReader()
- //request.setCharacterEncoding("UTF-8");//设置字符输入流的编码
-
- //2. 获取username
- String username = request.getParameter("username");
- System.out.println("解决乱码前:"+username);
-
- //3. GET,获取参数的方式:getQueryString
- // 乱码原因:tomcat进行URL解码,默认的字符集ISO-8859-1
- /* //3.1 先对乱码数据进行编码:转为字节数组
- byte[] bytes = username.getBytes(StandardCharsets.ISO_8859_1);
- //3.2 字节数组解码
- username = new String(bytes, StandardCharsets.UTF_8);*/
-
- username = new String(username.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8);
-
- System.out.println("解决乱码后:"+username);
-
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }
- /**
- * 中文乱码问题解决方案
- */
- @WebServlet("/req4")
- public class RequestDemo4 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //1. 解决乱码:POST,getReader()
- //request.setCharacterEncoding("UTF-8");//设置字符输入流的编码
-
- //2. 获取username
- String username = request.getParameter("username");
- System.out.println("解决乱码前:"+username);
-
-
-
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }
- public class URLDemo {
-
- public static void main(String[] args) throws UnsupportedEncodingException {
- String username = "张三";
-
- //1. URL编码
- String encode = URLEncoder.encode(username, "utf-8");
- System.out.println(encode);
-
- //2. URL解码
- //String decode = URLDecoder.decode(encode, "utf-8");
- String decode = URLDecoder.decode(encode, "ISO-8859-1");
-
- System.out.println(decode);
-
- //3. 转换为字节数据,编码
- byte[] bytes = decode.getBytes("ISO-8859-1");
- /* for (byte b : bytes) {
- System.out.print(b + " ");
- }*/
-
- //4. 将字节数组转为字符串,解码
- String s = new String(bytes, "utf-8");
-
- System.out.println(s);
-
-
- }
- }
- public class URLDemo {
-
- public static void main(String[] args) throws UnsupportedEncodingException {
- String username = "张三";
-
- //1. URL编码
- String encode = URLEncoder.encode(username, "utf-8");
- System.out.println(encode);
-
- //2. URL解码
- //String decode = URLDecoder.decode(encode, "utf-8");
- String decode = URLDecoder.decode(encode, "ISO-8859-1");
-
- System.out.println(decode);
-
- //3. 转换为字节数据,编码
- byte[] bytes = decode.getBytes("ISO-8859-1");
- /* for (byte b : bytes) {
- System.out.print(b + " ");
- }*/
-
- //4. 将字节数组转为字符串,解码
- String s = new String(bytes, "utf-8");
-
- System.out.println(s);
-
-
- }
- }
- /**
- * 中文乱码问题解决方案
- */
- @WebServlet("/req4")
- public class RequestDemo4 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //1. 解决乱码:POST,getReader()
- //request.setCharacterEncoding("UTF-8");//设置字符输入流的编码
-
- //2. 获取username
- String username = request.getParameter("username");
- System.out.println("解决乱码前:"+username);
-
- //3. GET,获取参数的方式:getQueryString
- // 乱码原因:tomcat进行URL解码,默认的字符集ISO-8859-1
- /* //3.1 先对乱码数据进行编码:转为字节数组
- byte[] bytes = username.getBytes(StandardCharsets.ISO_8859_1);
- //3.2 字节数组解码
- username = new String(bytes, StandardCharsets.UTF_8);*/
-
- username = new String(username.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8);
-
- System.out.println("解决乱码后:"+username);
-
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }
1. 请求转发(forward):一种在服务器内部的资源跳转方式。

- /**
- * 请求转发
- */
- @WebServlet("/req5")
- public class RequestDemo5 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("demo5...");
-
-
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }
- /**
- * 请求转发
- */
- @WebServlet("/req6")
- public class RequestDemo6 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("demo6...");
- System.out.println(request);
- //获取数据
- Object msg = request.getAttribute("msg");
- System.out.println(msg);
-
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }
- /**
- * 请求转发
- */
- @WebServlet("/req5")
- public class RequestDemo5 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("demo5...");
-
-
- //请求转发
- request.getRequestDispatcher("/req6").forward(request,response);
-
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }
- /**
- * 请求转发
- */
- @WebServlet("/req5")
- public class RequestDemo5 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("demo5...");
- System.out.println(request);
- //存储数据
- request.setAttribute("msg","hello");
-
- //请求转发
- request.getRequestDispatcher("/req6").forward(request,response);
-
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }
- /**
- * 请求转发
- */
- @WebServlet("/req6")
- public class RequestDemo6 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("demo6...");
- System.out.println(request);
- //获取数据
- Object msg = request.getAttribute("msg");
- System.out.println(msg);
-
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }
讲解完Request对象,接下来我们回到刚开始的那张图:

1. Response重定向(redirect):一种资源跳转方式。

- @WebServlet("/resp1")
- public class ResponseDemo1 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("resp1....");
-
-
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }
- @WebServlet("/resp2")
- public class ResponseDemo2 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("resp2....");
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }
- @WebServlet("/resp1")
- public class ResponseDemo1 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("resp1....");
-
- //重定向
- /*//1.设置响应状态码 302
- response.setStatus(302);
- //2. 设置响应头 Location
- response.setHeader("Location","/request-demo/resp2");*/
-
-
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }
- @WebServlet("/resp1")
- public class ResponseDemo1 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("resp1....");
-
- //重定向
-
- response.sendRedirect("/request-demo/resp2");
-
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }
因为第一次响应结果中包含了浏览器下次要跳转的路径,所以这个路径是可以任意位置资源。
- @WebServlet("/resp1")
- public class ResponseDemo1 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("resp1....");
-
-
-
- //简化方式完成重定向
- //动态获取虚拟目录
- String contextPath = request.getContextPath();
-
- response.sendRedirect(contextPath+"/resp2");
-
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }
- /**
- * 响应字符数据:设置字符数据的响应体
- */
- @WebServlet("/resp3")
- public class ResponseDemo3 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- response.setContentType("text/html;charset=utf-8");
- //1. 获取字符输出流
- PrintWriter writer = response.getWriter();
- writer.write("aaa");
-
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }

- /**
- * 响应字节数据:设置字节数据的响应体
- */
- @WebServlet("/resp4")
- public class ResponseDemo4 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
- //1. 读取文件
- FileInputStream fis = new FileInputStream("d://a.jpg");
-
- //2. 获取response字节输出流
- ServletOutputStream os = response.getOutputStream();
-
- //3. 完成流的copy
- byte[] buff = new byte[1024];
- int len = 0;
- while ((len = fis.read(buff))!= -1){
- os.write(buff,0,len);
- }
-
-
-
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }

- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- <version>2.6</version>
- </dependency>
- /**
- * 响应字节数据:设置字节数据的响应体
- */
- @WebServlet("/resp4")
- public class ResponseDemo4 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
- //1. 读取文件
- FileInputStream fis = new FileInputStream("d://a.jpg");
-
- //2. 获取response字节输出流
- ServletOutputStream os = response.getOutputStream();
-
- //3. 完成流的copy
-
- IOUtils.copy(fis,os);
-
- fis.close();
-
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }

1. 复制资料中的静态页面到项目的webapp目录下

- <dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis</artifactId>
- <version>3.5.5</version>
- </dependency>
-
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>5.1.34</version>
- </dependency>
- <?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>
- <package name="com.itheima.pojo"/>
- </typeAliases>
-
- <environments default="development">
- <environment id="development">
- <transactionManager type="JDBC"/>
- <dataSource type="POOLED">
- <property name="driver" value="com.mysql.jdbc.Driver"/>
- <property name="url" value="jdbc:mysql:///db1?useSSL=false&useServerPrepStmts=true"/>
- <property name="username" value="root"/>
- <property name="password" value="1234"/>
- </dataSource>
- </environment>
- </environments>
- <mappers>
- <!--扫描mapper-->
- <package name="com.itheima.mapper"/>
- </mappers>
- </configuration>
- public interface UserMapper {
-
- }
1. 在UserMapper接口中提供一个根据用户名和密码查询用户对象的方法
- /**
- * 根据用户名和密码查询用户对象
- * @param username
- * @param password
- * @return
- */
- @Select("select * from tb_user where username = #{username} and password = #{password}")
- User select(@Param("username") String username,@Param("password") String password);
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <title>login</title>
- <link href="css/login.css" rel="stylesheet">
- </head>
-
- <body>
- <div id="loginDiv">
- <form action="/request-demo/loginServlet" method="post" id="form">
- <h1 id="loginMsg">LOGIN IN</h1>
- <p>Username:<input id="username" name="username" type="text"></p>
-
- <p>Password:<input id="password" name="password" type="password"></p>
-
- <div id="subDiv">
- <input type="submit" class="button" value="login up">
- <input type="reset" class="button" value="reset">
- <a href="register.html">没有账号?点击注册</a>
- </div>
- </form>
- </div>
-
- </body>
- </html>
- @WebServlet("/loginServlet")
- public class LoginServlet extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //1. 接收用户名和密码
- String username = request.getParameter("username");
- String password = request.getParameter("password");
-
- //2. 调用MyBatis完成查询
- //2.1 获取SqlSessionFactory对象
- /* String resource = "mybatis-config.xml";
- InputStream inputStream = Resources.getResourceAsStream(resource);
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);*/
-
- SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
- //2.2 获取SqlSession对象
- SqlSession sqlSession = sqlSessionFactory.openSession();
- //2.3 获取Mapper
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
- //2.4 调用方法
- User user = userMapper.select(username, password);
- //2.5 释放资源
- sqlSession.close();
-
-
- //获取字符输出流,并设置content type
- response.setContentType("text/html;charset=utf-8");
- PrintWriter writer = response.getWriter();
- //3. 判断user释放为null
- if(user != null){
- // 登陆成功
- writer.write("登陆成功");
- }else {
- // 登陆失败
- writer.write("登陆失败");
- }
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }

1. 编写UserMapper提供根据用户名查询用户数据方法和添加用户方法
- /**
- * 根据用户名查询用户对象
- * @param username
- * @return
- */
- @Select("select * from tb_user where username = #{username}")
- User selectByUsername(String username);
-
- /**
- * 添加用户
- * @param user
- */
- @Insert("insert into tb_user values(null,#{username},#{password})")
- void add(User user);
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>欢迎注册</title>
- <link href="css/register.css" rel="stylesheet">
- </head>
- <body>
-
- <div class="form-div">
- <div class="reg-content">
- <h1>欢迎注册</h1>
- <span>已有帐号?</span> <a href="login.html">登录</a>
- </div>
- <form id="reg-form" action="/request-demo/registerServlet" method="post">
-
- <table>
-
- <tr>
- <td>用户名</td>
- <td class="inputs">
- <input name="username" type="text" id="username">
- <br>
- <span id="username_err" class="err_msg" style="display: none">用户名不太受欢迎</span>
- </td>
-
- </tr>
-
- <tr>
- <td>密码</td>
- <td class="inputs">
- <input name="password" type="password" id="password">
- <br>
- <span id="password_err" class="err_msg" style="display: none">密码格式有误</span>
- </td>
- </tr>
-
- </table>
-
- <div class="buttons">
- <input value="注 册" type="submit" id="reg_btn">
- </div>
- <br class="clear">
- </form>
-
- </div>
- </body>
- </html>
- @WebServlet("/registerServlet")
- public class RegisterServlet extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //1. 接收用户数据
- String username = request.getParameter("username");
- String password = request.getParameter("password");
-
- //封装用户对象
- User user = new User();
- user.setUsername(username);
- user.setPassword(password);
-
- //2. 调用mapper 根据用户名查询用户对象
- //2.1 获取SqlSessionFactory对象
- /* String resource = "mybatis-config.xml";
- InputStream inputStream = Resources.getResourceAsStream(resource);
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);*/
- SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
-
- //2.2 获取SqlSession对象
- SqlSession sqlSession = sqlSessionFactory.openSession();
- //2.3 获取Mapper
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
-
- //2.4 调用方法
- User u = userMapper.selectByUsername(username);
-
- //3. 判断用户对象释放为null
- if( u == null){
- // 用户名不存在,添加用户
- userMapper.add(user);
-
- // 提交事务
- sqlSession.commit();
- // 释放资源
- sqlSession.close();
- }else {
- // 用户名存在,给出提示信息
- response.setContentType("text/html;charset=utf-8");
- response.getWriter().write("用户名已存在");
- }
-
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doGet(request, response);
- }
- }
- String resource = "mybatis-config.xml";
- InputStream inputStream = Resources.getResourceAsStream(resource);
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
- public class SqlSessionFactoryUtils {
-
- private static SqlSessionFactory sqlSessionFactory;
-
- static {
- //静态代码块会随着类的加载而自动执行,且只执行一次
-
- try {
- String resource = "mybatis-config.xml";
- InputStream inputStream = Resources.getResourceAsStream(resource);
- sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
-
- public static SqlSessionFactory getSqlSessionFactory(){
- return sqlSessionFactory;
- }
- }
- SqlSessionFactory sqlSessionFactory
- =SqlSessionFactoryUtils.getSqlSessionFactory();