配置完环境变量之后,就开始了正式的开发。
- 新建一个dynamic web project项目,Dynamic web module version选择2.5,就可以生成一个包含web.xml文件的动态web项目。
- 先写一个继承自
HttpServlet
的类,来重写service方法
public class ListEmp extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置编码方式
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//连接数据库
Connection conn = null;
PreparedStatement perstat = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydata",
"root", "root");
perstat = conn.prepareStatement("SELECT * FROM t_emp");
rs = perstat.executeQuery();
out.println("<html><head></head><body style='font-size: 30px'>");
out.println("<table border='1' cellspacing='0' cellpadding='0' width='600px'>");
out.println("<caption>员工信息</caption>");
out.println("<tr><td>编号</td><td>姓名</td><td>薪水</td><td>年龄</td><td>操作</td>");
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String salary = rs.getString("salary");
String age = rs.getString("age");
out.println("<tr>");
out.println("<td>"+id+"</td>");
out.println("<td>"+name+"</td>");
out.println("<td>"+salary+"</td>");
out.println("<td>"+age+"</td>");
out.println("<td><a href='del?id="+id+"'onclick=\"return confirm"
+ "('是否确定删除"+name+"');\">删除</a>");
out.println("<a href='load?id="+id+"'>修改</a></td>");
out.println("</tr>");
}
out.println("</table></body></html>");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
out.println("系统异常");
}finally{
if(conn != null){
out.close();
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
以上就是servlet操作类。
为了避免乱码,我们将request和response都设为以utf8编码的格式
//设置编码方式
requset.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
3.写完操作类后,去web.xml来修改内容,让servlet能够顺利的找到资源
<!-- 查询员工信息 -->
<servlet>
<servlet-name>listEmp</servlet-name>
<servlet-class>empManage.ListEmp</servlet-class>
</servlet>
<!-- list -->
<servlet-mapping>
<servlet-name>listEmp</servlet-name>
<url-pattern>/list</url-pattern>
</servlet-mapping>
此时可以看到:
<servlet-mapping>
中的<url-pattern>
属性其实就是网页的后缀,也就是在浏览器地址栏中输入的地址。
输入地址匹配后,根据<servlet-mapping>
中的<servlet-name>
属性内容到<servlet>
相应属性中寻找其对应的<servlet-class>
也就是本网页对应的操作类。
项目部署后,在浏览器输入http://localhost:8080/empManage/list
即可了
链接是我写的一个增删改查员工信息的项目,请点击
本地部署后输入http://localhost:8080/empManage/addEmp.html
可查看结果。
以下是对github上挂的那个项目的小笔记:
一
list页面是为了显示所有的员工信息以及删除、修改等操作的,所以在PrintWriter中要输出很多html代码。请关注这一段代码:
out.println("<td><a href='del?id="+id+"'onclick=\"return confirm"
+ "('是否确定删除"+name+"');\">删除</a>");
out.println("<a href='load?id="+id+"'>修改</a></td>");
可以看到,在<a href>
属性中,有"<a href='load?id=xxx'>修改</a>"
这种属性,这个按钮点击之后,就会将页面导向到/load页面。那么这个页面的对应类在哪里呢?请从web.xml中寻找。
<!-- 加载员工 -->
<servlet>
<servlet-name>loadEmp</servlet-name>
<servlet-class>empManage.LoadEmpInfo</servlet-class>
</servlet>
<!-- load -->
<servlet-mapping>
<servlet-name>loadEmp</servlet-name>
<url-pattern>/load</url-pattern>
</servlet-mapping>
对,就是这么简单。
二
比如进行了删除操作之后,我们想要立即看到结果,那该怎么办呢?此时我们用到了重定向。
请看DelEmp类,操作完成之后有这么一句代码:
//重定向
response.sendRedirect("list");
这句代码将本页面重新定向至/list页面,同样对应的操作类要在web.xml中寻找。