Javaweb(四)Servlet/Jsp实战篇
前言
这篇文章重点是讲如何写Servlet、Jsp,以及两者之间如何交互
如果还有新手村玩家(~~比如我~~ )没有看前两张基础篇或不知道Servlet/Jsp基础的,建议先去学一下基础知识哦Javaweb(一)网络基础篇
Javaweb(二)框架搭建篇
Javaweb(三)Servlet/Jsp原理篇
一、Servlet及其内置属性
1.Servlet
有了之前的基础,就可以很轻松的写一个Servlet了
继承HttpServlet,并重写doGet和doPost
并且对于每一个Servlet,都要去web.xml注册并且编写映射
package servlet;
import jakarta.servlet.*;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
public class test extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>servlet.test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
2.HttpServletResponse
HttpServletResponse和ServletResponse中有如下常用函数
public interface HttpServletResponse extends ServletResponse {
//1.向浏览器发送数据
//字符、二进制数据 ServletOutputStream out = resp.getOutputStream();
ServletOutputStream getOutputStream() throws IOException;
//字符数据
PrintWriter getWriter() throws IOException;
//2.向浏览器发送响应头
//设置响应编码 resp.setCharacterEncoding("utf-8");
void setCharacterEncoding(String var1);
//设置响应内容格式 resp.setContentType("image/jpeg");
void setContentType(String var1);
//设置指定名称的头信息的值 resp.setHeader("Cache-Control","no-cache");
void setHeader(String var1, String var2);
//向浏览器添加一个cookie对象
void addCookie(Cookie var1);
//重定向 resp.sendRedirect("/t/img") resp.sendRedirect("/t/success.jsp");
void sendRedirect(String var1) throws IOException;
}
3.HttpServletRequest
HTTP请求中的信息会被封装到HttpServletRequest,通过HttpServletRequest的方法,可以获得客户端的所有信息
public interface HttpServletRequest extends ServletRequest {
//获取请求方式Get/Post
String getMethod();
//request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/"+getServletPath();
// http :// localhost : 8080 /myweb(Tomcat里自己设置的) /t/t.jsp
// 协议名 服务器上接收请求的网络接口的IP地址所对应的主机名 请求所连接的服务器端口号 请求资源所属于的WEB应用程序的路径 Servlet所在路径
// http://localhost:8080/myweb/t/t.jsp
int getLocalPort();
String getContextPath();
String getServerName();
int getServerPort();
String getServletPath();
//这就是上一篇文章中提到的那个共享数据的东西
ServletContext getServletContext();
//获取Session
HttpSession getSession(boolean var1);
//获取session的id 一个id唯一对应一个Session
String getRequestedSessionId();
//设置编码
void setCharacterEncoding(String var1) throws UnsupportedEncodingException;
//获取前端传递的参数
String getParameter(String var1);
String[] getParameterValues(String var1);
//获取、设置、移除属性
Object getAttribute(String var1);
void setAttribute(String var1, Object var2);
void removeAttribute(String var1);
}
二、Jsp
1.语法
对于Jsp,就当html写就好了
<%Jsp指令%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--
<% %>jsp脚本片段 里面的代码会原封不动的翻译成Java
<%= %>输出到客户端
<%! %>定义全局
--%>
<%--JSP表达式--%>
<%= new Date()%>
<%--jsp脚本片段--%>
<%
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
out.println("<h1>Sum=" + sum + "</h1>");
%>
<%--jsp声明--%>
<%!static {
System.out.println("Loading...");
}
private final int globalval=0;
public void show(){
System.out.println("show");
}
%>
<%--在代码嵌入HTML元素--%>
<%
for (int i = 0; i < 5; i++) {
this.show();
%>
<h4> <%= this.globalval%> </h4>
<%
}
%>
<%!--Jsp标签-->
<%!-- 拼接页面 推荐 -->
<jsp:include page="/common/header.jsp"/>
<h2>body</h2>
<jsp:include page="/common/footer.jsp"/>
</body>
</html>
2.EL表达式
<!--获取数据-->
<!--执行运算-->
<!--获取web开发的常用对象-->
<h1>${username}</h1>
3.JSTL标签
用不过来了,感觉这个好麻烦啊
还没学的…
三、交互
1.Servlet到Jsp
- 转发和重定向的区别
重定向(url会变):只是简单的页面跳转
转发(url不变):将当前的请求转发到其他Web组件,被请求的页面可以通过request对象来得到该请求//路径既可以是 ".jsp" 也可以是 "/login" resp.sendRedirect("/login/success.jsp");
req.getRequestDispatcher("/login/success.jsp").forward(req, resp);
- Servlet通过request.setAttribute(“usernae”,“name”)传递属性,Jsp通过EL表达式获取属性${username}
2.Jsp到Servlet
- Jsp通过form表单的action请求路径和输入框来传递属性或者是通过Jsp指令
<form action="${pageContext.request.contextPath}/checking" method="post">
<input type="text" name="username" id="username" value="用户名" placeholder="请输入用户名"/><br/>
<input type="submit" value="按钮名称" style="width: 100px;height: 50px"/>
</form>
<jsp:forward page="test.jsp">
<jsp:param name="username" value="用户名"/>
</jsp:forward>
- Servlet通过request.getParameter(“username”)获取参数