三 使用GET 和 POST请求
1 使用Get方式传递参数:
① 在浏览器地址栏中输入某个url地址或者单击网页上的一个超链接时,浏览器发出的http请求消息的请求方式为get
②如果网页中的<form>表单元素的method 属性设置为“get”,浏览器提交这个form表单时生成的http请求的请求方式为get
③ 使用get请求方式给web服务器传递 有数据量的限制 1 Kb以下
2 使用post form各字段元素数据作为http消系的实体内容发送给web服务器,传送的数据量大的多 文件上传必须使用Post
四 servlet的 service()方法 用于响应请求
servletRequest:封装了请求信息
servletResponse:封装了响应信息
1 获取请求参数:
String getParameter(String name); 根据请求参数的名字返回参数值
Map getParameterMap() 返回请求参数的键值对; key:参数名 value;参数值 String数组类型
Enumeration getParameterNames();返回参数名对应的Enumeration对像 类似与serVletCongfig或者servletContext
String[] getParameterValues(String name) 根据请求参数的名字 返回请求参数对应的字符串数组;
2 获取请求的url
HttpServletRequest httpServletRequest=(HttpServletRequest) request; 强转
String requestURI=httpServletRequest.getRequestURI();
syso(requestURI)
3 获取请求方式
String method=httpServletRequest.getMethod();
4获取请求参数的字符串
String queryString= httpServletRequest.getQueryString();
5 获取servlet名
httpServletRequest.getServletPath();
getWriter():返回PrintWriter对象 调用该对象的print()方法 ,将把print()中的参数直接打印在客户端浏览器上
6设置相应的文件类型:
response.setContentType("");
GenericServlet
1)是一个Servlet是servlet接口 和ServletConfig接口的实现类,但是一个抽象类,其中的service为抽象方法
2)如果新建的servlet程序直接继承genericServlet会使开发更简洁
// 获取请求方式;直接写request.getmethod() 没有这个方法
HttpServletRequest httpServletRequest =(HttpServletRequest )request;
String method=httpServletRequest .getMethod();
jsp:
1)why:
jsp简化servlet编写的一种技术,将java代码和html代码语句混合在同一个文件中编写
只对网页中的动态产生的内容采用java代码编写 而对固定不变的惊天内容采用普通静态HTML页面的方式编写
2)jsp 编写:
在body中 写在<% %>中
3).jsp可以放置在web应用程序中的除了wen_inf及其子目录外的其他任何目录中
jsp页面的访问路径与普通HTML页面的访问路径形式也一样
4)运行原理:本质为一个servlet
5)jsp页面的隐含变量(实际上还有一个exception)
PageContext pageContext=null;
HttpSession session=null;
ServletContext application=null;
ServletConfig config=null;
JspWriter out=null;
Object page=this;
① request: HttpRequest对象
② response: HttpServletResponse的一个对象(在jsp页面中几乎不会调用response的任何方法)
③ pageContext:页面的上下文 是PageContext的一个对象,可以从这个对象中获取到其他8个隐含对象
④ session :代表浏览器和服务器的一次对话 是Httpsession的一个对象
⑤ application :代表当前web应用 是ServletContext对象 可以获取初始化值
⑥config: 当前Jsp对应的Servlet的servletConfig对象(开发几乎不适用)
⑦ out: jspWriter对象 可以直接把字符串打印到浏览器上
⑧ page:指向当前jsp对应的servlet对象的引用,但为Object类型 只能调用Obeject方法 (不常使用)
⑨ exception :在声明了Page的指令 isErrorPage为true后 才可以使用
pageContext request session application(对属性的作用域的范围从小道大)
jsp基本语法:
1 模板元素
2jsp 表达式
<%= %>
将jsp中的值 直接输出到页面上
3 脚本片段:指嵌套在<% %><% %>之中的一条或多条java程序代码
多个脚本片段中的代码可以相互访问
4 <!--> jsp声明: 将java代码封装在<%!%>之中,它里面的代码将插入进
servlet的jspService方法的外面 (在Jsp页面中从不这样使用)
5 jsp注释
<%----%>jsp注释 jsp注释可以阻止java代码的运行
<!---> html 注释 不可以阻止
6 pageContext:属性的作用范围 仅限于当前jsp页面
request: 属性的作用范围只限于同一个请求(在有转发的情况下可以跨页面获取属性)
session:属性的作用范围限于一次会话:浏览器打开直到关闭称之为一次会话(在此期间会话不失效)
application属性的作用范围限与当前web应用
请求的重定向与请求的转发
1。 调用HTTPServletRequest的 getRequestDispatcher()方法获取RequestDispatcher对象
调用getRequestDispatcher()需要传入要转发的地址
2 调用HttpServletRequest的forward(request,response)进行请求的转发
4请求的转发与重定向 :本质区别:请求的转发只发送了一次请求 而重定向则发送了两次请求
区别:①转发的地址栏不发生变化 为初次发生请求的地址
而重定向的地址栏不再是初次发出的请求地址 为最后响应的地址
② 请求的转发: 在最终的Servlet中,request对象和中转的那个request是同一个对象
请求的重定向:在最终的SErvlet中,request对象和中转的那个request不是同一个对象
③ 请求的转发:这能转发给当前的web应用的资源
请求的重定向:可以重定向到任何资源
④ 对于请求转发而言 /代表当前web应用下的jsp
请求的重定向 /代表当前web站点的根目录
jsp指令:<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
include page taglib 三种指令
page指令:无论Page指令出现在jsp页面的任何地方 它的作用范围都为整个jsp页面 为了保持程序的可读性和遵循良好的
编程习惯 一般放在jsP页面的起始位置
①import 属性 :指定当前jsp页面对应的需要导入的类
②session属性:取值 true或者false
③ errorPage :指定当前页面出现错误的实际响应页面是什么 其中/表示的是当前web应用的根目录
<%@ page errorPage="/error.jsp"%>
isErrorPage :指定当前页面是否为错误处理页面;可以说明当前页面是否可以使用exception
需要制定isErrorPage="true" <%@=exception.getMessage()%> 一般不建议苟能直接访问该页面
注意: 对应tomcat而言 web-inf下的文件是不能通过在浏览器中直接输入地址来访问
访问方式:转发
方式二:
<error-page> 指定出错的代码
<error-code>404</>
<location>/.jsp</>
</>
<error-page> 指定异常的类型
<error-type>java.lang.ArithmeticException</>
<location>/.jsp</>
</>
④ contentType:指定当前页面的响应类型
实际调用的为 response.setContentType("text/html;charset=utf-8")
⑤ pageEncoding:指定当前jsp页面的字符编码
⑥指定当前页面是否可以使用el表达式: isElIgnored 通常为false
include:静态包含 源码级包含 file属性的设置值必须为相对路径
<jsp:include>标签 动态引入(两个.java原文件)<%@include file=".jsp"%>
<jsp:forward page=".jsp"> 相当于
<%
request.getRequestDispatcher(".jsp").forward(request,response);
%>
jsp:param子标签向其他Jsp传入一些参数:
中文乱码问题:
1 在jsp页面上输入中文 请求页面后不会出现乱码:保证 contentType="text/html;charset=utf-8"
pageEncoding="utf-8" charset和pageEncoding的编码一致
2 获取中文参数值:默认参数在传输过程中使用的编码为iso-8859-1
①对于post请求:只要在获取请求信息时,调用request.setCharacterEncoding(“utf-8”)即可
②对于get请求:前面的方式对于get无效 可以通过修改tomcat的server.xml文件的格式
为connector节点添加userBodyEncodingForUri="true"
MVC 关于mvc
1 m :model dao
2 v :view jsp在页面上填写java代码实现显示
3 c :controller servlet
①受理请求
② 获取请求参数
③调用Dao方法
④可能会把Dao方法的返回值放入request中
⑤转发或者重定向
2 什么时候转发:或者重定向
若目标的响应页面不需要从request中读取任何值,则可以使用重定向(还可以防止表单的重复提交)
3 不足:1. dao写的很多 代码冗余 使用数据库连接池 DButils
2.一个请求一个servlet不好!一个模块使用一个SErvlet 即多个请求可以使用一个serlvet