文章目录
servlet接口需要实现的5个方法
package app01a;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(name = "MyServlet",urlPatterns = ("/my"))
public class MyServlet implements Servlet{
private transient ServletConfig servletConfig;//transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。
@Override
public void init(ServletConfig servletConfig) throws ServletException{
this.servletConfig=servletConfig;
}
@Override
public ServletConfig getServletConfig() {
return servletConfig;
}
@Override
public String getServletInfo(){
return "My Servlet";
}
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException{
String servletName=servletConfig.getServletName();
response.setContentType("text/html");
PrintWriter writer=response.getWriter();
writer.print("<html><head></head><body>Hello World "+servletName+"</body></html>");
}
@Override
public void destroy(){
}
}
HttpServlet简单HelloWorld
HelloWorld.java
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(name = "HelloWorld",
urlPatterns = {"/HelloWorld"}
)
public class HelloWorld extends HttpServlet {
private String message;
@Override
public void init() throws ServletException {
message = "Hello world, this message is from servlet!";
}
@Override //service
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置响应内容类型
resp.setContentType("text/html");
//设置逻辑实现
PrintWriter out = resp.getWriter();
out.println("<h1>" + message + "</h1>");
//测试对参数的处理
}
@Override
public void destroy() {
super.destroy();
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
</web-app>
初始参数处理
- 默认参数
@WebServlet(name = "HelloWorld",
urlPatterns = {"/HelloWorld"},
initParams = {
@WebInitParam(name = "user",value = "tqc"),
@WebInitParam(name = "email",value = "666"),
}
- 获取键名
//获取键的名字
Enumeration<String> names=getInitParameterNames();
while (names.hasMoreElements()){
System.out.println(names.nextElement());
}
- 遍历键值对
ServletConfig servletConfig=getServletConfig();
Enumeration<String> names=servletConfig.getInitParameterNames();
while (names.hasMoreElements()){
String name=names.nextElement();
String value=servletConfig.getInitParameter(name);
System.out.println(name+":"+value);
}
通过cookie保持用户登录
//cookie操作
CookieTool cookieTool=new CookieTool();
cookieTool.buildCookiesMap(req);
String userId=cookieTool.get("userId");
System.out.println("userId="+userId); //打印用户Id
if(userId.equals("")){
Cookie userIdCookie=new Cookie("userId","1");
resp.addCookie(userIdCookie);
}
CookieTool.java
package tools;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
public class CookieTool {
HashMap<String,String> cookiesMap;
public CookieTool(){
cookiesMap=new HashMap<String,String>();
}
public void buildCookiesMap(HttpServletRequest request){
Cookie[] cookies=request.getCookies();
if(cookies!=null){
for(Cookie cookie:cookies){
String name=cookie.getName();
String value=cookie.getValue();
this.cookiesMap.put(name,value);
}
}
}
public String get(String name){
String ans=this.cookiesMap.getOrDefault(name,"");
return ans;
}
}
JSP的EL表达式
java代码中提供模板数据,装入request中,重定向
HashMap<String,String> person=new HashMap<>();
person.put("name","tqc");
request.setAttribute("person",person);
RequestDispatcher rd=request.getRequestDispatcher("/LearnEL/index.jsp");
rd.forward(request,response);
jsp中通过EL读取数据
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page pageEncoding="utf-8" isELIgnored="false" %>
<p>ID=${requestScope.person.name}</p><br>
JSTL
依赖两个库
/usr/local/apache-tomcat-8.5.39/webapps/examples/WEB-INF/lib/
taglibs-standard-impl-1.2.5.jar
taglibs-standard-spec-1.2.5.jar
拷到 lib
中
通用动作指令
out
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:out value="value" default="default"></c:out>
set
- 创建一个限域变量
<c:set var="name" value="tqc" scope="request"></c:set>
<p>${requestScope.name}</p>
- 设置限域变量中的属性值
给键值对或者对象成员赋值
<c:set target="${person}" property="name" value="dsy"></c:set>
<p>${requestScope.person.name}</p>
条件动作指令
if
<c:if var="ans" test="${fn:contains(\"Hello World\",\"Hello\" )}" />
<p>${ans?"ok":"no"}</p>
forEach
- 下标访问
<c:forEach var="i" begin="1" end="5">
<p>x=${i}</p>
</c:forEach>
- 元素访问(列表)
<c:forEach var="e" items="${list}">
<p>e=${e}</p>
</c:forEach>
- 元素访问(键值对)
<c:forEach var="item" items="${person}">
<p>key=${item.key},value=${item.value}</p>
</c:forEach>
forToken
<c:forTokens var="item" items="nice to meet you" delims=" ">
<p>${item}</p>
</c:forTokens>