title: "Servlet2"
date: 2019-08-17T16:33:07+08:00
本章内容为:《Servlet基础2》
作者:nuoccc
这篇文章 主要接着上一篇文章,对Servlet做出一些优化方便使用。
1.优化Servelet以及XML
上一篇文章我们了解了Servlet接口,并对它的五个方法做了了解,但是我们知道Servlet的五个方法,有四个都是通过容器来调用的,我们自己需要调用的方法只有service();总体来说其实方法是比较少的,所以我们一般不会去继承Servlet接口,而是改用成继承HttpServlet接口,HttpServlet接口是专门针对Http协议的Servlet实现类,定义在javax.servlet.http包内,接下来我们看下改成HttpServlet的具体用法,关于HttpServlet的原理,这里不做延伸,后面专门拿一篇文章来讲解,这里主要还是说用法。
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("helloServelt");
}
//同样的是继承service,其实应该是继承HttpServlet的doGet(),和doPost()方法,但本质一样的。
}
然后同样的配置xml文件,再运行Tomcat就能在页面看见输出了。
但是不觉得每一次都需要去配置xml文件,一个页面一个太麻烦了,所以在Servelt3.0中使用了注解来配置Servelt
具体用法为下:
@WebServlet(value="/HelloSerlet")
//此处为注解,然后value后面就是我们的网络地址,相当于xml的里面的内容
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("helloServelt");
}
}
这样我们就避免了每一次写一个页面就要去配置xml,注解时也可以去掉"value=",直接写成@WebServlet("/HelloSerlet")也是可以的。
我们优化完之后,我们来看看我们怎么利用HttpServlet来获取jsp文件的数据。
2.Servlet获取jsp数据
我们创建一个jsp文件,放入如下的表单数据:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
用户注册
用户注册
那我们现在获取这些表单中的数据呢?还记得上一篇文章服务器请求对象request有一个getParameter()方法来获得属性吗,同意的HttpRequest对象也有这个方法,因为HttpRequest是继承的SevrletRequest,ServletRequest该有的方法他都会拥有,所以有了这个方法我们就可以去请求获取jsp页面的属性。
@WebServlet(value="/HelloServlet")
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
String username=req.getParameter("username");
String password=req.getParameter("password");
String sex=req.getParameter("sex");
String[] hobby=req.getParameterValues("hobby");
//获得属性数组要用getParameterValues();
System.out.println(username+","+password+","+sex+","+ Arrays.toString(hobby));
}
}
然后我们启动Tomcat来看看运行结果:
这样我们就获取到了jsp页面的表单数据,然后我们再加强一下,来结合jdbc完成一个用户注册页面。
3.JDBC+JSP+Servlet完成用户注册页面
因为要加入JDBC所以我们这里就需要导入我们之前写的BaseDao工具类
首先先在web->WEB-INF下面创建一个lib文件夹,里面放入我们的mysql驱动器,然后加入到库内
然后在src下导入我们的工具类以及配置文件
然后创建一个Register.jsp来放入我们的注册表单
注册页面
然后我们创建一个数据库来对应这个表单的数据
CREATE table test_user(
id int(4) primary key auto_increment,
username varchar(20) not null,
password varchar(20) not null,
age int(3) not null,
sex varchar(10) not null,
email varchar(30) not null,
birthday date not null,
hobby varchar(30) not null,
address varchar(40) not null,
description varchar(200) not null
)engine=innodb default charset=utf8;
然后我们创建一个RegisterServlet来获取JSP文件的数据,并且传入数据库
@WebServlet("/Register.do")
public class RegisterServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");//设置响应的格式为html,字符集为utf-8
req.setCharacterEncoding("utf-8");//设置请求的字符集为utf-8
String usename = req.getParameter("username");
String password = req.getParameter("password");
String age = req.getParameter("age");
String sex = req.getParameter("sex");
String email = req.getParameter("email");
String birthday = req.getParameter("birthday");
String[] hobby = req.getParameterValues("hobby");
String address = req.getParameter("address");
String desciption = req.getParameter("description");
//获取表单的属性
System.out.println(usename+","+password+","+age+","+sex+","+email+","+birthday+","+ Arrays.toString(hobby)+","+address+","+desciption);
//打印测试看是否拿到表单数据
BaseDao bd = new BaseDao();
//创建一个工具类对象
String sql = "insert into test_user value(null,?,?,?,?,?,?,?,?,?)";
//插入的sql语句
Object[] parms = {usename,password,age,sex,email,birthday, Arrays.toString(hobby),address,desciption};
//把数据放入数租内
bd.myExecuteUpdate(sql,parms);
//调用工具类的新增功能
}
}
这样我们的一个结合JDBC+JSP+Servlet的注册程序就完成了,然后我们再来画个整体的流程图
我们完成了注册页面,有注册就会有登陆,所以我们再来完成一个登录页面
4.JDBC+Jsp+Servlet完成登录页面
同样的我们先创建一个登录的Jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
登录页面
数据库和工具类还是之前那个,所以我们只需要再创建一个Servlet就可以了
@WebServlet("/LoginServlet.do")
public class LoginServlet extends HelloServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
req.setCharacterEncoding("utf-8");
//设置字符集
String username=req.getParameter("username");
String password=req.getParameter("password");
//获得表单属性
BaseDao bd = new BaseDao();
//创建工具类对象
String sql = "select * from test_user where username=? and password=?";
//数据库查询语句,查找是否存在一行的username和password等于输入的username和password
Object[] parms = {username,password};
ResultSet rs = bd.myExecuteQuery(sql,parms);
//执行数据库查询语句,并返回一个结果集
try {
if(rs.next()){
//如果查询到有这么一行数据,结果集就不为空,就代表账号和密码正确
resp.getWriter().write("");
}else {
resp.getWriter().write("");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
}
}
}
这样我们基于JDBC+JSP+Servlet完成网页最基本的登录和操作就完成了,但是其实有个问题,我们每一个页面就需要创建一个Servlet,一个大型网站,有上百上千个网页,创建这么多Servlet其实也不方便后期处理,并且,几个页面的耦合度其实很高,但是这篇文章就先写到这里,下一篇文章将会对这两个方面方便进行优化,并完成CRUD操作。