jsp+javaBean+Servlet+jdbc+mysql微型网站解析

先上结果图:

     

然后先来说说怎样创建一个Servlet并部署并能被访问。

1.在src下建立一个普通的java类,但继承父类httpServlet.路径是:javax.servlet.http.HttpServlet,然后重写你的doPost()和doGet()方法,并注释掉父类的super.doGet(req,resp)

2.在web-inf下建立classes文件夹,写完以后运行后,在build下找到class文件,把整个包结构都拷贝过去,不是只把class文件拷过去,要包结构和java那边一样的

3.在web.xml下配置servlet的网络访问路径,不配置没法在浏览器访问的。

<servlet>
   <servlet-name>servlet.Servlet</servlet-name>//servlet-name可以随便起,只要两个一模一样就可
   <servlet-class>servlet.Servlet</servlet-class>//真实的包名.文件名全名
  </servlet>
  <servlet-mapping>
    <servlet-name>servlet.Servlet</servlet-name>//servlet-name可以随便起,只要两个一模一样就可

//以这个路径作为访问路径,IP地址:端口号/项目名/servlet.Servlet就可以访问到,名字随便起

 <url-pattern>/servlet.Servlet</url-pattern>
  </servlet-mapping>

4.现在就可以访问了,调试也是和java一样设置断点调试。

下面给出这个微型网站的第一个功能查询所有学生信息的全部代码:

index_left.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<br><br>
<center>
  <a href="servlet.Servlet?methor=query_all" target="right">查询所有学生信息</a>
  <br><br>
  <a href="insert_student.jsp" target="right">插入学生体质信息</a>
  </center>
</body>
</html>

Servlet.java

package servlet;

import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import configUtil.QuerySql;
import configUtil.StudentHealthJavaBean;

 public class Servlet extends HttpServlet {
    public Servlet() {
    }
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO 第三步执行
		//super.doGet(req, resp);如果执行了父类方法可能会对自己的覆盖
		req.setCharacterEncoding("UTF-8");
		String methor=req.getParameter("methor");
		System.out.println(methor);
		if(methor!=null) {
			QuerySql query=new QuerySql();
			switch(methor) {
			case "query_all":
				List<StudentHealthJavaBean> list=query.getAllStudent();
				req.setAttribute("list", list);
				RequestDispatcher rd=req.getRequestDispatcher("/query_all_student.jsp");
				rd.forward(req, resp);
				break;
			}
		}else {
			System.out.println("参数传输失败。");
		}
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO 第三部执行如果执行了父类方法可能会对自己的覆盖
		//super.doPost(req, resp);
		req.setCharacterEncoding("UTF-8");
		String str=req.getParameter("methor");
		QuerySql q=new QuerySql();
		StudentHealthJavaBean student=new StudentHealthJavaBean();
		student.setId(req.getParameter("id"));
		student.setName(req.getParameter("name"));
		student.setSex(req.getParameter("sex"));
		student.setAge(Integer.parseInt(req.getParameter("age")));
		student.setHight(Float.parseFloat(req.getParameter("hight")));
		student.setWeight(Float.parseFloat(req.getParameter("weight")));
		if(str!=null&&student!=null) {
			switch(str) {
			case "insert":
				int n=q.insertStudent(student);
				if(n==0) {
					System.out.println("没有成功插入数据!");
				    req.setAttribute("success", "没能成功添加此学生信息!");
				}
				else {
					System.out.println("成功插入数据!");
				    req.setAttribute("success","成功添加此学生信息!");
				    }
				RequestDispatcher dispatcher=req.getRequestDispatcher("/success.jsp");
				dispatcher.forward(req,resp);
				break;
			}
		}
	}
	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
		//第二部执行,完了根据post还是get自动调用doGet()或者doPost()方法
		super.service(arg0, arg1);
	}
	@Override
	public void init() throws ServletException {
		//第一步执行,自动生成request\response对象调用service方法
		super.init();
	}
}

