在java web的学习过程里面,javabean和servlet都是比较重要的两部份内容。在开发中javabean能够用来实现一些业务逻辑或者封装一些业务的对象;而Servlet不但能够用来处理HTTP请求中的业务逻辑,还能够输出HTML代码来显示指定页面。下面就经过录入用户信息实例展开详细的分析,以便更方便体验JavaBean与Servlet在JSP页面中应用的两种不一样的实现过程html
JavaBeanjava
在JSP页面中应用JavaBean主要经过JSP动做标签<jsp:useBean>、<jsp:getProperty>、<jsp:setProperty>来实现对JavaBean对象的操做。web
先来了解一下学习JavaBean中有几个比较重要的知识点:正则表达式
setXXX()方法//提供为JavaBean中的属性赋值的方法app
getXXX()方法//提供公共的访问方法
jsp
<jsp:useBean>:实例化javaBean对象ide
<jsp:getProperty>:获取JavaBean的属性信息。post
<jsp:setProperty>:对JavaBean的属性在JSP页面中赋值学习
本实例中实现档案管理系统,在其中录入用户信息功能。其开发步骤以下:ui
(1)建立一个Person类,将其放置在com.lxy.bean包中,实现对用户信息封装。在person类中包含4个属性.
package com.lxy.bean; public class Person { private String name; private int age; private String sex; private String add; public String getName(){ return name; } public void setName(String name){ this.name=name; } public int getAge(){ return age; } public void setAge(int age){ this.age=age; } public String getSex(){ return sex; } public void setSex(String sex){ this.sex=sex; } public String getAdd(){ return add; } public void setAdd(String add){ this.add=add; } }
(2)建立程序的主页面index.jsp,放置录入用户信息的表单。(提示:表单属性名称最好设置成为JavaBean中的属性名称,这样就能够经过“<jsp:setProperty property="*">”的形式来接收全部参数,减小代码量。若是将年龄文本框name属性设置为age,它对应Person类的age.)
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <!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=GB18030"> <title>添加用户信息</title> </head> <body> <form action="deal.jsp" method="post"> <table align="center"width="400"height="200"border="1"> <tr> <td align="center"colspan="2"height="40"> <b>添加用户信息</b> </td> </tr> <tr> <td align="right">姓 名: </td> <td><input type="text" name="name"> </td> </tr> <tr> <td align="right">年 龄: </td> <td><input type="text"name="age"> </td> </tr> <tr> <td align="right">性 别: </td> <td><input type="text" name="sex"> </td> </tr> <tr> <td align="right">住 址: </td> <td><input type="text" name="add"> </td> </tr> <tr> <td align="center" colspan="2"> <input type="submit" value="添加"> </td> </tr> </table> </form> </body> </html>
(3)建立deal.jsp的处理页,用于对index.jsp页面中表单的提交请求处理。该页面将获取表单所提交的全部信息,而后将获取的用户信息输出到页面中。
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <!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=GB18030"> <title>处理页</title> </head> <body> <%request.setCharacterEncoding("GB18030"); %> //经过request的setCharacterEncoding()方法指定编码格式进行解决乱码问题 <jsp:useBean id="person" class="com.lxy.bean.Person" scope="page"> <jsp:setProperty name="person" property="*"/> </jsp:useBean> <table align="center" width="400"> <tr> <td align="right">姓 名: </td> <td><jsp:getProperty property="name" name="person"/> </td> </tr> <tr> <td align="right">年 龄: </td> <td><jsp:getProperty property="age" name="person"/> </td> </tr> <tr> <td align="right">性 别: </td> <td><jsp:getProperty property="sex" name="person"/> </td> </tr> <tr> <td align="right">住 址: </td> <td><jsp:getProperty property="add" name="person"/> </td> </tr> </table> </body> </html>
最后运行页面:
显示
Servlet
Servlet与JavaBean的方法有比较大的区别。
实现用户信息的添加功能,并建立字符编码过滤器,避免中文乱码现象的产生。
(1)建立字符编码过滤器对象,其名称为CharactorFilter类。该类实现了javax.servlet.Filter接口,并在doFilter()方法中对请求中的字符编码格式进行设置:
package com.lixiyu; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class CharactorFilter implements Filter{ String encoding=null; //字符编码 public void destroy(){ encoding=null; } public void doFilter(ServletRequest request,ServletResponse response ,FilterChain chain)throws IOException,ServletException{ if(encoding!=null){ //判断字符编码是否为空 request.setCharacterEncoding(encoding); //设置request的编码格式 response.setContentType("text/html;charset="+encoding);//设置response字符编码格式 } chain.doFilter(request, response);//传递到下一过滤器 } public void init(FilterConfig filterConfig)throws ServletException{ encoding=filterConfig.getInitParameter("encoding"); //获取初始化参数 } }
(2)建立了过滤器对象以后,须要对过滤器进行必定的配置才能够正常使用:
<filter> <filter-name>CharactorFilter</filter-name> <filter-class>com.lixiyu.CharactorFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharactorFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
技巧:在web.xml文件中配置过滤器,其过滤器的URL映射能够使用正则表达式进行配置,若是上面中使用的“/*”来匹配全部请求。
(3)建立AddServlet类,继承HttpServlet,是处理添加用户信息请求的Servlet对象:
package com.lixiyu; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class AddServlet */ public class AddServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public AddServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //处理GET请求 // TODO Auto-generated method stub doPost(request,response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //处理POST请求 // TODO Auto-generated method stub PrintWriter out=response.getWriter();//获取PrintWriter String name=request.getParameter("name");//获取用户信息 String age=request.getParameter("age"); String sex=request.getParameter("sex"); String add=request.getParameter("add"); out.print("<h2>用户信息添加成功</h2><hr>");//输出用户信息 out.print("姓名:"+name+"<br>"); out.print("年龄:"+age+"<br>"); out.print("性别:"+sex+"<br>"); out.print("地址:"+add+"<br>"); out.flush();//刷新流 out.close();//关闭流 } }
AddServlet类主要经过doPost()方法实现添加图书管理信息请求的处理,其方式是将所获取的信息数据直接输出到页面中。
(4)在web.xml中对Servlet进行配置:
<servlet> <servlet-name>AddServlet</servlet-name> <servlet-class>com.lixiyu.AddServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AddServlet</servlet-name> <url-pattern>/AddServlet</url-pattern> </servlet-mapping>
(5)建立index.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>添加用户信息</title> </head> <body> <form action="AddServlet" method="post"> <table align="center" border="1" width="350"> <tr> <td class="2" align="center" colspan="2"> <h2>添加用户信息</h2> </td> </tr> <tr> <td align="right">姓 名:</td> <td> <input type="text" name="name"> </td> </tr> <tr> <td align="right">年 龄:</td> <td> <input type="text" name="age"> </td> </tr> <tr> <td align="right">性 别:</td> <td> <input type="text" name="sex"> </td> </tr> <tr> <td align="right">地 址:</td> <td> <input type="text" name="add"> </td> </tr> <tr> <td class="2" align="center" colspan="2"> <input type="submit" value="添 加"> </td> </tr> </table> </form> </body> </html>
最后运行:
显示