精华内容
下载资源
问答
  • 本文介绍的是如何使用MVC架构去组建我们的jsp+servlet+

    本文介绍的是如何使用MVC架构去实现jsp+servlet+javabean连接数据库


    首先我们应该了解什么是MVC:

    MVC包括三个部分 :

    ①View:由各种JSP页面组成。

    ②Controller:由各种Servlet组成,Controller就是将View和Model来进行匹配,用什么Model实现,调用哪个View来显示。

    ③Model:由各种javabean组成,也是MVC的核心,


    下面就是简单的用MVC架构去实现一个JSP(View)+Servlet(Controller)+javabean(Model)实现MySql查询功能的Demo。

                                                                                                                                                                                   

    安装好如下软件:

    1.MySQL

    2.MyEclipse

    3.下载好MySQL 的JDBC 的连接驱动jar       url:http://pan.baidu.com/s/1sjBCfZR

    一、创建数据库。

    1.我们使用MySQL中的test数据库来创建需要测试的表:

         在test数据库下创建名字为testTable的表,设置ID为主键,name等属性。点击apply,至此就完成了数据库的创建。然后给定一些值如下4所示:

                                


                


                            

                         

                    


    二、创建Web Project

    1.打开MyEclipse -> File-> new -> Web Project 创建完后在src下创建包beans和ServletDB最后得到如下的文件结构:


                

    2.编写beans

      在beans包下创建两个javabeans分别为DAL.java 和 DB.java

    DB.java  注意MySql用户名和密码是你本机MySql的 用户名和密码与以下的代码可能不一样需要修改。

    package beans;
    
    import java.sql.*;
    
    public class DB {
    	static String driver = "com.mysql.jdbc.Driver";
    	static String url = "jdbc:mysql://127.0.0.1:3306/test";
    	static String user = "root";//连接时的用户名
    	static String password = "root";//连接时的密码
    	static Connection aConnection;
    	
    	public static Connection connectDB(){
    		try{
    			Class.forName(driver);
    			aConnection = DriverManager.getConnection(url,user,password);
    			if(aConnection.isClosed())
    			{
    				System.out.print("Succeeded!");
    			}
    		}catch(ClassNotFoundException e){
    			System.out.println(e);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		
    		return aConnection;
    	}
    	
    	public static ResultSet executeQuery(String sqlx) throws SQLException{
    		connectDB();
    		ResultSet rs = null;
    		Statement stmt =  aConnection.createStatement();
    		try {
    		 rs = stmt.executeQuery(sqlx);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return rs;
    	}
    
    }
    


    DAL.java

    package beans;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class DAL {
    
    	public static String sqlx="";
    	
    	public  static String testQueryByID(String ID){
    		ResultSet rs = null;
    		String result = "";
    		sqlx = "SELECT * FROM testtable where ID = '"+ID+"'";
    		try {
    			rs = DB.executeQuery(sqlx);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		try {
    			while(rs.next()){
    				result = result +"ID:"+rs.getString("ID")+"  Name:"+rs.getString("name")+"</br>";	
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		
    		return result;
    	} 
    
    	
    
    
    }
    

    3.编写servlet

            File-> new -> servlet->确定包名为servletDB然后取名为test就行了
        重要的是在本test方法中加入调用beans方法的语句。

    test.java

    package servletDB;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import beans.DAL;
    
    public class test extends HttpServlet {
    
    	/**
    	 * Constructor of the object.
    	 */
    	public test() {
    		super();
    	}
    
    	/**
    	 * Destruction of the servlet. <br>
    	 */
    	public void destroy() {
    		super.destroy(); // Just puts "destroy" string in log
    		// Put your code here
    	}
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		response.setContentType("text/html");
    		String ID = request.getParameter("ID");//获取传过来的ID
    		String result = "";
    		result = DAL.testQueryByID(ID);//调用DAL中的testQueryByID方法并且将get过来的ID传过去
    		PrintWriter out = response.getWriter();
    		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
    		out.println("<HTML>");
    		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
    		out.println("  <BODY>");
    		out.print(result);
    		out.println("  </BODY>");
    		out.println("</HTML>");
    		out.flush();
    		out.close();
    	}
    
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		response.setContentType("text/html");
    		PrintWriter out = response.getWriter();
    		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
    		out.println("<HTML>");
    		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
    		out.println("  <BODY>");
    		out.print("    This is ");
    		out.print(this.getClass());
    		out.println(", using the POST method");
    		out.println("  </BODY>");
    		out.println("</HTML>");
    		out.flush();
    		out.close();
    	}
    
    
    	public void init() throws ServletException {
    		// Put your code here
    	}
    
    }
    

    4.配置Servlet

        进入WebRoot-〉Web-INF -〉web.xml添加如下代码

      <servlet-name>test</servlet-name>
      <servlet-class>servletDB.test</servlet-class>
     </servlet>
     <servlet-mapping>
      <servlet-name>test</servlet-name>
      <url-pattern>/servletDB/test</url-pattern>

    5.添加MySQL的Driver的jar支持

         将下载好的mysql-connector-java-5.1.30-bin.jar 放在好找的地方

         右击项目->Properties->Java Build Path->Libraries->Add  External  选择下载好的jar就行了

            

    6.写index.jsp

      将body中的代码替换为如下代码

      <form action="servletDB/test" method="get">
    
          请输入用户ID:<input type="text" name="ID"><br>
    
                <input type="submit" value="提交">
    
        </form>

    三、测试

    1.点击Run


    2.输入测试ID 1


     成功的获取到了test数据库testtable中ID为1的数据。

    展开全文
  • 首先项目的结构及所用到的jar包如...一、数据库和数据表的创建 1.建库语句: create database test; 2.建表语句: CREATE TABLE `t_users` (  `user_name` varchar(20) COLLATE utf8_unicode_ci NOT NULL,  `p...

    首先项目的结构及所用到的jar包如图:

    主要用到jdbc和jstl的jar包,大家可自行去相应网站下载

    一、数据库和数据表的创建

    1.建库语句:

    create database test;

    2.建表语句:

    CREATE TABLE `t_users` (
      `user_name` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
      `password_md5` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
      `email` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
      PRIMARY KEY (`user_name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

    二、eclipse配置数据库连接池

    首先创建一个动态web项目

    1.把jdbc所用到的jar包复制到/web-inf/lib目录下,如图:

    2.在meta-inf下创建一个context.xml文件,并输入以下代码:

    <?xml version="1.0" encoding="UTF-8"?>
    <Context path="/test" reloadable="true">
        <!-- 配置数据源 -->
        <Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="100"
        maxldle="30" maxWait="10000" name="jdbc/test" password="root" type="javax.sql.DataSource"
        url="jdbc:mysql://localhost:3306/test?autoReconnect=true" username="root">
        </Resource>
    </Context>

     

    <Resource属性说明>

    1)name:指定Resource的JNDI名字。

    2)auth:指定管理Resource的Manager,它有两个可选值:Container和Application。Container表示由容器来创建和管理Resource,Application表示由web应用来创建和管理Resource。

    3)type: 指定Resource的Java类名。

    4)username:指定连接数据库的用户名。

    5)password:指定连接数据库的口令。

    6)driverClassName:指定连接数据库的JDBC驱动器中的Driver实现类的名字。

    7)url:指定连接数据库的URL,127.0.0.1是要连接的数据库服务器的ip,3306是数据库服务器端口,BookDB是数据库名称。

    8)maxActive:指定数据库连接池中处于活动状态的数据库连接的最大数目,取值为0,表示不受限制。

    9)maxIdle:指定数据库连接池中处于空闲状态的数据库连接的最大数目,取值为0,表示不受限制。

    10)maxWait:指定数据库连接池中的数据库连接处于空闲状态的最长时间(以毫秒为单位),超过这一时间,将会抛出异常。取值为-1,表示可以无限期等待。

     

    3.配置web.xml

    在<web-app></web-app>之间加入如下代码:

      <resource-ref>
        <description>MySQL DBCP</description>
        <res-ref-name>jdbc/test</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
      </resource-ref>

     

    <resource-ref>属性说明:

    1)description:对所引用的资源的说明。

    2)res-ref-name:指定所引用资源的JNDI名字,与<Resource>元素中的name属性对应。

    3)res-type:指定所引用资源的类名,与<Resource>元素中的type属性对应。

    4)res-auth:指定管理所引用资源的Manager,与<Resource>元素中的auth属性对应。

     

    4.配置server.xml文件

    在tomcat\conf下找到server.xml文件,在<GlobalNamingResources></GlobalNamingResources>之间加入如下内容:

    <Resource name="jdbc/test" auth="Container"
                  type="javax.sql.DataSource"
                  driverClassName="com.mysql.jdbc.Driver"
                  url="jdbc:mysql://localhost:3306/test?characterEncodering=utf-8"
                  username="root"
                  password="root"
                  maxActive="200"
                  maxIdle="50"
                  maxWait="3000"/>

    在<Host></Host>之间加入如下内容:

     <Context docBase="D:\eclipse-workspace\loginRegister\WebContent" 
            path="/LoginRegister" reloadable="true" source="org.eclipse.jst.j2ee.server:test">
             <ResourceLink global="jdbc/test" name="jdbc/test" type="javax.sql.DataSource"/>
            </Context>

    <Context>属性说明:

    1)docBase:指定Web应用的文件路径,可以给定绝对路径,也可以给定相对于<Host>的appBase属性的相对路径。如果Web应用采用开放目录结构,则指定Web应用的根目录;如果Web应用是个WAR文件,则指定WAR文件的路径。

    2)path:指定访问该Web应用的URL入口。

    3)reloadable:如果这个属性为true,Tomcat服务器会在运行状态下监视classes下文件的改动和WEB-INF/web.xml文件的改动,监测到文件被改动,服务器会自动重新加载Web应用。

    4)source:

    <ResourceLink>属性说明:

    1)global:被连接的连接全局资源的名称。

    2)name:创建的资源连接的名称,相对于java:comp/env context。

    3)type:当web应用在该资源连接上进行查找时,返回的Java类名的全称。

    至此数据库连接池配置完

    三、实现访问数据库的DBServlet类

    实现代码如下:

    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;

    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.sql.DataSource;

    /**
     * Servlet implementation class DBServlet
     */
    @WebServlet("/DBServlet")
    public class DBServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
        //用于连接数据库的Connection对象
        protected Connection conn=null;
        protected ResultSet execSQL(String sql,Object... args) throws Exception{
            //建立Preparedment对象
            PreparedStatement pStmt=conn.prepareStatement(sql);
            //为pStmt对象设置SQL参数值
            for(int i=0;i<args.length;i++) {
                pStmt.setObject(i+1,args[i]);  //设置SQL参数值
            }
            pStmt.execute();  //执行SQL语句
            //返回结果集,如果执行的SQL语句不返回结果集,则返回null
            return pStmt.getResultSet();
        }
        //核对用户输入的验证码是否合法
        protected boolean checkValidationCode(HttpServletRequest request,
                String validationCode) {
            //从httpSession中获得系统随机生成的验证码
            String validationCodeSession=(String)request.getSession()
                    .getAttribute("validation_code");
            //如果获得的验证码为null,说明验证码过期,用户必须刷新客户端页面,以获得新的验证码
            if(validationCodeSession==null) {
                //设置result.jsp需要的结果信息
                request.setAttribute("info","验证码过期");
                //设置login.jsp需要的错误信息
                request.setAttribute("codeError","验证码过期");
                return false;
            }
            //将用户输入的验证码和系统随机生成的验证码进行比较
            if(!validationCode.equalsIgnoreCase(validationCodeSession)) {
                request.setAttribute("info","验证码不正确");
                request.setAttribute("codeError","验证码不正确");
                return false;
            }
            return true;
        }
        
        /**
         * @see HttpServlet#HttpServlet()
         */
        public DBServlet() {
            super();
            // TODO Auto-generated constructor stub
        }

        /**
         * @see Servlet#destroy()
         */
        public void destroy() {
            // TODO Auto-generated method stub
            try {
                //如果数据库连接正常打开则关闭
                if(conn!=null)
                    conn.close();
            }catch(Exception e) {
                
            }
        }

        /**
         * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
         */
        protected void service(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // TODO Auto-generated method stub
            try {
                //如果conn为null,打开数据库连接
                if(conn==null) {
                    //创建上下文对象ctx
                    Context ctx=new InitialContext();
                    //TODO
                    //获取数据源
                    DataSource ds=(DataSource)ctx.lookup("java:/comp/env/jdbc/test");
                    conn=ds.getConnection();  //为Connection对象赋值
                }
            }catch(Exception e) {
                
            }
        }
    }
     

    四、实现图形验证码

    代码如下:

    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.Random;

    import javax.imageio.ImageIO;
    import javax.servlet.ServletException;
    import javax.servlet.http.*;

    public class ValidationCode extends HttpServlet {
        //图形验证码的字符集合,系统将随机从这个字符串中选择一些字符作为验证码
        private static String codeChars=
                "@#$%^&*123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        //返回一个随机颜色(Color对象)
        private static Color getRandomColor(int minColor,int maxColor) {
            Random random=new Random();
            //保存minColor最大不会超过255
            if(minColor>255)
                minColor=255;
            //保存maxColor最大不会超过255
            if(maxColor>255)
                maxColor=255;
            //获得hong、绿、蓝三种颜色的随机颜色值
            int red=minColor+random.nextInt(maxColor-minColor);
            int green=minColor+random.nextInt(maxColor-minColor);
            int blue=minColor+random.nextInt(maxColor-minColor);
            return new Color(red,green,blue);
        }
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response) 
                throws ServletException, IOException {
            // TODO Auto-generated method stub
            //获取验证码集合的长度
            int charsLength=codeChars.length();
            //关闭客户端浏览器的缓冲区
            response.setHeader("ragma","No-cache");
            response.setHeader("Cache-Control","no-cache");
            response.setDateHeader("Expires",0);
            //设置图形验证码的长和宽
            int width=90,height=20;
            BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
            //获得用于输出文字的Graphics对象
            Graphics g=image.getGraphics();
            Random random=new Random();
            g.setColor(getRandomColor(180,250));  //随机设置要填充的颜色
            g.fillRect(0,0, width, height);  //填充图形背景
            //设置初始字体
            g.setFont(new Font("Times New Roman",Font.ITALIC,height));
            g.setColor(getRandomColor(120,180));  //随机设置字体颜色
            //用于保存最后随机生成的验证码
            StringBuilder validationCode=new StringBuilder();
            //验证码的随机字体
            String[] fontNames= {"Times New Roman","Book antiqua","Arial"};
            for(int i=0;i<3+random.nextInt(3);i++) {  //随机生成3-5个验证码
                //随机设置当前验证码的字符的字体
                g.setFont(new Font(fontNames[random.nextInt(3)],Font.ITALIC,height));
                //随机获得当前验证码的字符
                char codeChar=codeChars.charAt(random.nextInt(charsLength));
                validationCode.append(codeChar);
                //随机设置当前验证码字符的颜色
                g.setColor(getRandomColor(10,100));
                //在图形上输出验证码字符,x和y都是随机生成的
                g.drawString(String.valueOf(codeChar),
                        16*i+random.nextInt(7),height-random.nextInt(6));
            }
            //获得HttpSession对象
            HttpSession session=request.getSession();
            //设置5分钟失效
            session.setMaxInactiveInterval(5*60);
            //将验证码保存在session对象中
            session.setAttribute("validation_code",validationCode.toString());
            g.dispose();  //关闭Graphics对象
            OutputStream os=response.getOutputStream();
            //以jpeg格式向客户端发送图形验证码
            ImageIO.write(image,"JPEG",os);
        }
    }
     

    五、实现注册系统

    1.实现注册Servlet类

    Register.java代码如下:

    import java.io.IOException;

    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    public class Register extends DBServlet{

        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // TODO Auto-generated method stub
            String userName=null;
            if(request.getParameter("login")!=null) {
                response.sendRedirect("login.jsp");
                return;
            }try {
                super.service(request, response);
                userName=request.getParameter("username");
                String password=request.getParameter("password");
                String email=request.getParameter("email");
                String validationCode=request.getParameter("validation_code");
                if(userName==null||password==null||validationCode==null)
                    return;
                if(userName.equals("")||password.equals("")||validationCode.equals(""))
                    return;
                userName=new String(userName.getBytes("ISO-8859-1"),"UTF-8");
                request.setAttribute("page","register.jsp");
                if(!checkValidationCode(request,validationCode))
                    return;
                email=(email==null)?"":email;
                String _password=password;
                String sql="insert into t_users(user_name,password_md5,email) values(?,?,?)";
                execSQL(sql,userName,_password,email);
                request.setAttribute("info","用户注册成功!");
            }catch(Exception e) {
                System.out.println(e.getMessage());
                e.printStackTrace();
                request.setAttribute("info",userName+"已经被使用!");
            }finally {
                RequestDispatcher rd=request.getRequestDispatcher("result.jsp");
                rd.forward(request,response);
            }

        }
        
    }

    2.实现这测系统主界面

    register.jsp代码如下:

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <script type="text/javascript">
    function checkRegister(){
        var username=document.getElementById("username");
        if(username.value==""){
            alert("用户名不能为空!");
            username.focus();
            return;
        }
        var password=document.getElementById("password");
        if(password.value==""){
            alert("必须输入密码!");
            password.focus();
            return;
        }
        var repassword=document.getElementById("repassword");
        if(repassword.value!=password.value){
            alert("两次输入的密码不一致!");
            repassword.focus();
            return;
        }
        var email=document.getElementById("email");
        if(email.value!==""){
            if(!checkEmail(email))
                return;
        }
        var validation_code=document.getElementById("validation_code");
        if(validation_code.value==""){
            alert("验证码b不能为空");
            validation_code.focus();
            return;
        }
        register_form.submit();
    }
    function checkEmail(email){
        var email=email.value;
        var pattern =/^([a-zA-Z0-9._-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
        flag=pattern.test(email);
        if(!flag){
            alert("email格式不正确");
            email.focus();
            return false;
        }
        return true;
    }
    function refresh(){
        var img=document.getElementById("img_validation_code")
        img.src="validation_code?"+Math.random();
    }
    </script>
    <meta charset="utf-8">
    <title>注册页面</title>
    </head>
    <body>
    <form name="register_form" action="register" method="post">
    <span class="require">*</span>用户名:
    <input type="text" id="username"  name="username" size="30" maxLength="30"/><br/>
    <span class="require">*</span>密码:
    <input type="password" id="password" name="password" size="30" maxLength="30"/><br/>
    <span class="require">*</span>请再次输入密码:
    <input type="password" id="repassword" name="repassword" size="30" maxLength="30"/><br/>
    邮箱地址:
    <input type="text" id="email" name="email" size="30" maxLength="30"/><br/>
    <span class="require">*</span>验证码:
    <input type="text" id="validation_code" name="validation_code" 
    style="width:60px;margin-top:2px" size="30" maxLength="30"/>
    <img id="img_validation_code" src="validation_code"/>
    <input type="button" value="刷新"  οnclick="refresh()"/><br/>
    <input type="button" value="注册"  οnclick="checkRegister()"/>
    <input type="submit" value="登陆"  name="login"/>
    </form>
    </body>
    </html>

     

    3.实现结果jsp页面

    result.jsp代码如下:

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>结果页</title>
    </head>
    <body>
    <form name="form" action="${requestScope.page}" method="post"/>
    <script type="text/javascript">
      <c:if test="${requestScope.info!=null}">
        alert('${requestScope.info}');
        form.submit();
      </c:if>
    </script>
    </body>
    </html>

    六、实现登陆系统

    1.实现登陆servlet

    Login.java代码如下:

    import java.io.IOException;
    import java.sql.ResultSet;

    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    public class Login extends DBServlet{

        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // TODO Auto-generated method stub
            if(request.getParameter("register")!=null) {
                response.sendRedirect("register.jsp");
                return;
            }
            String page="login.jsp";
            String userName="";
            try {
                super.service(request, response);
                userName=request.getParameter("username");
                String password=request.getParameter("password");
                String validationCode=request.getParameter("validation_code");
                if(userName==null||password==null||validationCode==null)
                    return;
                if(userName.equals("")||password.equals("")||validationCode.equals(""))
                    return;
                userName=new String(userName.getBytes("ISO-8859-1"),"UTF-8");
                if(!checkValidationCode(request,validationCode))
                    return;
                String sql="select user_name,password_md5 from t_users where user_name=?";
                ResultSet rs=execSQL(sql,new Object[]{userName});
                if(rs.next()==false) {
                    request.setAttribute("userError",userName+"不存在");
                }else {
                    if(!rs.getString("password_md5").equals(password))
                        request.setAttribute("passwordError","密码不正确");
                    else page="WEB-INF/main.jsp";
                    //TODO
                }
            }catch(Exception e) {
            }finally {
                request.setAttribute("username",userName);
                RequestDispatcher rd=request.getRequestDispatcher(page);
                rd.forward(request,response);
            }
        }
        
    }

    在web-inf下创建main.jsp

    之所以把main.jsp放到web-inf目录中,是因为这个目录中的文件在客户端浏览器是无法直接访问的,一般需要验证才能访问的页面都应该放在该目录或其子目录中

    main.jsp的代码如下:

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>登陆成功</title>
    </head>
    <body>
    登陆成功
    </body>
    </html>

    2.实现登陆系统主界面

    login.jsp代码如下:

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>登陆页面</title>
    <script type="text/javascript">
    function checkLogin(){
        var username=document.getElementById("username");
        if(username.value==""){
            alert("用户名不能为空!");
            username.focus();
            return;
        }
        var password=document.getElementById("password");
        if(password.value==""){
            alert("必须输入密码!");
            password.focus();
            return;
        }
        var validation_code=document.getElementById("validation_code");
        if(validation_code.value==""){
            alert("验证码不能为空");
            validation_code.focus();
            return;
        }
        login_form.submit();
    }
    function refresh(){
        var img=document.getElementById("img_validation_code")
        img.src="validation_code?"+Math.random();
    }
    </script>
    </head>
    <body>
    <form name="login_form" action="login" method="post">
      账号:
      <input type="text" id="username" value="${requestScope.username}"
      name="username" size="30" maxLength="30"/>
      <font color="#FF0000">${requestScope.userError}</font><br/>
      密码:
      <input type="password" id="password" name="password" size="30"/>
      <font color="#FF0000">${requestScope.passwordError}</font><br/>
      验证码:
      <input type="text" id="validation_code" name="validation_code" 
      style="width:60ox;margin-top:2px;" size="30" maxLength="30"/>
      <font color="#FF0000">${requestScope.codeError}</font>
      <img id="img_validation_code" src="validation_code"/>
      <input type="button" value="刷新" οnclick="refresh()"/><br/>
      <input type="button" value="登陆" name="login" οnclick="checkLogin()"/>
      <input type="submit" value="注册" name="register"/>
    </form>
    </body>
    </html>

    最后elipse启动tomcat即可运行

     

    展开全文
  • 前一篇文章讲解了MyEclipse环境下创建JSP注册表页面,并通过Servlet获取所提交的数据。这一篇文章将讲解MySQL数据库基本操作,并分享Servlet链接数据库的方法。基础性文章,希望对读者有所帮助 ,尤其是我的学生。

    本系列文章是作者暑假给学生进行实训分享的笔记,主要介绍MyEclipse环境下JSP网站开发,包括JAVA基础、网页布局、数据库基础、Servlet、前端后台数据库交互、DAO等知识。
    前一篇文章讲解了MyEclipse环境下创建JSP注册表页面,并通过Servlet获取所提交的数据。这一篇文章将讲解MySQL数据库基本操作,并分享Servlet链接数据库的方法。基础性文章,希望对读者有所帮助 ,尤其是我的学生。

    参考前文:
    Java+MyEclipse+Tomcat (一)配置过程及jsp网站开发入门
    Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交
    Java+MyEclipse+Tomcat (三)配置MySQL及查询数据显示在JSP网页中
    Java+MyEclipse+Tomcat (四)Servlet提交表单和数据库操作
    Java+MyEclipse+Tomcat (五)DAO和Java Bean实现数据库和界面分开操作
    Java+MyEclipse+Tomcat (六)详解Servlet和DAO数据库增删改查操作

    前文:
    [JSP暑假实训] 一.MyEclipse安装及JAVA基础知识
    [JSP暑假实训] 二.JSP网站创建及Servlet实现注册表单提交、计算器运算


    一.配置MySQL

    首先下载mysql-5.0.96-winx64,安装过程如下图所示。

    1.安装MySQL 5.0

    2.选择手动配置、服务类型、通用多功能型和安装路径

    3.设置数据库访问量连接数为15、端口为3306(代码中设置URL用到)、编码方式为utf-8

    4.设置默认超级root用户的用户名和密码,最后安装成功


    二.MySQL基本操作

    安装MySQL 5.0成功后,进行数据库的简单操作。

    1.运行MySQL输入默认用户密码123456,并创建数据库hcp(火车票),使用数据库。

    --创建数据库
    create database hcp;
    --使用数据库
    use database hcp;
    

    2.创建表info(详情表),包括序号、起始地、目的地、车次、出发时间、价格、备注。

    CREATE TABLE `info` (
      `id` int(11) NOT NULL auto_increment,
      `start` varchar(40) default NULL,
      `end` varchar(40) default NULL,
      `name` varchar(40) default NULL,
      `starttime` datetime default NULL,
      `price` float default NULL,
      `otuer` varchar(100) default NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    其中,id为自增整数,并且为主键,其他的包括varchar类型、时间类型、浮点型等。

    3.显示表结构,使用语句desc info。

    4.向信息表中插入数据并显示查询的数据。

    INSERT INTO `info` VALUES ('1', 'guiyang', 'kunming', 'T61', '2019-06-29 12:00:00', '56', NULL);
    INSERT INTO `info` VALUES ('2', 'guiyang', 'kaili', 'T88', '2019-06-29 12:00:00', '26', NULL);
    INSERT INTO `info` VALUES ('3', '贵阳', '西安', 'T98', '2019-07-04 12:00:00', '126', NULL);
    INSERT INTO `info` VALUES ('4', '贵阳', '武汉', 'T34', '2019-07-04 12:00:00', '86', NULL);
    INSERT INTO `info` VALUES ('5', '贵定', '西安', 'T51', '2019-07-04 12:00:00', '134', NULL);
    INSERT INTO `info` VALUES ('6', '昆明', '武汉', 'T21', '2019-06-29 12:00:00', '123', NULL);
    

    通过 “select * from info;” 查询数据,得到如下图所示结果:

    此时MySQL操作数据库基本讲解结束,你同样可以实现数据库的增删改查、事务、存储过程等操作,建议安装可视化的软件来替代黑框。


    三.Navicat for MySQL可视化操作数据库

    1.运行该软件,点击“连接”按钮新建一个连接。

    2.在“新建连接”中输入自定义连接名,数据库用户名为“root”,密码“123456”。

    3.选中数据库“hcp”,可以对表进行查看、设计、新建、删除、导入、导出等操作。

    其中,设计表可以修改表的内容,或者添加新的字段,如下图所示:

    双击表,可以查看数据如下所示:

    4.选中数据库“hcp”,右键“转储SQL文件”,将整个数据库的内容导出sql文件。

    导出的SQL文件内容如下:

    /*
    Navicat MySQL Data Transfer
    
    Source Server         : 20190704
    Source Server Version : 50622
    Source Host           : localhost:3306
    Source Database       : hcp
    
    Target Server Type    : MYSQL
    Target Server Version : 50622
    File Encoding         : 65001
    
    Date: 2019-07-04 23:51:16
    */
    
    SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for `info`
    -- ----------------------------
    DROP TABLE IF EXISTS `info`;
    CREATE TABLE `info` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `start` varchar(40) DEFAULT NULL,
      `end` varchar(40) DEFAULT NULL,
      `name` varchar(40) DEFAULT NULL,
      `starttime` datetime DEFAULT NULL,
      `price` float DEFAULT NULL,
      `otuer` varchar(100) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of info
    -- ----------------------------
    INSERT INTO `info` VALUES ('1', 'guiyang', 'kunming', 'T61', '2019-06-29 12:00:00', '56', null);
    INSERT INTO `info` VALUES ('2', 'guiyang', 'kaili', 'T88', '2019-06-29 12:00:00', '26', null);
    INSERT INTO `info` VALUES ('3', '贵阳', '西安', 'T98', '2019-07-04 12:00:00', '126', null);
    INSERT INTO `info` VALUES ('4', '贵阳', '武汉', 'T34', '2019-07-04 12:00:00', '86', null);
    INSERT INTO `info` VALUES ('5', '贵定', '西安', 'T51', '2019-07-04 12:00:00', '134', null);
    INSERT INTO `info` VALUES ('6', '昆明', '武汉', 'T21', '2019-06-29 12:00:00', '123', null);
    

    四.JDBC连接数据库基础

    为统一并简化Java语言操作各种数据库,Sun公司提供了JDBC框架,用于所有Java应用以统一的方式连接数据库。JDBC(Java DataBase Connectivity,Java数据库连接)通过使用数据库厂家提供的数据库JDBC驱动器类,可以连接到任何流程的数据库上。

    1.加载JDBC驱动程序(MySQL驱动)

    Class.forName("com.mysql.jdbc.Driver") ;  
    

    2.提供JDBC连接的URL

    //驱动程序名   
    String driverName = "com.mysql.jdbc.Driver";  
    //数据库用户名   
    String userName = "root";  
    //密码   
    String userPasswd = "123456";  
    //数据库名   
    String dbName = "hcp";  
    //表名   
    String tableName = "info";  
    //联结字符串   
    String url = "jdbc:mysql://localhost:3306/" + dbName + "?user="  
            + userName + "&password=" + userPasswd;
    

    3.创建数据库的连接

    Connection connection = DriverManager.getConnection(url);  
    

    4.创建一个Statement
    要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3种类型:

    • 执行静态SQL语句。通常通过Statement实例实现。
    • 执行动态SQL语句。通常通过PreparedStatement实例实现。
    • 执行数据库存储过程。通常通过CallableStatement实例实现。

    5.执行SQL语句
    Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和execute
    1).ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。

    2).int executeUpdate(String sqlString):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等。

    3).execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。

    6.处理结果
    两种情况:执行更新返回的是本次操作影响到的记录数、执行查询返回的结果是一个ResultSet对象。

    • ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问。
    • 使用结果集(ResultSet)对象的访问方法获取数据:
    // 此方法比较高效  列是从左到右编号的,并且从列1开始 
    while(rs.next()){   
             String name = rs.getString("name") ;   
        	 String pass = rs.getString(1) ; 
    } 
    

    7.关闭JDBC对象

    //释放连接方法 con ps rs
    public static void release(Connection con,Statement ps,ResultSet rs){
    	try{
    	if(rs!=null){ // 关闭记录集
    		rs.close();
    	}
    	if(ps!=null){ // 关闭声明 
    		ps.close();
    	}
    	if(con!=null){ // 关闭连接对象 
    		con.close();
    	}
    	}catch (Exception e) {
    		e.printStackTrace();
    	}
    }
    

    五.Servlet连接显示数据库

    下面介绍最终Servlet连接本地数据库并显示内容的实验,步骤如下:

    1.新建“test0704_web”工程,其文件夹如下图所示。

    2.修改“index.jsp”代码如下所示:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'index.jsp' starting page</title>
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	<!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
      </head>
      
      <body>
        <div align="center">
        		<img src="imgs/bg.jpg" height="200" width="80%" /><br />
        		<hr width="80%" color="red" size="3" />
        		<h2>火车票查询</h2>
        		
        		<table border="2" width="80%">
        			<tr>
        				<td>序号</td><td>起始地</td><td>目的地</td>
        				<td>车次</td><td>时间</td><td>价格</td><td>备注</td>
        			</tr>
        		</table>
        	</div>
      </body>
    </html>
    

    此时运行结果如下图所示:

    3.在JSP文件中增加JAVA连接数据库的代码,放置<% %>之间,需要注意while循环多次遍历显示 < tr > < td > 布局。
    PS:增加 java.sql.* 扩展包

    <%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'index.jsp' starting page</title>
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	<!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
      </head>
      
      <body>
        <div align="center">
        		<img src="imgs/bg.jpg" height="200" width="80%" /><br />
        		<hr width="80%" color="red" size="3" />
        		<h2>火车票查询</h2>
        		
    	    		<!-- 添加JAVA链接数据库的代码 -->
    	    		<%
    	    			//驱动的名称
    	    			String driverName = "com.mysql.jdbc.Driver";
    	    			//数据库用户名密码
    	    			String userName = "root";
    	    			String userPwd = "123456";
    	    			//数据库名字
    	    			String dbName = "hcp";
    	    			//表名
    	    			String tableName = "info";
    	    			//拼接字符串链接数据库
    	    			String url = "jdbc:mysql://localhost:3306/" + dbName + "?user="
    	    					+ userName + "&password=" +userPwd;
    	    			//链接数据库
    	    			Class.forName("com.mysql.jdbc.Driver").newInstance();
    	    			
    	    			//SQL查询
    	    			ResultSet re;
    	    			Connection con = DriverManager.getConnection(url);
    	    			Statement statement = con.createStatement();
    	    			String sql = "select * from " + tableName;
    	    			System.out.println(sql);
    	   				re = statement.executeQuery(sql);
    	    			
    	    		%>
        		
        		<table border="2" width="80%">
        			<tr>
        				<td>序号</td><td>起始地</td><td>目的地</td>
        				<td>车次</td><td>时间</td><td>价格</td><td>备注</td>
        			</tr>
        			
        			<%
        				while (re.next()) {
        			
        			%>
        			<tr>
        				<td><% out.print(re.getString(1)); %></td>
        				<td><% out.print(re.getString(2)); %></td>
        				<td><% out.print(re.getString(3)); %></td>
        				<td><% out.print(re.getString(4)); %></td>
        				<td><% out.print(re.getString(5)); %></td>
        				<td><% out.print(re.getString(6)); %></td>
        				<td><% out.print(re.getString(7)); %></td>
        			</tr>
        			
        			<%
        				}
        				
        				//关闭连接
    			        re.close();  
    			        statement.close();  
    			        con.close();  
        			%>
        			
        		</table>
        	</div>
      </body>
    </html>
    

    4.运行结果如下所示。


    最近连续十多天给学生们分享暑假实训,JSP网站开发,周末不间断。大周末深夜凌晨办公室备课,为了什么?回想三年来,挺感谢学生们的厚爱的,无以回报,只希望自己能好好分享知识,认真教好每一位学生,将心比心,也望自己博士学成归来,能继续教书育人,感恩家乡和女神。

    (By:Eastmount 2019-07-04 深夜1点 http://blog.csdn.net/eastmount/)

    展开全文
  • FLex调用servlet连接数据库

    千次阅读 2009-05-07 13:24:00
    <!--v/:* {behavior:url(#default#VML);}o/:* {behavior:url(#default#VML);}w/:* {behavior:url(#default#VML);}.shape {behavior:url(#...}-->FLex调用servlet连接数据库前言Flex 最重要的部分之一就是和服务器

    FLex调用servlet连接数据库

    Flex 最重要的部分之一就是和服务器以及数据库的通讯。Flex 提供了三个类来与服务器通讯: HTTPServiceRemoteObject 以及WebService

    HTTPService 类提供了使用超文本传输协议(HTTP)与服务器通讯的方式。一个Flex 应用程序可以使用GET 或者POST 请求来发送数据到一个服务器并且处理这个请求返回的 XML 或者字符串。使用HTTPService 类,你可以与PHP 页面,ColdFusion 页面,JavaServe页面( jsp),Java servletRuby onRails, 以及ASP 动态网页通讯。

    Java Servlet通讯

    由于本人是Java出身,所以这里就来讨论一下与Servlet的通讯方式。

    建立数据库

    这里选用MySql数据库,首先建立如下的数据库表

    写服务器端Java代码

    Servlet

    数据库连接

     

    DAO

     

    PODO

     

    部署TOMCAT

    这一部分略过,如果觉得手动部署比较麻烦,我们可以使用MyEclipse插件。值得注意的是web.xml文件的配置,一定要正确配置servlet,下面我给出正确示例

    编写FLEX MXML

     

    代码重点解释

    1.       creationComplete="send()"

    表明当这个Flex应用创建完成时,就发送这个HttpServer请求给Servlet

    2.     url=http://localhost:8080/servlet/servlet/GetProductServlet

    第一个servlet是我们服务器端的工程名

    第二个serveltservlet所在包名

    GetProductServlet使我们真正的servlet名称

    3.       dataProvider="{service.lastResult.products.product}"

    a. lastResult:在做了一个呼叫到一个HTTPService 之后,数据会从服务返回,并被放置到服务组件所包含的lastResult 对象。

    b. 由于我们返回的是一个XML数据,所以service.lastResult.products.product就代表返回XMLproducts标签下的所有product标签内容。

    c.  Product子标签和Flex<mx:columns>dataField属性相对应。

    结果图

     

     

    完整的JAVA和FLEX代码可以在这里下载

    展开全文
  • 学了很长时间的JSPServlet,虽然还是没有完全的理解其中的原理,但是总会一点点的技术,这次,就来实现把数据库中的数据在前端展示出来。 一、需求 实现数据库中的数据展现在前端界面 二、设计 技术选型:...
  • JSP中数据库连接池的重要性

    千次阅读 2006-09-21 22:12:00
    最近我作了数据库JSP的频繁连接,在此给出数据库连接池的必要性,对于JSP来说一个很好... 在主程序(如Servlet、Beans)建立数据库连接。 2. 进行SQL操作,取出数据。 3. 断开数据库连接。 使用这种模式开发,存在
  • Servlet实现注册+数据库连接---连接池

    千次阅读 2018-08-18 11:27:18
    Servlet实现注册+数据库连接—连接池 本文章只是提供部分源码,一个思路来实现一个简单的数据库注册的功能连接的功能 总体流程: 配置c3p0-config.xml,导入jar包。 创建JDBCUtils类,实现数据库资源连接...
  •  这样的话我们需要将从数据库中获取到的数据放进响应然后通过%=request.getAttribute("bookId1") %获取相应的值当然只有servletjsp页面是不够的还需要的是将你的servlet配置到你的wed.xml。这样你的servle
  • java+servlet+jsp连接数据库的增删改查

    千次阅读 2018-04-12 22:24:48
    1.首先建一个公共的包,里面包括连接数据库的方法,不用每次都连接数据库。public String url="jdbc:mysql://localhost:3306/rwgl?useSSL=false"; @SuppressWarnings("unused") public String...
  • [Servlet&JSP] 使用JDBC连接数据库

    千次阅读 2015-12-18 19:21:21
    JDBC(Java DataBase Connectivity)时用于运行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行实现,这样开发人员就可以无需接触底层数据库驱动程序的差异性。JDBC简介厂商在实现JDBC驱动程序...
  • Servlet连接MySQL数据库步骤

    千次阅读 2019-10-27 13:30:48
    1.加载驱动程序 ... ...2.建立连接对象 String dburl = "jdbc:mysql://127.0.0.1:3306/数据库名?useSSL=false&serverTimezone=UTC" Connection conn = DriverManager.getConnection(dburl,"...
  • javaWeb使用servlet并且连接数据库数据库插入数据

    万次阅读 多人点赞 2013-05-14 23:00:14
    1.打开myeclipse,创建一个web项目。 2.在index.jsp (在WebRoot下面)页面的body里面加入 如下代码:        账号:    密码: ...3.创建servlet。 (1)点击src——右键——new——pa
  • jsp+servlet+jdbc实现对数据库简单的增删改查

    千次阅读 多人点赞 2018-11-21 20:04:11
    入职以来(来京六整月),一直在学习JavaWeb的知识,分享下最近几个月(断断续续)用jsp+servlet+jdbc实现的一个demo,这个demo借鉴了网上很多前辈的经验,希望自己能够不断...2、创建数据库userdemo,然后创建userd...
  • 基本思想:JSP文件显示页面,使用form或href超链接传值到Servlet中方法,在Servlet方法调用Dao层的类对象,实现对数据库里的数据的增删改查,之后重新返回到JSP输出操作完的结果。 共分为四个包和对应的JSP文件:...
  • 其中控制层,调用service层的业务方法,而业务方法具体的数据操作则是靠调用dao层的数据库操作方法实现。 狭义理解:服务层和数据访问层在大的范围上,属于C:控制层的范畴,但有区别。 【注意事项】本例连接的...
  • JSPServlet与JavaBean实现从表单传输到数据库验证完成登录功能
  • JSP负责页面展现,其实jsp也是一个java类,最开始java为了在显示页面不得不分别out.println()方法输出标签,那样将显示与业务...java web最经典的还是jsp + servlet +mysql + tomcat。 接下来我们开始一个简单的java
  • 我现在准备使用eclipse和SQL server2008...打开数据库,在数据库中新建一个名为MyDataBase的数据库,然后使用SQL语句创建名为mytable的一张表 使用SQL语句如下: createtablemytable( namevarchar(20), pass...
  • 1、在servlet中处理读取数据库中的内容; 2、编写一个java类封装对数据库的加载、连接以及各种查询、更新方法; 3、编写一个javaBean 其参数对应于数据库中的列名 4、servlet中读取数据完成后,交于jsp界面输出 ...
  • 创建一个Servlet项目 右击项目名创建Servlet文件 命名ImageServlet 同样地 创建的时候删去这个 代码: public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,...
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 ... 一、JSPServlet的简单介绍 1、ServletJSP简介: Java开发Web应用程序时用到的技术主要有两种,即Servl...
  • 还有如果是第一次做这种WEB连接SQL的项目记得找到你的tomcat文件下面的lib目录去把连接MySQL的jar包导进去,而不是单纯创建一个lib目录导入,不这样做会导致找不到网页从而发生404 findAll.jsp <%@ page ...
  • 最近我作了数据库JSP的频繁连接,在此给出数据库连接池的必要性,对于JSP来说一个很好的J2EE... 在主程序(如Servlet、Beans)建立数据库连接。 2. 进行SQL操作,取出数据。 3. 断开数据库连接。 使用这种模式开发,
  • 数据库连接池(JSP

    千次阅读 2013-12-03 21:52:06
    一、为什么使用数据库连接池   用户每次请求都需要向数据库获得连接,而数据库创建连接通常要消耗相对较大的资源,创建时间也长。假设网站一天10万的访问量,数据库服务器就需要创建10万次连接,极大浪费数据库的...
  • ![图片说明](https://img-ask.csdn.net/upload/201706/01/1496283619_380263.png) 这里是service.xml的配置部分 ``` type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" ...
  • J2EE是一个技术框架,主要用于在web开发很好的嵌入java的逻辑代码。我大致总结了J2EE的三大技术核心。(主要从其的职责分的,按MVC划分的) 一、Jsp(主要担任的是V层 即是视图层 ) 二、Servlet(主要担任的是C 即是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 68,331
精华内容 27,332
关键字:

jsp中servlet创建数据库连接