博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
初识Jsp,JavaBean,Servlet以及一个简单mvc模式的登录界面
阅读量:5023 次
发布时间:2019-06-12

本文共 8599 字,大约阅读时间需要 28 分钟。

1:JSP

JSP的基本语法:

指令标识page,include,taglib;
page指令标识常用的属性包含Language用来定义要使用的脚本语言;contentType定义JSP字符的编码和页面响应的MIME类型;pageEncoding:jsp页面的字符编码;
include指令<%@ include file="path"%>
静态包含,先包含,后编译处理;
<jsp:include page="要包含的文件">  动态包含,先编译处理,后包含;
脚本标识包含:jsp表达式,声明标识,脚本程序
jsp表达式<%= %>在里面输出一个变量或者一个具体的内容
声明标识<%! %>在里面定义全局变量,方法,类
脚本程序<% %>在里面定义局部变量,编写语句
jsp的注释
<!--  -->html注释,客户端可见
<%-- --%>jsp注释 客户端不可见
//java单行注释
/* */java多行注释
动作标识:
<jsp:include page="要包含的文件">  动态包含,先编译处理,后包含;
jsp跳转指令
<jsp:forward>
    <jsp:param value="" name="">
</jsp:forward>
服务器内部跳转,可带参数。
jap的九大内置对象,pageContext,request,response,session,application,config,out,page,exception;前五个熟练掌握
jsp四种数据保存范围
page:只在一个页面中保存数据
request:只在一个请求中保存数据
session:在一次会话范围内保存数据,仅供单个用户使用 
application:在整个服务器上保存数据,所有用户共享
response对象
response内置对象用于响应客户请求,向客户端输出信息
功能1自动刷新应用
功能2页面重定向应用,客户端跳转
功能3操作cookie应用
功能4cookie信息是存在客户端的,session信息是存在服务器的。
2: Javabean 组件引入
JavaBean 是使用 Java 语言开发的一个可重用的组件,在 JSP 开发中可以使用 JavaBean 减少重复代码,使整个 JSP 代码的开发更简洁。
jsp:useBean 创建 javabean
<jsp:useBeanid="实例化对象名称"scope="保存范围"class="类完整名称"/> Scope,一共有 page,request,session 和 application4 个属性范围,默认是 page;
jsp:setProperty 设置 javabean 属性值
<jsp:setPropertyproperty="属性名称"name="实例化对象的名称"value="属性值"param="参数名称"/> Property=”*” 自动匹配所有
jsp:getProperty 获取 javabean 属性值
<jsp:getPropertyproperty="属性名称"name="实例化对象的名称"/>
javabean 的保存范围
Javabean 的保存范围有 page,request,session.application,默认是 page;
javabean 删除
Page 范围:pageContext.removeAttribute(“javaBeanName”);

request 范围:request.removeAttribute(“javaBeanName”);

session 范围:session.removeAttribute(“javaBeanName”);

application 范围:application.removeAttribute(“javaBeanName”);

3:servlet 引入
1,在 Servlet 中获取 session,application 
2,客户端跳转 response.sendRedirect("目标地址"); 
3,服务器跳转:RequestDispatcher  rd=request.getRequestDispatcher("目标地址"); rd.forward(request,response);


第一首先创建数据库和数据表,我在这里使用了sqlyog图形化界面创建数据库和数据表。如下图所示

 

需要注意的就是数据库的名称和数据表的名称后面需要用,以及id设置为了自增。

第二开始开发,采用mvc的设计模式,分开进行设计;

首先package com.ningmeng.model;对User类进行封装数据。为了后面方便使用;注意是在不同的包中的

1 package com.ningmeng.model; 2  3 public class User { 4  5     private int id; 6     private String username; 7     private String password; 8      9     10     public User() {11         super();12     }13     public User(String username, String password) {14         super();15         this.username = username;16         this.password = password;17     }18     public int getId() {19         return id;20     }21     public void setId(int id) {22         this.id = id;23     }24     public String getUsername() {25         return username;26     }27     public void setUsername(String username) {28         this.username = username;29     }30     public String getPassword() {31         return password;32     }33     public void setPassword(String password) {34         this.password = password;35     }36     37     38 }

其次对连接数据库进行封装,方便后面调用连接数据库,这里封装好数据库并进行测试是否连接成功;注意是在不同的包中的;

1 package com.ningmeng.util; 2  3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6  7 public class DbUtil { 8      9     private String url="jdbc:mysql://localhost:3306/db_jsp";10     private String user="root";11     private String password="123456";12     private String driver="com.mysql.jdbc.Driver";13     14     public Connection getCon() throws Exception{15         Class.forName(driver);16         Connection con=DriverManager.getConnection(url, user, password);17         return con;18     }19     20     public static void getClose(Connection con) throws SQLException{21         if(con!=null){22             con.close();23         }24     }25     26     /*public static void main(String[] args) {27         DbUtil db=new DbUtil();28         try {29             db.getCon();30             System.out.println("测试连接数据库,连接成功");31         } catch (Exception e) {32             // TODO Auto-generated catch block33             e.printStackTrace();34             System.out.println("测试连接数据库,连接失败");35         }36         37     }*/38 }

