java笔记jsp,servlet

  • 格式:docx
  • 大小:1.30 MB
  • 文档页数:43

JAVA笔记一、S ervlet1)、实现Servlet接口后就可以重写接口中的方法(int、service、 destroy),从这三个方法即可看出servlet的生命周期,当一个servlet开始运行时,int方法最先被执行,但只执行一次,其次是service,可能会执行多次,由servlet容器调用,请求一次调用一次,destroy方法也只是在servlet消亡时执行一次。

代码示例public void init(ServletConfig arg0) throws ServletException {//ServletConfig是接口,由tamcat服务器开发者实现init方法调用时,传过来的实际上是StandardWrapperFacde对象(可以打印ServletConfig看出),底层代码是:Public final class StandardWrapperFacde implements ServletConfig,此对象中封装了servlet的初始化信息,如:servletConfig.getServletName( );servletConfig.getServletContext();[获取上下文对象]等}public void service(ServletRequest req, ServletResponse res)throws ServletException, IOException {//req中封装了客户端传递过来的所有信息,res中封转了服务器端要传给客户端的所有信息//向下转型为HttpServletRequest,HttpServletResponse可以获取更多功能HttpServletRequest request= (HttpServletRequest)req; HttpServletResponse response (HttpServletResponse)res; PrintWriter out=response.getWriter();}public void destroy(){}public ServletConfig getServletConfig(){return null;}public String getServletInfo(){return null;}2)、Servlet映射在servlet配置中,<servlet-mapping>中的<url-pattern>有3种配置方法a、<url-pattern>/showcar</url-pattern>即配置具体的路径b、<url-pattern>*.do</url-pattern>c、<url-pattern>/*</url-pattern>d、同一个servlet也可以配置多个<servlet-mapping>,则此时这个servlet有多个访问路径3)缺省servlet当<url-pattern>配置为<url-pattern>/</url-pattern>时,此servlet为当前服务器的缺省servlet,凡在web.xml中找不到匹配的<servlet-mapping>元素的URL,它们的请求访问就会交给此缺省servlet 处理,在tamcat的conf文件夹的web.xml中注册了一个org.apache.catalina.servlets.DefaultServlet<servlet><servlet-name>default</servlet-name><servlet-class>org.apache.catalina.servlets.DefaultServlet</servle t-class><init-param><param-name>debug</param-name><param-value>0</param-value></init-param><init-param><param-name>listings</param-name><param-value>false</param-value></init-param><load-on-startup>1</load-on-startup></servlet><!-- The mapping for the default servlet --><servlet-mapping><servlet-name>default</servlet-name><url-pattern>/</url-pattern></servlet-mapping>由此我们可以看出此servlet的功能,当访问服务器中的某个图片或静态HTML时,实际上就访问这个servlet4),GenericServlet类public class ServletTest extends GenericServlet{public void service(ServletRequest req, ServletResponseres)throws ServletException, IOException{}}a、继承GenericServlet类后,观察底层代码只有service方法是抽象方法,所以只需覆盖service即可b、可通过此方法获取ServletConfigServletConfig servletconfig=this.getServletConfig(); servletconfig.getInitParameter("");或直接this.getInitParameter("");(被底层封装简化了)注意:此时若想初始化参数,最好调用无参的init方法,若调用有参的方法,则会影响service的ServletConfig servletconfig=this.getServletConfig(); servletconfig.getInitParameter("");执行,因为若想通过getServletConfig()获取ServletConfig,前提是父类的config成员变量必须被赋值,否则取到的空值底层代码如下,在父类的有参init方法中,config成员变量被赋值了。

如果重写了父类的有参init方法而没有对父类的config成员变量进行赋值,则只能获取空值。

(知识补充:子类可以通过父类的公有方法来获取父类的私有方法,子类的实现必须先调用父类的无参构造方法,所以当父类没有无参构造方法时,必须在子类中显式调用父类的构造方法)所以在开发中需要用到初始化时,建议调用无参的init方法5)、HttpServlet/*先执行有参的init()方法* 然后执行service(ServletRequest req, ServletResponse resp)方法会调用service(HttpServletRequest req, HttpServletResponse resp)方法,然后service(HttpServletRequest req, HttpServletResponse resp)根据表单提交的不同方式来调用doPost,或者doGet方法*/所以我们可以看到,如果重写了父类的service方法,则父类就不会通过原service方法来通过请求的不同去调用doGet或doPost方法由上述执行过程可知,我们不能重写父类的service(HttpServletRequest req, HttpServletResponse resp)方法,重写之后doGet和doPost方法就没用了。

必须要重写时要显式调用父类的service方法,一般只用到doGet 和doPost方法a、解决post中文乱码问题,tomcat默认编码是ISO-8859-1request.setCharacterEncoding(“utf-8”);response.setContentType(“text/html;charset=utf-8”);这两句须放在request对象使用之前,但此方法对GET请求无效b、表单提交数据时,传到服务器端的是通过表单的name属性,与其id无关c、常用接收表单传过来的值方法,示例String password=request.getParameter("password");String[] str=request.getParameterValues("");Map<String,String[]> map=request.getParameterMap();获取特定表头信息String accept=req.getHeader("Accept");写字符串到浏览器上去resp.getWriter().write("dfdsff");等等d、表单提交时,如果用GET方法,表单中的同属性的值会覆盖url路径中的值。

如果用post方式,表单中的值会作为正文传递,路径后的值会作为参数传递,所以会出现两个值。

二、C ookie1、C ookie小结:2、cookie的具体部分操作:a、创建cookie,使用HttpServletResponse对象Cookie c=newCookie("bookHistory",“book1”);c.setMaxAge(1*24*60*60);response.addCookie(c);注意要设置cookie的存活时间,否则cookie只是临时存在b、获取cookieCookie[] c=request.getCookies();if(c!=null)for(Cookie cc:c){if (cc.getName().equals("bookHistory")){return cc.getValue();}}三、s ession1、该客户端在服务器端对应的HttpSession:HttpSession session=request.getSession();2、ession中存入信息:session.setAttribute("shopcar", list);3、应的HttpSession中取得相应的信息:List<Book> list=(List<Book>)session.getAttribute("shopcar");4、*1 session的消毁a)session在默认情况下,web服务器只给每个HttpSession30分钟的生命周期b)可以通过在web.xml文件中通过以下代码配置HttpSession的生命周期,单位分<session-config><session-timeout>1</session-timeout></session-config>c)HttpSession的销毁是由web服务器来完成,但通常Web服务器的销毁不精准,会有延时d)HttpSession的销毁!=HttpSession为空e)HttpSession也可以通过手工销毁,代码如下:session.invalidate();f)不论通过何种方式销毁,该HttpSession非空,但其中的内容都没有了5、避免session的重复提交登陆后及时删除原session说明,使用URL重写后,服务器会判断浏览器是否禁用了Cookie,如果cookie未被禁用,则还是按照正常方法来使用。