Request继承体系
Request 获取请求数据
getContextPath() 会用的比较多
请求体中方法代码:
BufferedReader br =req.getReader();
String line =br.readline();
sout(line);
就可以得到请求体了
Servlet模板可以在file settings editer files and template 点other 下拉到web 找到使用注解创建Servlet的那个模板就可以修改了
Request 请求转发
response
用resp.sendRedirect()就是简化了前面的两步
路径问题
用户登录案例
loginServlet:
@WebServlet("/loginServlet") public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //接收用户名和密码 String username = request.getParameter("username"); String password = request.getParameter("password"); //调用mybatis完成查询 //加载核心配置文件 获取sqlSessionFactory对象 String resource = "mybatis_config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //获取sqlSession对象 SqlSession sqlSession = sqlSessionFactory.openSession(); //获取brandMapper接口的代理对象 执行语句 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user =userMapper.select(username,password); //释放资源 sqlSession.close(); //获取字符输出流,并设置content type response.setContentType("text/html;charset=utf-8"); PrintWriter writer = response.getWriter(); //判断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); } }
简易HTML
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登录系统</title> </head> <body> <form action="/loginServlet" method="post" id="form"> <h1>登录</h1> <p>输入用户名</p> <input name="username" id="username" type="text"> <p>输入密码</p><input name="password" id="password" type="password"> <input type="submit" value="登录"> <input type="reset" value="reset"> </form> <a href="register.html" >没有账号?点击注册</a> </body> </html>
用户注册
注册的servlet:
@WebServlet("/registerServlet") public class RegisterServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //接收用户名和密码 String username = request.getParameter("username"); String password = request.getParameter("password"); User user = new User(); user.setUsername(username); user.setPassword(password); //调用mybatis完成查询 //加载核心配置文件 获取sqlSessionFactory对象 String resource = "mybatis_config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //获取sqlSession对象 SqlSession sqlSession = sqlSessionFactory.openSession(); //获取brandMapper接口的代理对象 执行语句 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user1 =userMapper.selectByUsername(username); //获取字符输出流,并设置content type response.setContentType("text/html;charset=utf-8"); PrintWriter writer = response.getWriter(); //判断user是否为null if (user1==null){ //用户名不存在,添加数据 userMapper.add(user); writer.write("注册成功"); //提交事务 sqlSession.commit(); //释放资源 sqlSession.close(); }else { writer.write("用户名已存在"); } } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request,response); } }
UserMapper:
public interface UserMapper { //根据用户名跟密码查询对象 @Select("select * from tb_user where username=#{username} and password=#{password}") User select(@Param("username") String username, @Param("password")String password); @Select("select * from tb_user where username=#{username}") User selectByUsername(@Param("username") String username); @Insert("insert into tb_user (username, password) values (#{username},#{password})") void add(User user); }
简易html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>注册</title> </head> <body> <form action="/registerServlet" method="post" id="form2"> <h1>登录</h1> <p>输入用户名</p> <input name="username" id="username" type="text"> <p>输入密码</p><input name="password" id="password" type="password"> <input type="submit" value="注册"> <input type="reset" value="reset"> </form> <a href="Login.html">已有账号?点击登录</a> </body> </html>
代码优化
也就是将这三行,包装成一个工具类,因为只创建一次,所以就使用静态代码块
静态代码块无法抛出异常,我们可以用try catch
代码:创建工厂对象
public class SqlSessionFactoryUtils { private static final SqlSessionFactory sqlSessionFactory; //静态代码块随着类的加载自动执行,且只执行一次 static { String resource = "mybatis_config.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream(resource); } catch (IOException e) { throw new RuntimeException(e); } sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } public static SqlSessionFactory getSqlSessionFactory() { return sqlSessionFactory; } }
后续要使用的时候,直接用 SqlSessionFactoryUtils.getSqlSessionFactory就可以了