对数据封装好,对连接数据库封装好,接下来封装对数据库的操作;注意是在不同的包中的;

1 package com.ningmeng.dao; 2  3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7  8 import com.ningmeng.model.User; 9 10 public class UserDao {11     12     public User login(Connection con,User user) throws SQLException{13         User resultUser=null;14         String sql="select * from user where username=? and password=?";15         PreparedStatement ps=con.prepareStatement(sql);//16         ps.setString(1, user.getUsername());17         ps.setString(2, user.getPassword());18         ResultSet rs=ps.executeQuery();19         if(rs.next()){20             resultUser=new User();21             resultUser.setUsername(rs.getString("username"));22             resultUser.setPassword(rs.getString("password"));23         }24         return resultUser;25     }26 }

封装好上面的接下来就进行主要代码的开发,使用Servlet对数据进行处理和操作;注意在不同的包中

1 package com.ningmeng.web; 2  3 import java.io.IOException; 4 import java.sql.Connection; 5  6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse;10 import javax.servlet.http.HttpSession;11 12 import com.ningmeng.dao.UserDao;13 import com.ningmeng.model.User;14 import com.ningmeng.util.DbUtil;15 16 public class LoginServlet extends HttpServlet{17 18     DbUtil db=new DbUtil();19     UserDao userDao=new UserDao();20     /**21      * 22      */23     private static final long serialVersionUID = 1L;24 25     @Override26     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {27         this.doPost(request, response);28     }29 30     @Override31     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {32         String username=request.getParameter("username");33         String password=request.getParameter("password");34         Connection con=null;35         try {36             User user=new User(username,password);37             con=db.getCon();38             User currentUser=userDao.login(con, user);39             if(currentUser==null){40                 //System.out.println("no");41                 request.setAttribute("error", "用户名或者密码错误");42                 request.setAttribute("username", username);43                 request.setAttribute("password", password);44                 request.getRequestDispatcher("login.jsp").forward(request, response);45             }else{46                 //System.out.println("yes");47                 HttpSession session=request.getSession();48                 session.setAttribute("currentUser",currentUser);49                 response.sendRedirect("main.jsp");50             }51         } catch (Exception e) {52             // TODO Auto-generated catch block53             e.printStackTrace();54         }55         56     }57     58     59 }

设置好Servlet的类文件后需要配置xml,代码如下。

1 
2
3
web04
4
5
index.html
6
index.htm
7
index.jsp
8
default.html
9
default.htm
10
default.jsp
11
12 13
14
LoginServlet
15
com.ningmeng.web.LoginServlet
16
17
18
LoginServlet
19
/login
20
21

最后进行主页面的开发,创建jsp页面。需要注意的是action的值是xml的<url-pattern>/login</url-pattern>中/login的值,这点需要注意;

1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2     pageEncoding="UTF-8"%> 3  4  5  6 
7 Insert title here 8 9 10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
登录界面
账号
密码:
${error}
28
29 30

最后一个为了优化,更好的可视化,一个登录成功的验证页面,如下:

1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2     pageEncoding="UTF-8"%> 3  4  5  6 
7 Insert title here 8 9 10

登录成功

11 当前用户:${currentUser.username}
12 当前密码:${currentUser.password}
13 14

登陆页面

登录成功页面:

登录失败页面:

包的分类以及封装设计;

 https://www.cnblogs.com/biehongli/p/6078740.html

转载于:https://www.cnblogs.com/sjqq/p/10061092.html

你可能感兴趣的文章
jQuery技巧大放送
查看>>
字符串转换成JSON的三种方式
查看>>
Hive时间函数笔记
查看>>
clojure-emacs-autocomplete
查看>>
一个自己写的判断2个相同对象的属性值差异的工具类
查看>>
10 华电内部文档搜索系统 search03
查看>>
[HIHO1149]回文字符序列(dp)
查看>>
[HDU1402]A * B Problem Plus(FFT)
查看>>
[CF803C] Maximal GCD(gcd,贪心,构造)
查看>>
逆时针旋转的矩阵变换
查看>>
第10周15/16/17
查看>>
【数据库】SQL两表之间:根据一个表的字段更新另一个表的字段
查看>>
四六级作文常见错误解析(转载)
查看>>
Tomcat
查看>>
./是当前目录 ../是当前的上一级目录。上上级就是../../一般绝对路径时候常用...
查看>>
linux支持FTP和SFTP服务【1】
查看>>
树的递归与非递归遍历方法
查看>>
每天一个Linux命令(6):rmdir命令
查看>>
oracle连接的三个配置文件(转)
查看>>
Vim配置文件(Vimrc)
查看>>