Servlet (概念)
是服务器端运行的java小程序,起到一个桥梁的作用,用于浏览器和应用程序之间进行沟通。
启动和停止
前提条件: 1. 要安装jdk, 2. 要配置JAVA_HOME 环境变量
启动: bin/startup.bat (windows下)
停止: bin/shutdown.bat (windows下)
或者
在启动的黑窗口下 CTRL+C (停止程序,不是拷贝)
可以用浏览器检查它是否真正启动: 在浏览器地址栏输入 http://localhost:8080
http://127.0.0.1:8080
编写servlet基本步骤
1. 继承 HttpServlet父类
2. 使用注解 @WebServlet(urlPatterns = "浏览器访问路径")
3. 覆盖父类中 service 方法
@WebServlet(urlPatterns = "/hello")
public class MyServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("你好,程瑞科");
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().println("<html><body>你好,世界</body></html>
、
7. 浏览器发送请求(***)
语法:
http://ip地址:端口号/servlet地址?参数名1=参数值1&参数名2=参数值2...
?name=张三&pass=123 // name是参数名,张三是参数值, pass是参数名, 123 是参数值
服务器要获取请求参数:
String 请求参数的值 = request.getParameter("请求参数名");
注意:
如果某个参数没有传递,使用request.getParameter()返回的是null值
request.getParameter()返回的总是字符串,需要自己做数据类型转换
发送请求类型
1) get 请求 直接通过浏览器地址发送的请求
2) post 请求
表单form既可以发送get请求,也可以发送post请求
区别:
get 意味着获取信息(对应查询操作)
post 意味着增,改,删等操作
对于post请求,会有中文乱码问题,解决方法是调用:
req.setCharacterEncoding("utf-8");
> 注意: tomcat 8 已经对get请求中的中文按utf-8进行解码了, 所以程序员不需要对get请求的中文进行额外处理
tomcat 7, tomcat 6 ... 对get请求中的中文还需要特殊处理
servlet 的生命周期
浏览器首次向此servlet发送请求时,会创建它的实例对象;以后再发送请求使用的仍然是第一次创建的对象。
结论:整个生命周期中,servlet只有一个实例(单例的)
1) 构造方法首先执行(只执行一次)
2) 初始化方法init (只执行一次)
3) 服务方法 service (反复被执行)来一次请求执行一次
4) 销毁方法 destroy (只执行一次)在服务器停止前,或重新部署时
jsp
java server page
用途:主要用来生成html标签
在表现形式上类似于html 但多了一行
<%@ page contentType="text/html;charset=utf-8" %>
上面的代码称为 page 指令,主要作用就是指明此页面是一个jsp页面,并且通过contentType说明他的字符编码和格式
jsp 中有
1. 指令: `<%@ 指令名 %>`
2. 脚本: `<% 可以是任意java代码 %>`
3. 表达式: `<%= 表达式 %>` 把执行结果显示在页面上
EL表达式语言
expression language 在jsp用来展示结果的语言
变现形式为
${ 表达式语言 }
要用el表达式显示复杂的内容,需要把内容提前放入`作用域`, el再从`作用域`中把内容取出来显示
设置属性
pageContext.setAttribute("名称", Object); // 把内容起一个名字放入作用域
之后就可以通过EL表达式
${pageScope.名称}
el表达式可以通过
${对象.属性名} 但这里的属性名,依据是对象的get方法,而不是私有属性名
把get方法中get去掉(或把is方法的is去掉),剩余的单词首字母小写,作为对象的属性名,例如
getName() ==> name
getUsername() ==> username
getHelloWorld() ==> helloWorld
isClose() ==> close
JSTL
java 标准标签库
java standard tag library
主要的工具就是配合el表达式,实现循环,条件判断等功能
前提: 加入jstl-1.2的jar包
导入标签库
<%@ taglib uri="标签库唯一标识" prefix="前缀" %>
forEach
<c:forEach items="要遍历的集合" var="临时变量名" begin="起始数字" end="结束数字">
${临时变量名}
</c:forEach>
要遍历的集合 必须使用${} 从作用域获取
if
<c:if test="布尔条件">内容</c:if>
MVC
Model 模型 ==> 数据(例如从数据库查询出来的list集合, 里面包含java对象)
View 视图 ==> 数据的展现形式 (jsp就是一种视图技术)
Controller 控制器 ==> 把模型和视图联系起来 (servlet 充当控制器作用)
由servlet器查询数据,把数据放入作用域,跳转至jsp视图
jsp视图从作用域中获取数据,并展示
服务器常见的错误类型
500 Internal Server Error 服务器内部错误
404 Not Found 资源未找到错误
405 Method Not Allowed 方法不支持
200 OK 表示这次请求正常,没有错误
304 这个文件没有修改,请浏览器使用上一次缓存的文件