Spring基本
Spring理論
概要
Springが理解しなければならない3つの概念
AOP / Interceptor / Filter
リクエストが相次いだ場合、前の手順でいくつかの操作があります.
ファイルの設定
web.xml + Filter
すべてのリクエスト(/*)にエンコードフィルタを設定
今の仕事に行けばネットxmlを開く どのlistenerとfilterが設定されていますか 目で見るのが先だ
servlet-context.xml
構成
第
Tomcatサーバの使用
サーバの追加
ポート番号の競合を回避するために変更
Root Pathに変更
Controller
Annotation
Annotationを使用してクラス、インスタンス管理をFrameworkに委任→ コントロールの反転
@Component
-- @Controller
-- @Services
-- @Repository
// UserCtrl.java
package com.sinc.intern.user.ctrl;
import org.springframework.stereotype.Controller;
@Controller
public class UserCtrl {
}
コントローラのリカバリタイプ
コントローラの戻りタイプは、通常Stringの->jspファイル名です.
メソッドの戻りタイプやパラメータなどの構文タイプには制約がありません
Annotationがユーザ要求をコントローラメソッドにマッピングする
// UserCtrl.java
package com.sinc.intern.user.ctrl;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class UserCtrl {
@RequestMapping(value="/login.do", method=RequestMethod.POST) // 설정 가능
public String login() {
}
@RequestMapping("/logout.do")
public String logout() {
}
@RequestMapping("/join.do")
public String join() {
}
@RequestMapping("/search.do")
public String search() {
}
}
jspファイルの場所
viewsディレクトリにjspファイルを入れる必要があります
// home.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Hello world!</h1>
<P>This is a Spring Framework by J.S.LIM</P>
</body>
</html>
コントローラ戻り値
Controllerメソッドは、ファイルの論理名(拡張子を除く)を返します.
// UserCtrl.java
package com.sinc.intern.user.ctrl;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.sinc.intern.user.model.vo.UserDTO;
@Controller
public class UserCtrl {
@RequestMapping()
public String login(UserDTO dto) {
System.out.println("ctrl login");
System.out.println("UserDTO: " + dto);
return "home";
}
@RequestMapping("/logout.do")
public String logout() {
return null;
}
@RequestMapping("/join.do")
public String join() {
return null;
}
@RequestMapping("/search.do")
public String search() {
return null;
}
}
UserVOとUserDTOの作成
// UserVO.java
package com.sinc.intern.user.model.vo;
public class UserVO {
private String id, pwd, name;
private double point;
private String dept;
public UserVO() {
// TODO Auto-generated constructor stub
}
public UserVO(String id, String pwd, String name, double point, String dept) {
super();
this.id = id;
this.pwd = pwd;
this.name = name;
this.point = point;
this.dept = dept;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPoint() {
return point;
}
public void setPoint(double point) {
this.point = point;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
@Override
public String toString() {
return "UserVO [id=" + id + ", pwd=" + pwd + ", name=" + name + ", point=" + point + ", dept=" + dept + "]";
}
}
// UserDTO.java
package com.sinc.intern.user.model.vo;
public class UserDTO {
private String id, pwd;
public UserDTO() {
// TODO Auto-generated constructor stub
}
public UserDTO(String id, String pwd) {
super();
this.id = id;
this.pwd = pwd;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "UserDTO [id=" + id + ", pwd=" + pwd + "]";
}
}
コントローラの戻りタイプはvoid
ユーザ要求に基づくurl検索(logout.do,従ってlogout.jsp)
// UserCtrl.jsp
@RequestMapping("/logout.do")
public void logout() { // 리턴타입이 void
System.out.println("ctrl logout");
}
ModelAndView return
// UserCtrl.java
@RequestMapping("/join.do")
public ModelAndView join(ModelAndView mv) {
System.out.println("ctrl join");
mv.addObject("msg", "Hi, JSLIM");
mv.setViewName("home");
return mv;
}
// home.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Hello world!</h1>
<P>This is a Spring Framework by J.S.LIM ${msg}</P>
</body>
</html>
モデルAndViewからのみモデルを分離(推奨)
// UserCtrl.java
@RequestMapping("/search.do")
public String search(Model model) {
System.out.println("ctrl search");
model.addAttribute("msg", "using model 섭쌤 추천~~~~~~~");
return "home";
}
UserVO return
// UserCtrl.java
@RequestMapping("/ajax.do")
@ResponseBody // 비동기 통신
public UserVO ajax() {
System.out.println("ctrl ajax");
return new UserVO("jslim", "jslim", "임정섭", 1000, "EMART");
}
完全なUserCtrl
// UserCtrl.java
package com.sinc.intern.user.ctrl;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import com.sinc.intern.user.model.vo.UserDTO;
import com.sinc.intern.user.model.vo.UserVO;
@Controller
public class UserCtrl {
@RequestMapping()
public String login(UserDTO dto) { // 리턴타입이 String
System.out.println("ctrl login");
System.out.println("UserDTO: " + dto);
return "home";
}
@RequestMapping("/logout.do")
public void logout() { // 리턴타입이 void
System.out.println("ctrl logout");
}
@RequestMapping("/join.do")
public ModelAndView join(ModelAndView mv) {
System.out.println("ctrl join");
mv.addObject("msg", "Hi, JSLIM");
mv.setViewName("home");
return mv;
}
@RequestMapping("/search.do")
public String search(Model model) {
System.out.println("ctrl search");
model.addAttribute("msg", "using model 섭쌤 추천~~~~~~~");
return "home";
}
@RequestMapping("/ajax.do")
@ResponseBody // 비동기 통신
public UserVO ajax() {
System.out.println("ctrl ajax");
return new UserVO("jslim", "jslim", "임정섭", 1000, "EMART");
}
}
ログイン機能の実装
Welcome page
index.jspのmain.doを使用してurlを接続する
// index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<script type="text/javascript">
location.href = "main.do";
</script>
HomeControllerからMainへ.do urlを実際のホームページjspファイルのホームとします.jsp接続で返す// HomeController
package com.sinc.intern;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HomeController {
@RequestMapping("/main.do")
public String home() {
System.out.println("ctrl main");
return "home";
}
}
Service
@サービス サービスとして宣言しながら別名を指定
コントローラで@Resourceを使用して別名タイプのオブジェクトを作成して割り当てる
// UserCtrl.java
package com.sinc.intern.user.ctrl;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.sinc.intern.user.model.vo.UserDTO;
import com.sinc.intern.user.service.UserService;
@Controller
public class UserCtrl {
@Resource(name = "userS") // 의존성 주입
private UserService service;
@RequestMapping("/loginForm.do")
public String loginForm() {
System.out.println("user loginForm");
return "user/login";
}
@RequestMapping(value = "/login.do", method = RequestMethod.POST)
public String login(UserDTO dto, HttpSession session) {
System.out.println("user login dto: " + dto);
Object user = service.login(dto);
if (user != null) {
session.setAttribute("loginUser", user);
}
return "redirect:/main.do";
}
}
注意@Serviceをインスタンスを生成するUserServiceImplクラスに忘れないでください// UserService.java
package com.sinc.intern.user.service;
public interface UserService {
public Object login(Object obj);
}
// UserServiceImpl.java
package com.sinc.intern.user.service;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.sinc.intern.user.model.sql.UserDao;
@Service("userS") // Annotation 까먹지 않도록 주의, 별칭 부여 가능
public class UserServiceImpl implements UserService {
@Resource(name = "userD")
private UserDao dao;
@Override
public Object login(Object obj) {
System.out.println("user service login");
return null;
}
}
クラスファイルで@Service(「users」)とroot-context.xmlでbeanタグを使用して説明する(モードベースの設定)は同じです
// root-context.xml
<bean id="userS" class="com.sinc.intern.user.service.UserServiceImpl">
</bean>
ただし,@Resources宣言は依存性注入時に便利である.現在の業界では,サービス説明と依存性注入はいずれも模倣に基づいているか,あるいはサービス説明はモデルに基づいており,依存性注入は模倣に基づいて混用されている.
Dao
@Repository Daoとして宣言しながら別名を指定
サービスによって@Resourceによって作成され、その別名を持つタイプのオブジェクトが割り当てられます.
// UserServiceImpl.java
package com.sinc.intern.user.model.sql;
import javax.annotation.Resource;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;
@Repository("userD")
public class UserDaoImpl implements UserDao {
@Resource(name = "sqlSession")
private SqlSession session;
@Override
public Object loginRow(Object obj) {
System.out.println("user dao loginRow: " + obj);
System.out.println("user dao conn: " + session);
return null;
}
}
注意インスタンスを生成するUserDaoImplクラスで@Repositoryを忘れないでください// UserDao.java
package com.sinc.intern.user.model.sql;
public interface UserDao {
public Object loginRow(Object obj);
}
// UserDaoImpl.java
package com.sinc.intern.user.model.sql;
import org.springframework.stereotype.Repository;
@Repository("userD")
public class UserDaoImpl implements UserDao {
@Override
public Object loginRow(Object obj) {
System.out.println("user dao loginRow");
return null;
}
}
DAO-MyBasisへのデータのインポート// UserDaoImpl.java
package com.sinc.intern.user.model.sql;
import javax.annotation.Resource;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;
@Repository("userD")
public class UserDaoImpl implements UserDao {
public static final String PREFIX = "com.sinc.intern.test";
@Resource(name = "sqlSession")
private SqlSession session;
@Override
public Object loginRow(Object obj) {
System.out.println("user dao loginRow: " + obj);
System.out.println("user dao conn: " + session);
Object result = session.selectOne(PREFIX + ".login", obj);
System.out.println("dao loginRow result: " + result);
return result;
}
}
testMapper.xmlでSQL文を作成する絶対セミコロン(;)使えない
// testMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sinc.intern.test">
<select id="login" parameterType="userdto" resultType="uservo">
SELECT ID, PWD, NAME, POINT, DEPT
FROM INTERN_USER_TBL
WHERE ID = #{id} AND PWD = #{pwd}
</select>
</mapper>
SQLで使用されるパラメータと結果タイプの説明絶対セミコロン(;)使えない
// mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias type="com.sinc.intern.user.model.vo.UserDTO"
alias="userdto" />
<typeAlias type="com.sinc.intern.user.model.vo.UserVO"
alias="userdto" />
</typeAliases>
</configuration>
JSPのフォームタグ
login.doに接続し、フォームタグのidとpwd値をUserCtrlのloginメソッドに渡す
// login.jsp
<form action="login.do" method="post">
<div class="form-group has-feedback">
<input type="text" name="id" class="form-control"
placeholder="USER ID" /> <span
class="glyphicon glyphicon-envelope form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input type="password" name="pwd" class="form-control"
placeholder="Password" /> <span
class="glyphicon glyphicon-lock form-control-feedback"></span>
</div>
<div class="row">
<div class="col-xs-8">
<div class="checkbox icheck">
<label> <input type="checkbox" name="useCookie">
Remember Me
</label>
</div>
</div>
<!-- /.col -->
<div class="col-xs-4">
<button type="submit" class="btn btn-primary btn-block btn-flat">Sign
In</button>
</div>
<!-- /.col -->
</div>
</form>
// UserCtrl.java
@RequestMapping(value = "/login.do", method = RequestMethod.POST)
public String login(UserDTO dto, HttpSession session) {
System.out.println("user login dto: " + dto);
Object user = service.login(dto);
if (user != null) {
session.setAttribute("loginUser", user);
}
return "redirect:/main.do";
}
出典:SHINSEGAE I&C実習Reference
この問題について(Spring基本), 我々は、より多くの情報をここで見つけました https://velog.io/@vencott/Spring-기본テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol