zoukankan      html  css  js  c++  java
  • 初识Jsp,JavaBean,Servlet以及一个简单mvc模式的登录界面

    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 block
    33             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     @Override
    26     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    27         this.doPost(request, response);
    28     }
    29 
    30     @Override
    31     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 block
    53             e.printStackTrace();
    54         }
    55         
    56     }
    57     
    58     
    59 }
    复制代码

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

    复制代码
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
     3   <display-name>web04</display-name>
     4   <welcome-file-list>
     5     <welcome-file>index.html</welcome-file>
     6     <welcome-file>index.htm</welcome-file>
     7     <welcome-file>index.jsp</welcome-file>
     8     <welcome-file>default.html</welcome-file>
     9     <welcome-file>default.htm</welcome-file>
    10     <welcome-file>default.jsp</welcome-file>
    11   </welcome-file-list>
    12   
    13   <servlet>
    14       <servlet-name>LoginServlet</servlet-name>
    15       <servlet-class>com.ningmeng.web.LoginServlet</servlet-class>
    16   </servlet>
    17   <servlet-mapping>
    18       <servlet-name>LoginServlet</servlet-name>
    19       <url-pattern>/login</url-pattern>
    20   </servlet-mapping>
    21 </web-app>
    复制代码

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

    复制代码
     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>Insert title here</title>
     8 </head>
     9 <body>
    10 <form action="login" method="post">
    11     <table>
    12         <tr>
    13             <th colspan="2">登录界面</th>
    14         </tr>
    15         <tr>
    16             <td>账号</td>
    17             <td><input type="text" id="username" name="username" value="${username}"></td>
    18         </tr>
    19         <tr>
    20             <td>密码:</td>
    21             <td><input type="text" id="password" name="password" value="${password}"></td>
    22         </tr>
    23         <tr>
    24             <td><input type="submit" value="提交"></td>
    25             <td><font color="red">${error}</font></td>
    26         </tr>
    27     </table>
    28 </form>
    29 </body>
    30 </html>
    复制代码

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

    复制代码
     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>Insert title here</title>
     8 </head>
     9 <body>
    10 <p>登录成功</p>
    11 当前用户:${currentUser.username}<br/>
    12 当前密码:${currentUser.password}<br/>
    13 </body>
    14 </html>
    复制代码

    登陆页面

    登录成功页面:

    登录失败页面:

    包的分类以及封装设计;

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

  • 相关阅读:
    内部类的作用
    zookeeper(1)-概述
    @RequestBody、@ResponseBody注解是如何将输入输出转换成json的
    HashMap之红黑树
    HashMap深入理解
    SpringBoot的四种定时任务
    Redis基础
    Redis内存回收机制
    高频面试题
    36. Valid Sudoku
  • 原文地址:https://www.cnblogs.com/sjqq/p/10061092.html
Copyright © 2011-2022 走看看