(二)用户相关操作
一、導(dǎo)入jar包
見 http://pan.baidu.com/s/1dE9kMJZ?
?
?二、導(dǎo)入c3p0并修改值
c3p0.driverClass=com.mysql.jdbc.Driver c3p0.jdbcUrl=jdbc:mysql://localhost:3306/store c3p0.user=root c3p0.password=123456三、導(dǎo)入工具類
見 http://pan.baidu.com/s/1miutJXe有關(guān)這些工具類的分析請轉(zhuǎn)向http://www.cnblogs.com/Michael2397/p/7633395.html
四、通用servet
1、我們可以直接重寫service方法即可,在service方法中寫上面的判斷代碼即可
以前只定義一個Userservlet重寫doget和dopost例如添加用戶的時候以前: /store/addUser現(xiàn)在: /store/user?method=add修改用戶的時候以前: /store/updateUser現(xiàn)在: /store/user?method=update 初步改進(jìn) 在userservlet中doget方法中Stirng m=request.getParameter("method");if("add".equals(m)){add(HttpServletRequest,HttpServletResponse)}else if("update".equals(m)){update(HttpServletRequest,HttpServletResponse)}else if(){}
最終改進(jìn): 1、BaseServlet extends HttpServlet{} 2、在baseservlet中重寫service方法1.獲取請求的方法2.找到相應(yīng)的子類 父類中的this代表的是子類Class clazz=this.getClass()3.子類調(diào)用方法通過方法名稱 獲取一個指定的方法 Method m=clazz.getMethod(方法名,HttpServletRequest.class,HttpServletResponse.class)方法執(zhí)行m.invoke(this,HttpServletRequest,HttpServletResponse); 3、其他的servlet繼承baseServlet ?
2、請求轉(zhuǎn)發(fā) 重定向 打印數(shù)據(jù)改進(jìn)
以前在servlet中 我們執(zhí)行方法之后無非 請求轉(zhuǎn)發(fā) 重定向 打印數(shù)據(jù) 請求轉(zhuǎn)發(fā) reuqest.getRequestDispatcher().forward()最終改進(jìn)
繼續(xù)完善我們baseservlet中service: 在第3步,方法執(zhí)行返回值,現(xiàn)在我讓所有的方法都返回一個字符串 add update字符串代表的是請求轉(zhuǎn)發(fā)的路徑若該方法不轉(zhuǎn)發(fā)只需要返回一個nullString s=(String)m.invoke(this,HttpServletRequest,HttpServletResponse);if(s!=null){reuqest.getRequestDispatcher(s).forward(...);}
五、創(chuàng)建通用servlet
BaseServlet只需要重寫service即可1、新建Baseservlet
package com.louis.web.servlet;import java.io.IOException; import java.lang.reflect.Method;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*/ @WebServlet("/base") public class BaseServlet extends HttpServlet {@Overridepublic void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {try {//1獲取子類,創(chuàng)建子類或調(diào)用子類的時候,this代表的是子類對象Class clazz = this.getClass();//2獲取請求方法String m = request.getParameter("method");//3獲取方法對象Method method = clazz.getDeclaredMethod(m, HttpServletRequest.class,HttpServletResponse.class);//4讓方法執(zhí)行,返回值為請求轉(zhuǎn)發(fā)的路徑String s = (String)method.invoke(this, request,response); //相當(dāng)于 userservlet.add(request,response)//5判斷s是否為空if(s!=null) {request.getRequestDispatcher(s).forward(request, response);}} catch (Exception e) {// TODO Auto-generated catch block e.printStackTrace();throw new RuntimeException();} }}2、配置web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><servlet><description></description><display-name>BaseServlet</display-name><servlet-name>BaseServlet</servlet-name><servlet-class>com.louis.web.servlet.BaseServlet</servlet-class></servlet><servlet-mapping><servlet-name>BaseServlet</servlet-name><url-pattern>/base</url-pattern></servlet-mapping><error-page> //配置錯誤頁面<error-code>500</error-code><location>/500.jsp</location></error-page><error-page><error-code>404</error-code><location>/404.jsp</location></error-page></web-app>
3、添加500.jsp,404.jsp
?六、創(chuàng)建UserServlet
1、編寫UserServlet
package com.louis.web.servlet;import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** 和用戶相關(guān)的servlet*/public class UserServlet extends BaseServlet {public String add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("userServlet的add方法執(zhí)行了");return null;}}2、配置web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><servlet><description></description><display-name>BaseServlet</display-name><servlet-name>BaseServlet</servlet-name><servlet-class>com.louis.web.servlet.BaseServlet</servlet-class></servlet><servlet-mapping><servlet-name>BaseServlet</servlet-name><url-pattern>/base</url-pattern></servlet-mapping> <servlet><description></description><display-name>UserServlet</display-name><servlet-name>UserServlet</servlet-name><servlet-class>com.louis.web.servlet.UserServlet</servlet-class></servlet><servlet-mapping><servlet-name>UserServlet</servlet-name><url-pattern>/user</url-pattern></servlet-mapping><error-page><error-code>500</error-code><location>/500.jsp</location></error-page><error-page><error-code>404</error-code><location>/404.jsp</location></error-page> </web-app>3、在瀏覽器上驗(yàn)證http://localhost:8080/store/user?method=add
?
user:通過web.xml得到執(zhí)行的是userServlet method=add:因?yàn)閡serServlet是繼承baseServlet,所以要先經(jīng)過baseServlet,通過反射執(zhí)行this.add方法(this指的是子類)?
?
?
?
?
問題
問題1
解決:參考http://www.cnblogs.com/vivizhang/p/vivizhang.html
因?yàn)閑clipse默認(rèn)添加的@WebServlet("/ServletDemo")與web.xml中的沖突,刪掉其中一個
2、this關(guān)鍵字在繼承中的使用
? 參考:http://www.cnblogs.com/Michael2397/p/7633932.html
3、web.xml配置
參考:http://www.cnblogs.com/hxsyl/p/3435412.html
4、request.getRequestDispatcher().forward(request,response)和response.sendRedirect()的區(qū)別
參考:http://blog.csdn.net/uk8692/article/details/12865571
?轉(zhuǎn)載于:https://www.cnblogs.com/Michael2397/p/7633847.html
總結(jié)
- 上一篇: js 图片库 改进版
- 下一篇: 洛谷 1087——FBI树