QuerySql.java

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class QuerySql {

	private String insertSQL="insert into stu_info(id,name,sex,age,hight,weight) values(?,?,?,?,?,?)";
	private String selectSQL="select * from stu_info";
    private Connection con=null;
       public QuerySql(){
    	   
       }
	@SuppressWarnings("finally")
	public List<StudentHealthJavaBean>  getAllStudent(){
		List<StudentHealthJavaBean> list=new ArrayList<StudentHealthJavaBean>();
		ResultSet rs=null;
		PreparedStatement ps=null;
		StudentHealthJavaBean student=null;
		     con=DataBaseConfig.getConnection();
		     try {
				ps=con.prepareStatement(selectSQL);
			     rs=ps.executeQuery();
			     while(rs.next()) {
			    	 student=new StudentHealthJavaBean();
			    	 student.setId(rs.getString("id"));
			    	 student.setName(rs.getString("name"));
			    	 student.setSex(rs.getString("sex"));
			    	 student.setAge(rs.getInt("age"));
			    	 student.setHight(rs.getFloat("hight"));
			    	 student.setWeight(rs.getFloat("weight"));
			    	 list.add(student);
			     }
			} catch (SQLException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}finally {
				DataBaseConfig.closeDatabaseConnection(con, ps, rs);
				if(list!=null)
					System.out.println("成功查询!");
				else {
					System.out.println("list是空值!");
				}
				return list;
			}
	}
	
	
	public int insertStudent(StudentHealthJavaBean student) {
		int num=0;
		Connection con=null;
		ResultSet rs=null;
		PreparedStatement ps=null;
		    
		con=DataBaseConfig.getConnection();
		try {
			ps=con.prepareStatement("select * from stu_info where id=?");
			ps.setString(1, student.getId());
			rs=ps.executeQuery();
			if(rs.first()) {
			System.out.println("已经存在此学号的学生信息,不能插入了!");
			DataBaseConfig.closeDatabaseConnection(con, ps, rs);
			return 0;
			}
			ps=con.prepareStatement(insertSQL);
			ps.setString(1, student.getId());
			ps.setString(2, student.getName());
			ps.setString(3, student.getSex());
			ps.setInt(4, student.getAge());
			ps.setFloat(5, student.getHight());
			ps.setFloat(6, student.getWeight());
			num=ps.executeUpdate();
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}finally {
			return num;
		}
		
	}
}

DataBaseConfig.java

public class DataBaseConfig {
     public static String url1="jdbc:mysql://localhost:3306/";//数据库的网址
     public static String databaseName="students";//数据库名
     public static String userName="&user=root";//登录数据库的登录名
     public static String password="&password=root";//数据库的密码
     public static String driverName="com.mysql.jdbc.Driver";
//mysql的驱动包名,下载到的解压包已放在tomcat的lib下
     public static String encoding="&useUnicode=true&characterEncoding=UTF-8";//编码方式
     public static String url=url1+databaseName+"?"+"useSSL=false"+encoding+userName+password;
       @SuppressWarnings("finally")//SSL是一种加密技术,这里不要他
	public static Connection getConnection() {
    	   Connection con=null;
    	     try {
				Class.forName(driverName);
				con=DriverManager.getConnection(url);
			} catch (ClassNotFoundException | SQLException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}finally {
				return con;
			}
       }
     
       public static void closeDatabaseConnection(Connection con,PreparedStatement ps,ResultSet rs) {
			try {//需要手动释放数据库的一些资源
		    	   if(rs!=null)rs.close();
				if(ps!=null) ps.close();
		    	if(con!=null) con.close();
			} catch (SQLException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
       }
}

StudentHealthJavaBean.java

public class StudentHealthJavaBean {
	private String id;
	private String name;
	private String sex;
	private int age;
	private float hight;
	private float weight;
	
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public float getHight() {
		return hight;
	}

	public void setHight(float hight) {
		this.hight = hight;
	}

