1.用户登陆案例思路
0.先在idea中构建web项目
1 编写一个login的页面 在页面上写 form表单 用户名 密码 登录
2 将页面的请求用户名和密码发送到后台的Servlet
3 编写Servlet , service方法接收页面的请求参数 用户名和密码
4 去mysql的数据库那张用户表中去根据用户名和密码查询数据
5 返回结果 , 可能有值, 可能没有值(登录失败)
2. 实现过程
2.1 在idea在构建web项目
1.创建maven项目,选择maven提供的web模板,选择
2.在pom.xml文件中添加servlet的依赖
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
2.2 编写web页面完成简单的登陆
1. 在webapp下创建目录:html用来管理html文件
2.这里action,表单提交的数据要提交到的servlet中类的名称,一般前面要加项目名;method 提交数据的方式为post;
<form action="/webdemo_war/Login" method="post"> 用户名:<input type="text" name="username"/> <br/> 密码:<input type="password" name="pwd"/> <br/> <button type="submit">登录</button> </form>
2.3 编写Servlet , service方法接收页面的请求参数 用户名和密码
public class Login extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("后台对外服务"+req.getParameter("username")+req.getParameter("pwd")); resp.getWriter().write("后台接收到了请求"); } }
2.4 配置web.xml文件
<servlet> <servlet-name>Login</servlet-name> <servlet-class>com.doit.controller.Login</servlet-class> ---这里值得是servlet中重写 service的方法的全类</servlet> <servlet-mapping> <servlet-name>Login</servlet-name> <url-pattern>/Login</url-pattern> ---这里是映射关系,表单提交的时候我们设置的action属性 的作用就是为了在web中提交请求,通过action中的类名找 web.xml文件中url所映射的类,能找到servlet中重写的方 法 </servlet-mapping>
2.4 去mysql的数据库那张用户表中去根据用户名和密码查询数据,返回结果
public class Login extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { req.setCharacterEncoding("UTF8"); //--设置请求过来的参数编码 resp.setHeader("Content-Type","text/html;charset=UTF-8"); //设置响应的编码 String username = req.getParameter("username"); String password = req.getParameter("pwd"); //获取到来自页面提交的数据信息,然后去和数据库中的数据进行校验,返回结果 //jdbc链接mysql的方法 //0.添加依赖 1.注册驱动 2.获取链接 3.创建执行sql的实例化对象 4.执行sql语句 5. 获得结果集 Class.forName("com.mysql.jdbc.Driver"); //获得链接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/doit18?characterEncoding=UTF-8", "root", "123456"); //--设置数据库的编码格式 //获取执行sql的对象 PreparedStatement ps = conn.prepareStatement("select * from tb_user where username=? and password = ?"); ps.setString(1,username); ps.setString(2,password); //执行查询创建结果集 ResultSet rs = ps.executeQuery(); //new 一个user对象,用来接收这些属性 User user = new User(); String r="登陆失败........."; while (rs.next()) { String uid = rs.getString("uid"); String username1 = rs.getString("username"); String job = rs.getString("job"); String addr = rs.getString("addr"); user.set(username1,job,addr); r="登陆成功.."; resp.getWriter().write(String.valueOf(user)); } resp.getWriter().write(r); } catch (Exception e) { e.printStackTrace(); } } }
总结:
在实现简单的用户登陆的过程中会出现一些小问题,问题总结:
出现中文乱码问题,具体的乱码指的是,
1.响应展示在页面时候的乱码,
2.请求参数传递到servlet出现中文乱码,乱码又分为get请求乱码和post请求乱码,get请求出现的乱码需要每一个参数都设置,而post请求乱码只需要设置一次即可
3.还有就是中文和mysql数据库中的数据进行效验时,出现中文乱码无法匹配的情况;
解决方法,在写程序时,为了有效的避免中文编码格式不统一带来的困扰,我们在编写程序时不管有没有编码问题都直接将这三种编码设置写到程序中
req.setCharacterEncoding("UTF8"); //设置请求过来参数的编码 post请求出现的乱码 new String( req.getParameter("username").getBytes() , "UTF-8") //get请求出现的乱码 resp.setCharacterEncoding("UTF-8");//设置响应到页面上的编码 resp.setHeader("Content-Type","text/html;charset=UTF-8"); //设置响应到页面上的编码 jdbc:mysql://localhost:3306/doit18?characterEncoding=UTF-8 //设置数据库的编码格式
在web端请求tomcat时,可能会出现404问题,请看上一篇博客