博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jsp+javaBean+Servlet+jdbc+mysql微型网站解析
阅读量:6480 次
发布时间:2019-06-23

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

hot3.png

先上结果图:

     

然后先来说说怎样创建一个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"%>
Insert title here
查询所有学生信息
插入学生体质信息

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
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
getAllStudent(){ List
list=new ArrayList
(); 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.*" %>
所有学生信息 <%! List
list=null; StudentHealthJavaBean student=null; %>
)request.getAttribute("list"); for(int i=0;i
<% list=(List
<% } %>
<%=student.getId()%> <%=student.getName()%> <%=student.getSex()%> <%=student.getAge()%> <%=student.getHight()%> <%=student.getWeight()%>

web.xml

StudentHealthSys
index.jsp
index.htm
default.html
default.htm
default.jsp
servlet.Servlet
servlet.Servlet
servlet.Servlet
/servlet.Servlet

在做这个微型网站的过程中的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?

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

 

转载于:https://my.oschina.net/u/3630543/blog/1791852

你可能感兴趣的文章
Java 提高篇(一)
查看>>
虚拟化学习笔记
查看>>
浏览器的兼容性问题
查看>>
我的友情链接
查看>>
今天真的搬走了
查看>>
PC散热风扇之研究一:风扇种类介绍
查看>>
关于Session和Cookie简单实例
查看>>
App框架实现———dagger2
查看>>
zabbix 微信报警
查看>>
rsync命令参数及SSH自定义端口远程拷贝
查看>>
通过SQL Server 2008数据库复制实现数据库同步备份
查看>>
HttpClient做接口测试时自定义参数长度
查看>>
PyCharm2017激活方法
查看>>
正则表达式
查看>>
Exchange企业实战技巧(27)邮件中使用数字签名和邮件加密功能
查看>>
mysql-5.6.27源码安装及错误解决办法
查看>>
Shell 函数、数组与正则表达式
查看>>
编译安装PHP时两个报错的解决办法
查看>>
System Center 2012 SP1 Data Protection Manager 防止重复备份数据
查看>>
【LeetCode算法】Valid Parentheses
查看>>