servlet、jsp

作为一个电脑工作者就应该自己装配电脑,从而节省经济和提高开发效率。

(一)Servlet

java web 目录结构
  - WebContent
    - WEB-INF
      - classes
      - lib
      - web.xml
    - jsp 页面
    - html 页面
    - 图片 ...
    1) eclipse修改编译文件默认输出目录,设为classes<build path -->配置build path-->source>
    2)在tomcat的conf目录下依次创建 Catalina/localhost/test.xml<配置任意目录下的web应用程序>
      <Context
      Path="/wuyong"
      docBase="C:\Users\Administrator\workspace\test_3\WebContent"
      reloadable="true"/>
    !path名作为manager下的配置名
使用eclipse开发java web项目
  1)项目视图模式选择:navigator;project explorer;package explorer
    window --> show view --> ?
  2) 新建Tomcat服务器:window --> preferences --> server --> runtime Environments
  3) 新建web项目:Dynamic Web Project
  4)定制new透视图<windows-->perspective-->customize perspective>
Servlet的注册与运行
  1)servlet程序必须在web应用程序的web.xml中进行注册和映射其访问路径,才可以被servlet引擎加载和被外界访问
  2)一个<servlet>元素用于注册一个servlet,它包含两个主要子元素<servlet-name>、<servlet-class>.分别用于设置servlet的注册和完整类名
  3)一个<servlet-mapping>元素用于映射一个已注册的servlet的一个对外访问路径,它含有两个子元素:<servlet-name>和<url-pattern>,分别用于指定servlet的注册名称和 对外访问路径
  4)注意:一个servlet可以有多个映射
  5)url-pattern的三种参数形式:/-- ; /* ; *.--
类HelloServlet实现Servlet的一个例子
  1)创建一个servlet接口实现类:public class HelloServlet implements Servlet
  2) 在web.xml中注册和映射这个servlet:
  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.ants.service.HelloService</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/helloServlet</url-pattern>
  </servlet-mapping>

Servlet接口的方法
    init(ServletConfig config)
    service(ServletRequest req,ServletResponse res)
    destory()
    getServletConfig()
    getServletInfo()
Servlet的实现类<也是ServletConfig的实现类>
    CenericServlet<不常用>
    HttpServlet
ServletConfig接口的方法
    getInitParameter(String name)
    getInitParameterNames()
    getServletContext()
    getServletName()
ServletContext接口的常用方法:<当前Web应用大管家,可以获取Web应用各方面信息>
    getRealPath(String name):获取当前web应用某一个文件在服务器上的绝对路径,而不是部署前的路径
    getContextPath():获取当前web应用的名称
    getResourceAsStream(String path):获取当前web应用某一个文件对应的输入流
    setAttribute(String name,Object object)
    getAttribute(String name)

ServletContext接口
设置初始化参数:<全局的>
  <context-param>
    <param-name>driver</param-name>
    <param-value>com.mysql.jdbc.Driver</param-value>
  <context-param>
设置servlet初始化参数:<局部的,servlet的load-on-startup之前>
  <init-param>
    <param-name>user</param-name>
    <param-value>root</param-value>
  </init-param>
  <init-param>
    <param-name>password</param-name>
    <param-value>123456</param-value>
  </init-param>
get请求与post请求
  get请求数据以键值对的方式添加在地址栏,数据量与url地址容纳量有关,一般4kb-7kb
  post请求数据封装在form data,数据量无限制
service()
  ServletRequest:封装了请求信息
  - 获取请求参数
    String getParameter(String name):根据请求参数名,返回一个参数值
    String getParameterValues(String name):根据请求参数名,返回参数对应的字符串数组
    Enumeration getParameterNames():返回参数对应的Enumeration对象
    Map getParameterMap():返回键值对 key-->参数名 value-->参数值,String类型

  - 请求转发:<getRequestDispatcher是ServletRequest中定义>

    ServletRequest.getRequestDispatcher(String path).forward(ServletRequest request,ServletResponse,response)

  HttpServlet实现类的doGet()中的对象:HttpServletRequest
  2)获取请求url:HttpServletRequset.getRequestURI()
  3)获取请求方式:HttpServletRequset.getMethod()
  4)获取请求的查询字符串:HttpServletRequset.getQueryString()
      若是get请求,返回?后的字符串
      若是post请求,返回 null
  5)获取Servlet的映射路径:HttpServletRequset.getServletPath()
  6)和attribute相关的几个方法
ServletResponse:封装了响应信息
  1)*getWriter():返回PrintWriter 对象.调用该对象的print()方法,把print的参数打印到浏览器
  2)设置响应类型:response.setContentType("application/msword")
  3) void sendRedirect(String location):指定的重定向.(此方法为HttpServletResponse中定义)

(二)JSP
1、jsp的定义:全称Java Server Pages,java服务器页面。其根本是一个简化的servlet设计。
2、jsp的九个隐含对象<没有声明就可以直接使用>
  request
  response
  pageContext
  session
  application
  config
  out
  page
  exception<特殊:前提是设置了page指令的属性-->isErrorPage="true">
3、换行的2种方式
  ①   %>
      <br>
     <%
  ② out.print("<br>");
4、作用域属性范围从小到大
  pageContext,request,session,application
5、jsp语法
  1)静态html内容称
  2)jsp表达式 <%=表达式 %>:输出表达式的值,相当于out.print()
  3) 脚本片段,java代码中圈套html代码的 java代码片段,多个脚本片段可以相互进行访问
  4)jsp声明 <%! %>
  5) jsp注释 <%-- --%> html注释<!-- -->
6、域对象的属性操作
域对象:
  pageContext:属性的作用范围仅限于当前jsp页面
  request:属性的作用范围仅限于同一个请求
  session:属性的作用范围限于一次会话:浏览器打开直到关闭称之为一次会话<在此期间会话不失效>
  application:属性作用范围限于当前WEB应用.只要在一处设置属性,在其他各处的jsp或servlet都可 以获取,服务器关闭或重启消失
7、请求转发与重定向<requestDispatcher、sendRedirect>
  servlet类的创建,可选择映射和方法
  请求转发与重定向:
  1)本质区别:请求的转发只发出一个请求,而重定向则发出了两次请求
  具体:
    ①请求转发:地址栏是初次发出请求的地址
        重定向:地址栏不再是初次发出的请求地址,地址栏为最后响应的那个地址
    ②请求转发:在最终的Servlet中,request对象和中转的request对象是同一个
        重定向:在最终的Servlet中,request对象和中转的request对象不是同一个对象
    ③请求转发:只能转发给当前WEB应用的资源
        重定向:可以重定向到任何资源
    ④请求转发:/ 代表的是当前 WEB 应用的根目录
        重定向:/ 代表的是当前 WEB 站点的根目录
8、jsp 2.0的三种指令page,include,taglib
  page指令:
    1)全局任意位置都全局有效,建议放在起始位置
    2)page指令的 常用 属性:
      ①import属性:指定当前jsp页面对应的Servlet要导入的类
      <%@ page import="com.ants.test.Test"%>
      ②session属性:取值为true 或false,指定当前页面的session隐藏变量是否可用
      <%@ page session="false"%>
      ③errorPage 和 isErrorPage
      > errorPage 指定若当前页面出错实际响应的页面,/ 代表当前 WEB 应用根目录,请求方 式是 请求转发
      <%@ page errorPage="/error.jsp"%>
      > isErrorPage 指定当前页面是否为错误处理页面,属性值为 true 则可以使用隐含对象 exception,不建议能够直接访问该页面,属性值默认为
      false
      > WEB-INF下的文件为隐私文件不能通过url直接访问,但可以通过请求转发访问
      <%@ page errorPage="/WEB-INF/error.jsp"%>
      ④contentType属性:指定当前页面的响应类型,实际调用的是response.setContentType ("text/html;charset=UTF-8")
      ⑤pageEncoding属性:指定当前jsp页面的字符编码.通常和contentType中的charset一致
      ⑥isELIgnored属性:指定当前页面是否可以使用EL表达式,通常取值为true
  include指令:将其他文件静态引入servlet源文件中,其中file属性用于指定被引用文件的相对路径,若以/
    开头则是 WEB 应用的根目录
    <%@ include file="registerURL"%>
9、jsp标签
  标签名以小写jsp作为前缀,如<jsp:include>、<jsp:forward>
  <jsp:include> 将其他文件资源 动态引入,生成2个servlet源文件
    <jsp:include page="b.jsp"></jsp:include>
  <jsp:forward>
    <jsp:forward page="/include/b.jsp"></jsp:forward>
10、中文乱码问题
  1)jsp、开发工具、浏览器的编码格式改为utf-8
  2)若get请求-->servlet容器中conf/server.xml 修改编码格式
    若post请求-->servlet接口中的service()中添加<前提extends HttpServlet实现类>
    request.setCharacterEncoding("utf-8")
    response.setCharacterEncoding("utf-8")

生活就要逢山开路遇水搭桥,愿共勉!
原文地址:https://www.cnblogs.com/TianMu/p/7680457.html