	public float getWeight() {
		return weight;
	}
	public void setWeight(float weight) {
		this.weight = weight;
	}
	public StudentHealthJavaBean() {
		// TODO 自动生成的构造函数存根
	}

}

query_all_student.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 <%@page import="java.util.*" %>
 <%@page import="configUtil.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>所有学生信息</title>
</head>
<body style="padding-left:100px;padding-top:20px">
 <%!
   List<StudentHealthJavaBean> list=null;
   StudentHealthJavaBean student=null;
 %> 
 <table border="2">
 <%
    list=(List<StudentHealthJavaBean>)request.getAttribute("list");
    for(int i=0;i<list.size();i++){
    	student=new StudentHealthJavaBean();
    	student=list.get(i);
  %>
    <tr>
    <td><%=student.getId()%></td>
    <td><%=student.getName()%></td>
    <td><%=student.getSex()%></td>
    <td><%=student.getAge()%></td>
    <td><%=student.getHight()%></td>
    <td><%=student.getWeight()%></td>
    </tr> 
   <% 
    }
   %>
 </table>
</body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>StudentHealthSys</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
   <servlet-name>servlet.Servlet</servlet-name>
   <servlet-class>servlet.Servlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>servlet.Servlet</servlet-name>
    <url-pattern>/servlet.Servlet</url-pattern>
  </servlet-mapping>
</web-app>

在做这个微型网站的过程中的bug记录和修正:

  • servlet在web里的标签书写报错?

在web.xml里servlet-mapping书写文件名时注意到原来的文件结构有没有在某个包下面,加上包名就正确了

  • servlet文件访问失败?

去掉dopost()doget()调用父类的方法那句,被父类方法覆盖了,访问名没有.java后缀。
webInf下建立classes包,buid下复制java文件的包结构和java文件的class文件过来

  • jsp与servlet之间用request传递属性失败,得到的属性值总是null?

写的链接<a>必须要点击才能跳转,不会自动跳转

  • 连接数据库后拿到的数据总是空?

用setAttribute()的方式存储却用getParameter()的方式取,必须一致用getAttribute能取到了。
getParameter()好像只对Input标签的值有效。

  • 前后台的list如何转换?

强制类型转换是可以的。

  • 前台写入request的数据在后台取出是null值?

form发送的只是input标签内的数据,不发送request数据,可以把不用用户填入的数据设为input的type=hidden类型填入。

  • jsp如何跳转到servlet文件?

两种方法,一种是form表单的action跳过去,另一种是<a>超链接标签点击跳转

  • servlet如何跳转到jsp?

目前只知道一种方法:Request类方法得到RequestDispatcher对象,其对象的forward带着request和response跳回去。
RequestDispatcher dispatcher=req.getRequestDispatcher("/success.jsp");
dispatcher.forward(req,resp);

  • jsp跳到servlet之间如何进行数据传输?

jsp的form表单和<a>的连接后可以加上?属性=属性值一起过去,都通过getParameter取出。

  • servlet如何向jsp传输数据?

通过request的setAttribute()方法存入,在jsp通过getAttribute取出。

  • Servlet如何自己向浏览器输出文字?

用HttpServletResponse的getWriter()方法返回一个PrintWriter对象,调用PrintWriter的println()方法+flush()方法能向自己本窗口和客户端输出文字。

  • jsp中如何利用javaBean?

首先引入javaBean的路径,然后建立javabean的对象
<jsp:useBean  id=你建的javaBean的对象  class=包名文件名  scope=有效范围seesion/request等/>
然后存储<jsp:setProperty name=必须和上面的id对象同名
property=属性名(如果是*就是所有input自动找到和name同名的赋值)  value=值/>
调用<jsp:getProperty name="对象名"  property="属性名"/>

  • servlet中如何利用javabean?

直接创建对象存入数据使用,像一般的类一样。

猜你喜欢

转载自my.oschina.net/u/3630543/blog/1791852
今日推荐