Servlet开发

Posted zyxsblogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet开发相关的知识,希望对你有一定的参考价值。

 

Jsp&Servlet用户登录功能实现(采用MVC模式)

我们使用Jsp&Servlet开发一个用户登录功能的小项目(麻雀大小,但是五脏俱全呦,关键是技术问题!)。

数据库:mysql   

驱动包为 mysql-connector-java-3.1.12-bin.jar(下载链接:链接: https://pan.baidu.com/s/1_MlQONkdr5l1nKtO8OZCPQ 提取码: 442t)

驱动包放置在 HeadFirstJspServlet05/com.java1234.model/WeebContent/WEB-INF/lib下

开发工具:eclipse   

客户端:Chrome浏览器

系统架构:  

①在com.java1234.model下是User模型;

在User类中 属性有id,userName,password;

主要作用是建立一个基础用户(id,用户名,密码(没有涉及加密,以后会更新,打算采用MD5加密))的模型。

代码如下:

技术分享图片
 1 package com.java1234.model;
 2 public class User {
 3     private int id;
 4     private String userName;
 5     private String password;
 6     
 7     public User(String userName, String password) {
 8         super();
 9         this.userName = userName;
10         this.password = password;
11     }
12 
13     public User() {
14         super();
15         // TODO Auto-generated constructor stub
16     }
17 
18     public String getUserName() {
19         return userName;
20     }
21     
22     public void setUserName(String userName) {
23         this.userName = userName;
24     }
25     
26     public String getPassword() {
27         return password;
28     }
29     
30     public void setPassword(String password) {
31         this.password = password;
32     }
33     
34     public int getId() {
35         return id;
36     }
37     
38     public void setId(int id) {
39         this.id = id;
40     }
41 }
User.java

②在com.java1234.util下是建立的DbUtil模型,主要是连接数据库用的。

这部分代码需要加强记忆;

其实细分也很简单的,主要存在的知识要点

数据库链接地址dbUrl="jdbc:mysql://localhost:3306/db_jsp"(数据库名字);

数据库驱动:jdbcName="com.mysql.jdbc.Driver";

数据库名称:dbUserName="root";

数据库密码:dbpassword="123456";

数据库连接getcon()方法,数据库关闭closecon()方法;

 代码如下:

技术分享图片
package com.java1234.util;
import java.sql.Connection;
import java.sql.DriverManager;
public class DbUtil {
    private String dbUrl="jdbc:mysql://localhost:3306/db_jsp";//数据库链接地址
    private String dbUserName="root";//数据库用户名称
    private String dbPassword="123456";//数据库密码
    private String jdbcName="com.mysql.jdbc.Driver";//jdbc驱动
    public Connection getcon() throws Exception{
        Class.forName(jdbcName);//反射实例化jdbc驱动包
        Connection con
        =DriverManager.getConnection(dbUrl, dbUserName, dbPassword);
        return con;
    }
    public void closeCon(Connection con) throws Exception{
        if(con !=null){
            con.close();
        }
    }
    public static void main(String[] args) {
        DbUtil dbutil=new DbUtil();
       try {
        Connection con=dbutil.getcon();
        System.out.println("数据库连接成功!");
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
       
    }
}
DbUtil..java

数据库表为:

t_user :

技术分享图片技术分享图片

技术分享图片

③在com.java1234.dao下建立的Dao模型,主要是对User模型进行操作。

主要操作login()方法(主要是获取数据库数据String sql=”SELECT * from t_user where userName =? and password=?”; )   

-----> PrepareStatement pstmt = prepareStatement(sql)   

----> 对第1个参数和第2个参数进行设置  

pstmt.setString(1, user.getUserName()); pstmt.setString(2, user.getPassword());

----->执行数据库查询指令 ResultSet rs=pstmt.executeQuery();

代码如下:

技术分享图片
 1 package com.java1234.dao;
 2 import java.sql.Connection;
 3 import java.sql.PreparedStatement;
 4 import java.sql.ResultSet;
 5 import com.java1234.model.User;
 6 public class Userdao {
 7     public User login(Connection con,User user) throws Exception{
 8         User resultUser=null;
 9         String sql="SELECT * from t_user where userName=? and password=? ";
10         PreparedStatement pstmt=con.prepareStatement(sql);
11         pstmt.setString(1, user.getUserName());
12         pstmt.setString(2, user.getPassword());
13         ResultSet rs=pstmt.executeQuery();
14         if(rs.next()){
15             resultUser=new User();
16             resultUser.setUserName(rs.getString("userName"));
17             resultUser.setPassword(rs.getString("passWord"));
18         }
19         return resultUser;
20     }
21 }
Userdao.java

④com.java1234.web下的LoginServlet.java 进行后端处理,主要将前端页面的数据传到后端。(还有验证功能,对数据库中不存在的数据会进行判错,error 并且在前端页面输出

代码如下:

技术分享图片
 1 package com.java1234.web;
 2 import java.io.IOException;
 3 import java.sql.Connection;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 import javax.servlet.http.HttpSession;
 9 
10 import com.java1234.dao.Userdao;
11 import com.java1234.model.User;
12 import com.java1234.util.DbUtil;
13 
14 public class LoginServlet extends HttpServlet{
15     private static final long serialVersionUID = 1L;
16     DbUtil dbutil=new DbUtil();
17     Userdao userdao=new Userdao();
18     @Override
19     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
20         // TODO Auto-generated method stub
21         this.doPost(request,response);
22     }
23 
24     @Override
25     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
26         // TODO Auto-generated method stub
27         String  userName=request.getParameter("userName");
28         String  password=request.getParameter("password");
29         Connection con=null;
30         try {
31             User user=new User(userName,password);
32             con=dbutil.getcon();
33             User currentuser = userdao.login(con,user);
34             if(currentuser == null){
35                 request.setAttribute("error", "用户名或者密码错误");
36                 request.setAttribute("userName", userName);
37                 request.setAttribute("password", password);
38                 request.getRequestDispatcher("Login.jsp").forward(request, response);
39             }else{
40                 HttpSession session=request.getSession(); 
41                 session.setAttribute("currentuser", currentuser);
42                 response.sendRedirect("main.jsp");
43             }
44         } catch (Exception e) {
45             // TODO Auto-generated catch block
46             e.printStackTrace();
47             }
48         }
49 }
LoginServlet.java

涉及技术要点:

RequestDispatcher接口 服务器跳转... 参考博客(博客写的确实好!)

https://www.cnblogs.com/lulipro/p/7471987.html

⑤jsp页面,我们可以看到是一个简单的用户登录功能的实现。

技术分享图片
 1 <%@ page language="java" contentType="text/html; charset=utf-8"
 2     pageEncoding="utf-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 7 <title>target-redirect</title>
 8 <script type="text/javascript">
 9     function resetInfo(){
10         document.getElementById("userName").value="";//document操纵html文档内容。
11         document.getElementById("password").value="";
12     }
13 </script>
14 </head>
15 <body>
16     <form action="login" method="post">
17         <h4>用户登录</h4>
18         <table>
19             <tr>
20                 <td>用户名:</td>
21                 <td><input type="text" id="userName" name="userName" value="${userName}"/></td>
22             </tr>
23             <tr>
24                 <td>密码:</td>
25                 <td><input type="password" id="password" name="password" value="${password}"></td>
26             </tr>
27             <tr>
28                 <td><input type="submit" value="登录"/></td>
29                 <td colspan="2"><input type="button" value="重置" onclick="resetInfo()"/> 
30                 <font color="red">${error}</font>
31                 </td>
32                 
33             </tr>
34         </table>
35     </form>
36 </body>
37 </html>
Login.jsp

涉及的技术点:

  1. javascript脚本: document.getElementById(" ").     

    每个载入浏览器的 HTML 文档都会成为 Document 对象。

    Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。

     

  2.  value="${userName}";el表达式

界面:

登录界面:

技术分享图片

报错处理:

技术分享图片

重置:

技术分享图片

登陆成功:

技术分享图片

小 项 目 就 此 ok!

 

以上是关于Servlet开发的主要内容,如果未能解决你的问题,请参考以下文章

java.util.MissingResourceException: Can't find bundle for base name init, locale zh_CN问题的处理(代码片段

filter与servlet

VSCode插件开发全攻略代码片段设置自定义欢迎页

IOS开发-OC学习-常用功能代码片段整理

jsp初识servlet转发转发与重定向的比较

servlet和filter的区别